系统动态特性分析。
(1)时域响应解析算法――部分分式展开法。
用拉氏变换法求系统的单位阶跃响应,可直接得出输出c(t)随时间t 变化的规律,对于高阶系统,输出的拉氏变换象函数为:
s
den num s s G s C 11)()(⋅=⋅
= (21) 对函数c(s)进行部分分式展开,我们可以用num,[den,0]来表示c(s)的分子和分母。
例 15 给定系统的传递函数:
24
50351024
247)(23423+++++++=s s s s s s s s G
用以下命令对
s
s G )
(进行部分分式展开。
>> num=[1,7,24,24] den=[1,10,35,50,24]
[r,p,k]=residue(num,[den,0])
输出结果为
r= p= k=
-1.0000 -4.0000 [ ] 2.0000 -3.0000 -1.0000 -2.0000
-1.0000 -1.0000
1.0000 0
输出函数c(s)为: 01
11213241)(+++-+-+++-=
s
s s s s s C 拉氏变换得: 12)(234+--+-=----t t t t
e e e e
t c
(2)单位阶跃响应的求法:
控制系统工具箱中给出了一个函数step()来直接求取线性系统的阶跃响应,如果已知传递函数为:
den
num
s G =
)( 则该函数可有以下几种调用格式:
step(num,den) (22) step(num,den,t) (23)
或
step(G) (24)
step(G,t) (25)
该函数将绘制出系统在单位阶跃输入条件下的动态响应图,同时给出稳态值。
对于式23和25,t 为图像显示的时间长度,是用户指定的时间向量。
式22和24的显示时间由系统根据输出曲线的形状自行设定。
如果需要将输出结果返回到MATLAB 工作空间中,则采用以下调用格式:
c=step(G) (26) 此时,屏上不会显示响应曲线,必须利用plot()命令去查看响应曲线。
plot 可以根据两 个或多个给定的向量绘制二维图形,详细介绍可以查阅后面的章节。
例16 已知传递函数为: 25
425
)(2++=
s s s G
利用以下MATLAB 命令可得阶跃响应曲线如图14所示。
>> num=[0,0,25]; den=[1,4,25];
step(num,den)
grid % 绘制网格线。
title(¹Unit-Step Response of G(s)=25/(s^2+4s+25) ¹) % 图像标题 我们还可以用下面的语句来得出阶跃响应曲线 >> G=tf([0,0,25],[1,4,25]);
t=0:0.1:5; % 从0到5每隔0.1取一个值。
c=step(G,t); % 动态响应的幅值赋给变量c
plot(t,c) % 绘二维图形,横坐标取t,纵坐标取c 。
Css=dcgain(G) % 求取稳态值。
系统显示的图形类似于上一个例子,在命令窗口中显示了如下结果
Css= 1
(3)求阶跃响应的性能指标
MATLAB 提供了强大的绘图计算功能,可以用多种方法求取系统的动态响应指标。
我们首先介绍一种最简单的方法――游动鼠标法。
对于例16,在程序运行完毕后,用鼠标左键点击时域响应图线任意一点,系统会自动跳出一个小方框,小方框显示了这一点的横坐标(时间)和纵坐标(幅值)。
按住鼠标左键在曲线上移动,可以找到曲线幅值最大的一点――即曲线最大峰值,此时小方框中显示的时间就是此二阶系统的峰值时间,根据观察到的稳态值和峰值可以计算出系统的超调量。
系统的上升时间和稳态响应时间可以依此类推。
这种方法
图14 MATLAB 绘制的响应曲线
简单易用,但同时应注意它不适用于用plot()命令画出的图形。
另一种比较常用的方法就是用编程方式求取时域响应的各项性能指标。
与上一段介绍的游动鼠标法相比,编程方法稍微复杂,但通过下面的学习,读者可以掌握一定的编程技巧,能够将控制原理知识和编程方法相结合,自己编写一些程序,获取一些较为复杂的性能指标。
通过前面的学习,我们已经可以用阶跃响应函数step( )获得系统输出量,若将输出量返回到变量y中,可以调用如下格式
[y,t]=step(G) (27) 该函数还同时返回了自动生成的时间变量t,对返回的这一对变量y和t的值进行计算,可以得到时域性能指标。
①峰值时间(timetopeak)可由以下命令获得:
[Y,k]=max(y); (28) timetopeak=t(k) (29) 应用取最大值函数max()求出y的峰值及相应的时间,并存于变量Y和k中。
然后在变量t中取出峰值时间,并将它赋给变量timetopeak。
②最大(百分比)超调量(percentovershoot)可由以下命令得到:
C=dcgain(G);
[Y,k]=max(y); (30) percentovershoot=100*(Y-C)/C (31) dcgain( )函数用于求取系统的终值,将终值赋给变量C,然后依据超调量的定义,由Y和C计算出百分比超调量。
③上升时间(risetime)可利用MATLAB中控制语句编制M文件来获得。
首先简单介绍一下循环语句while的使用。
while循环语句的一般格式为:
while<循环判断语句>
循环体
end
其中,循环判断语句为某种形式的逻辑判断表达式。
当表达式的逻辑值为真时,就执行循环体内的语句;当表达式的逻辑值为假时,就退出当前的循环体。
如果循环判断语句为矩阵时,当且仅当所有的矩阵元素非零时,逻辑表达式的值为真。
为避免循环语句陷入死循环,在语句内必须有可以自动修改循环控制变量的命令。
要求出上升时间,可以用while语句编写以下程序得到:
C=dcgain(G);
n=1;
while y(n)<C
n=n+1;
end
risetime=t(n)
在阶跃输入条件下,y 的值由零逐渐增大,当以上循环满足y=C时,退出循环,此时对应的时刻,即为上升时间。
对于输出无超调的系统响应,上升时间定义为输出从稳态值的10%上升到90%所需时间,则计算程序如下:
C=dcgain(G);
n=1;
while y(n)<0.1*C
n=n+1; end m=1;
while y(n)<0.9*C m=m+1; end
risetime=t(m)-t(n)
④ 调节时间(setllingtime)可由while 语句编程得到: C=dcgain(G);
i=length(t);
while(y(i)>0.98*C)&(y(i)<1.02*C) i=i-1; end
setllingtime=t(i)
用向量长度函数length( )可求得t 序列的长度,将其设定为变量i 的上限值。
例 17 已知二阶系统传递函数为:
)
31)(31(3
)(i s i s s G ++-+=
利用下面的stepanalysis.m 程序可得到阶跃响应如图 15及性能指标数据。
>> G=zpk([ ],[-1+3*i,-1-3*i ],3);
% 计算最大峰值时间和它对应的超调量。
C=dcgain(G) [y,t]=step(G);
plot(t,y) grid
[Y,k]=max(y); timetopeak=t(k)
percentovershoot=100*(Y-C)/C % 计算上升时间。
n=1;
while y(n)<C n=n+1; end
risetime=t(n)
% 计算稳态响应时间。
i=length(t);
while(y(i)>0.98*C)&(y(i)<1.02*C) i=i-1; end
setllingtime=t(i)
运行后的响应图如图 15,命令窗口中显示的结果为
C = timetopeak = 0.3000 1.0491
percentovershoot = risetime =
35.0914 0.6626
setllingtime =
3.5337
图 15二阶系统阶跃响应
有兴趣的读者可以用本节介绍的游动鼠标法求取此二阶系统的各项性能指标。
将它们与例18得出的结果相比较,会发现它们是一致的。