实验十四: MATLAB 的线性控制系统分析与设计一.实验目的1.熟练掌握线性系统的各种模型描述。
2.熟练掌握模型之间的转换。
二.实验容与步骤在控制系统分析与设计中,常用状态方程模型来描述一个控制系统,状态方程通常为一阶微分方程例如,二阶系统 可用状态方程描述如下 其中:MATLAB 的控制系统工具箱(Control System Toolbox)可以提供对线性系统分析、设计和建模的各种算法。
1.1状态空间描述法状态空间描述法是使用状态方程模型来描述控制系统,MATLAB 中状态方程模型的建立使用ss 和dss 命令。
语法:G=ss(a,b,c,d) %由a 、b 、c 、d 参数获得状态方程模型G=dss(a,b,c,d,e) %由a 、b 、c 、d 、e 参数获得状态方程模型【例1】写出二阶系统u(t)ωy(t)ωdtdy(t)2ζdt y(t)d 2n 2n n 22=+ω+,当ζ=0.707,n ω=1时的状态方程。
zeta=0.707;wn=1;A=[0 1;-wn^2 -2*zeta*wn];B=[0;wn^2];C=[1 0];D=0;G=ss(A,B,C,D) %建立状态方程模型⎩⎨⎧+=+=Du Cx y Bu Ax x &u (t)2n ωy(t)2n ωd t d y(t)n 2ζ2d t y(t)2d =+ω+u(t)ω0x x 2ζω10x x 2n 21n 2n 21⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡ω--=⎥⎦⎤⎢⎣⎡&&dtt dy x t y x )()(21==a =x1 x2x1 0 1x2 -1 -1.414b =u1x1 0x2 1c =x1 x2y1 1 0d =u1y1 0Continuous-time model.1.2传递函数描述法MATLAB中使用tf命令来建立传递函数。
语法:G=tf(num,den) %由传递函数分子分母得出说明:num为分子向量,num=[b1,b2,…,b m,b m+1];den为分母向量,den=[a1,a2,…,a n-1,a n]。
【例1续】将二阶系统描述为传递函数的形式。
num=1;den=[1 1.414 1];G=tf(num,den) %得出传递函数Transfer function:1-----------------s^2 + 1.414 s + 11.3零极点描述法MATLAB 中使用zpk 命令可以来实现由零极点得到传递函数模型。
语法:G=zpk(z,p,k) %由零点、极点和增益获得说明:z 为零点列向量;p 为极点列向量;k 为增益。
【例1续】得出二阶系统的零极点,并得出传递函数。
num=1;den=[1 1.414 1];z=roots(num)p=roots(den)zpk(z,p,1)z =Empty matrix: 0-by-1p =-0.7070 + 0.7072i-0.7070 - 0.7072iZero/pole/gain:1-------------------(s^2 + 1.414s + 1)程序分析:roots 函数可以得出多项式的根,零极点形式是以实数形式表示的。
部分分式法是将传递函数表示成部分分式或留数形式:k(s)p s r p s r p s r G (s)nn 2211+-++-+-=Λ 【例1续】将传递函数转换成部分分式法,得出各系数num=1;den=[1 1.414 1];[r,p,k]=residue(num,den)r =0 - 0.7070i0 + 0.7070ip =-0.7070 + 0.7072i-0.7070 - 0.7072ik =[]1.4离散系统的数学描述1.状态空间描述法状态空间描述离散系统也可使用ss和dss命令。
语法:G=ss(a,b,c,d,Ts) %由a、b、c、d参数获得状态方程模型G=dss(a,b,c,d,e,Ts) %由a、b、c、d、e参数获得状态方程模型说明:Ts为采样周期,为标量,当采样周期未指明可以用-1表示。
【例2】用状态空间法建立离散系统。
a=[-1.5 -0.5;1 0];b=[1;0];c=[0 0.5];d=0;G=ss(a,b,c,d,0.2) %采样周期为0.2sa =x1 x2x1 -1.5 -0.5x2 1 0b =u1x1 1x2 0c =x1 x2y1 0 0.5d =u1y1 0Sampling time: 0.2Discrete-time model.2. 脉冲传递函数描述法脉冲传递函数也可以用tf 命令实现。
语法:G=tf(num,den,Ts) %由分子分母得出脉冲传递函数说明:Ts 为采样周期,为标量,当采样周期未指明可以用-1表示,自变量用'z'表示。
【例2续】创建离散系统脉冲传递函数21120.5z 1.5z 10.5z 0.51.5z z 0.5zG(z)---+-=+-=。
num1=[0.5 0];den=[1 -1.5 0.5];G1=tf(num1,den,-1)Transfer function:0.5 z-----------------z^2 - 1.5 z + 0.5Sampling time: unspecifiedMATLAB 中还可以用filt 命令产生脉冲传递函数。
语法:G=filt(num,den,Ts) %由分子分母得出脉冲传递函数说明:Ts 为采样周期,当采样周期未指明Ts 可以省略,也可以用-1表示,自变量用'z-1'表示。
【例2续】使用filt 命令产生脉冲传递函数。
num2=[0 0.5];G2=filt(num2,den)Transfer function:0.5 z^-1-----------------------1 - 1.5 z^-1 + 0.5 z^-2Sampling time: unspecified程序说明:用filt 命令生成的脉冲传递函数的自变量不是z 而是z -1,因此分子应改为“[0 0.5]”。
3. 零极点增益描述法离散系统的零极点增益用zpk 命令实现。
语法:G=zpk(z,p,k,Ts) %由零极点得出脉冲传递函数【例2续】使用zpk 命令产生零极点增益传递函数。
G3=zpk([0],[0.5 1],0.5,-1)Zero/pole/gain:0.5 z-------------(z-0.5) (z-1)Sampling time: unspecified2线性系统模型之间的转换在MATLAB5.3版及以前的控制系统工具箱中有各种不同模型转换的函数,如下表 6.1所示为线性系统模型转换的函数。
1. 系统模型的转换(1) 状态空间模型的获得由命令ss和dss实现将传递函数和零极点增益转换为状态空间模型。
语法:G=ss(传递函数) %由传递函数转换获得G=ss(零极点模型) %由零极点模型转换获得【例3】将系统传递函数转换为状态空间描述。
num=[1 2 5];den=[3 5 2 1];G1=tf(num,den)G=ss(G1)Transfer function:s^2 + 2 s + 5-----------------------3 s^3 + 5 s^2 + 2 s + 1a =x1 x2 x3x1 -1.667 -0.3333 -0.1667x2 2 0 0x3 0 1 0b =u1x1 1x2 0x3 0c =x1 x2 x3y1 0.3333 0.3333 0.8333d =u1y1 0Continuous-time model.(2) 传递函数的获得由tf命令实现将系统的状态空间法和零极点增益模型转换为传递函数。
语法:G=tf(状态方程模型) %由状态空间转换G=tf(零极点模型) %由零极点模型转换【例3续】由状态空间描述转换为传递函数。
num=[1 2 5];den=[3 5 2 1];G1=tf(num,den);G=ss(G1);G2=tf(G)Transfer function:0.3333 s^2 + 0.6667 s + 1.667-----------------------------------s^3 + 1.667 s^2 + 0.6667 s + 0.3333(3) 零极点模型的获得由zpk命令实现将状态空间法、传递函数转换为零极点模型。
语法:G=zpk(状态方程模型) %由状态方程模型转换G=zpk(传递函数) %由传递函数转换【例3续】由状态方程模型转换零极点模型。
num=[1 2 5];den=[3 5 2 1];G1=tf(num,den);G=ss(G1) ;G3=zpk(G)Zero/pole/gain:0.33333 (s^2 + 2s + 5)-----------------------------------(s+1.356) (s^2 + 0.3103s + 0.2458)2.模型参数的获取语法:[a,b,c,d]=ssdata(G) %获取状态空间参数[a,b,c,d,e]=dssdata(G) %获取状态空间参数[num,den]=tfdata(G) %获取传递函数参数[z,p,k]=zpkdata(G) %获取零极点参数【例3续】获取各模型的参数num=[1 2 5];den=[3 5 2 1];G1=tf(num,den);G=ss(G1) ;[a,b,c,d]=ssdata(G) %获取状态方程参数a =-1.6667 -0.3333 -0.16672.0000 0 00 1.0000 0b =1c =0.3333 0.3333 0.8333d =2.2.使用各种分析方法分析系统 已知系统的传递函数为2222)1()(nn s n s s T s G ωξωϖ+++= (1) 当1,0,1,4.0,2.0===n T ωξ时在同一窗口脉冲响应曲线>> wn=1;T=0;>> for zeta=[0.2 0.4 1]G=tf(wn^2,[1 2*zeta*wn,wn^2])impulse(G)hold onendTransfer function:1---------------s^2 + 0.4 s + 1Transfer function:1---------------s^2 + 0.8 s + 1Transfer function:1-------------s^2 + 2 s + 1(2)当时,在同一窗口绘制阶跃响应曲线。
>> wn=1;zeta=0.4;figure(1)for T=[0.5 1 2]>> G1=tf(wn^2,[1 2*zeta*wn,wn^2]);G2=tf([T 1],1);G=G1*G2step(G)hold onend从上图可以看出增加零点后系统响应的变化,T越大,零点越小,则阶跃响应的超调量加大,上升时间减小,暂态响应速度加快。