如下分析a、b两系统的动态性能,求其动态性能指标
function index_data = compare_step3_10(str,K1,K2,K3,T)
% 函数功能:画出单位阶跃响应图,并求出动态指标
% 函数参数:
% str : 系统a或b选择
% K1,K2,K3,T
% 函数返回值:
% index_data = [超调量 峰值时间tp 调节时间ts]
%%%%%%%%%%%系统建模%%%%%%%%%%%%%%%%%%%%
num = [K2];
den = conv([1 0],[T 1]);
G1 = tf([K2],den);%各个子方块系统模型
H1 = tf([K3 0],[1]);
G2 = [K1];
sysa1 = feedback(G1,H1,-1);%反馈
sysa2 = series(G2,sysa1);%串联
sysa = feedback(sysa2,1,-1);%(a)系统的传递函数
sysb1 = parallel(G2,H1);%并联
sysb2 = series(sysb1,G1);
sysb = feedback(sysb2,1,-1);
t = 0:0.01:3;%设定仿真时间
% figure('name','单位阶跃响应')%创建一个窗口
if(str == 'a')
step(sysa,t);
[y,x] = step(sysa,t);%
end
if(str == 'b')
step(sysb,t);
[y,x] = step(sysb,t);%
end
%%%%%%%%%%%求解动态指标%%%%%%%%%%%%%%%%%%%%
maxy = max(y);%响应的最大偏移量
yss = y(length(x));%响应的终值
pos = 100*(maxy - yss)/yss;%求超调量
for i = 1:301
if y(i) == maxy
n = i;end
end
tp = (n-1)*0.01;%峰值时间
y1 = 1.05*yss;
y2 = 0.95*yss;
i = n;%%%不能i = 0;因为在峰之前有超调量,也就是ts > tp;!!!
while i < 301
i = i + 1;
if y(i) >= y2 && y(i) <= y1
break;
end
end
ts = (i-1)*0.01;%求调节时间
index_data = [pos tp ts];
hold on; % 将曲线保持在图形中
grid on;%grid off/on关闭或打开图形网格线
xlabel('t');ylabel('c(t)');title('单位阶跃响应');
% legend('(a)单位阶跃响应','(b)单位阶跃响应')
1.命令窗口输入:
figure('name','单位阶跃响应')%创建一个窗口
compare_step3_10('a',5,20,1,1)
compare_step3_10('a',5,10,1,1)
compare_step3_10('a',5,5,1,1)
compare_step3_10('a',5,5,5,1)
输出: [超调量 峰值时间tp 调节时间ts]
ans =
0 3 3
ans =
2.0481 0.7100 0.7200
ans =
9.4815 0.7900 1.0500
ans =
0 3 3
2.命令窗口输入:
figure('name','单位阶跃响应')%创建一个窗口
compare_step3_10('a',20,5,1,1)
compare_step3_10('a',10,5,1,1)
compare_step3_10('a',5,5,1,1)
compare_step3_10('a',1,5,1,1)
ans =
37.2140 0.3300 0.5100
ans =
22.9653 0.4900 0.7400
ans =
9.4815 0.7900 1.0500
ans =
0 3 3
3.命令窗口输入:
figure('name','单位阶跃响应')%创建一个窗口
compare_step3_10('b',20,5,1,1)
compare_step3_10('b',10,5,1,1)
compare_step3_10('b',5,5,1,1)
compare_step3_10('b',1,5,1,1)
ans =
42.5673 0.2800 0.4600
ans =
30.8005 0.3700 0.6400
ans =
19.4643 0.5100 0.8900
ans =
0 3 3