10 00 1000 图4-2系统状态响应 4.3面向传递函数的连续系统仿真 一个控制系统的动态模型经常是一传递函数的形式给出,特别是当给出开环传 递函数,在进行系统仿真时就要将开环传递函数转换为开环状态方程,再由开环状 态方程求出对应的闭环状态方程,然后,再应用数值积分方法进行分解和分析仿真 下面将就这类问题加以介绍并给出 MATLAB的实现。 4.3.1面向传递函数的系统仿真 考虑一个连续系统,它的开环传递函数的一般描述为 CrS+Cs-2 +cn-Istc 其相应的状态空间表达式为 X=AX+Bl Y=CX 其中A、B、C为相应的系统系数阵,这些系数阵可以写作能控标准型形式或能观标 准型形式,当然也可以写成其他的形式,这些都不会影响系统分析的结果。现如果 假定系统结构图如图4-3所示,对于SISO系统,其v、u、y、f均为标量。由结构 图可知u=v-fy,将其代入状态空间表达式得到 X=AX+B(u-fy AX+B
124 图 4-2 系统状态响应 4.3 面向传递函数的连续系统仿真 一个控制系统的动态模型经常是一传递函数的形式给出,特别是当给出开环传 递函数, 在进行系统仿真时就要将开环传递函数转换为开环状态方程,再由开环状 态方程求出对应的闭环状态方程,然后,再应用数值积分方法进行分解和分析仿真。 下面将就这类问题加以介绍并给出 MATLAB 的实现。 4.3.1 面向传递函数的系统仿真 考虑一个连续系统,它的开环传递函数的一般描述为 ( ) ( ) ( ) n n n n n n n n n s a s a s a s a c s c s c s c U s Y s G s + + + + + + + + + = = − − − − − − 1 2 2 1 1 1 2 2 1 1 其相应的状态空间表达式为 Y CX X AX BU = = + 其中 A、B、C 为相应的系统系数阵,这些系数阵可以写作能控标准型形式或能观标 准型形式,当然也可以写成其他的形式,这些都不会影响系统分析的结果。现如果 假定系统结构图如图 4-3 所示,对于 SISO 系统,其 v、u、y 、f 均为标量。由结构 图可知 u = v-fy,将其代入状态空间表达式得到 A X Bv X AX B v fy = b + = + ( − )
t= Ax Bu C 图4-3系统结构图 式中A=A-BC 输出方程为: Y=CX (4-1)式即为系统闭环状态方程。因此可以方便地利用各种数值积分方法对其进行 求解,实现对以传递函数形式给出的系统进行仿真分析研究。显然,如果系统的数 学模型是以微分方程或状态方程形式给出的,一般就可以直接利用前述数值积分方 法或ode函数方法对系统进行仿真研究。 4.3.2面向传递函数的系统仿真的 MATLAB实现 下面通过一个例子说明如何利用 MATLA B语言进行以传递函数形式给出的系 统的仿真分析。 例4-3设单位反馈系统的开环传递函数为 G(S) 2(S+2) (S+3)s2+2s+2 试给出系统闭环的阶跃响应。 解根据开环传递函数求出系统开环状态方程,应用 MATLAB控制工具箱中的 函数,可以方便地求出系统开环状态方程。 num=2*[12];den=conv(conv([1,0][1,3]1,22]) la,b, c, d =ssdata(G)
125 图 4-3 系统结构图 式中 Ab = A− BfC (4-1) 输出方程为: Y =CX (4-2) (4-1)式即为系统闭环状态方程。因此可以方便地利用各种数值积分方法对其进行 求解,实现对以传递函数形式给出的系统进行仿真分析研究。显然,如果系统的数 学模型是以微分方程或状态方程形式给出的,一般就可以直接利用前述数值积分方 法或 ode 函数方法对系统进行仿真研究。 4.3.2 面向传递函数的系统仿真的 MATLAB 实现 下面通过一个例子说明如何利用 MATLAB 语言进行以传递函数形式给出的系 统的仿真分析。 例 4-3 设单位反馈系统的开环传递函数为 ( 3)( 2 2) 2( 2) ( ) 2 + + + + = s s s s s G s 试给出系统闭环的阶跃响应。 解 根据开环传递函数求出系统开环状态方程,应用 MATLAB 控制工具箱中的 函数,可以方便地求出系统开环状态方程。 num =2*[1,2]; den = conv(conv([1,0],[1,3]),[1,2,2]) G1 = tf(num,den); G2 = ss(G1); [a,b,c,d] = ssdata (G);
这样即可以得到系统系数阵分别为 5.0000-2.0000-0.75000 02.0000 01.00000 00000 进而就可以方便地求出系统闭环状态方程 Ab=a-b*c: bb=b: Cb=c Db=0 Ab 50000-2.0000-1.0000-0.5000 4.0000 02.0000 0 0 01.0000 0 Bb 000 00.25000.5000 从而可以应用数值积分方法求取系统的阶跃响应。下面给出了应用 MATLAB语言编 写的四阶龙格-库塔数值积分方法的仿真程序,相应的仿真曲线由图4-4给出 X=[00,0,0]Y=0;t=0,U=25,Tf=15;h=0.01; N=Tf/h Ab=[-5-2-1-0.5;4000,0200,00101 126
126 这样即可以得到系统系数阵分别为 a = -5.0000 -2.0000 -0.7500 0 4.0000 0 0 0 0 2.0000 0 0 0 0 1.0000 0 b = 1 0 0 0 c = 0 0 0.2500 0.5000 d = 0 进而就可以方便地求出系统闭环状态方程 Ab = a-b*c; Bb = b; Cb = c Db = 0 Ab = -5.0000 -2.0000 -1.0000 -0.5000 4.0000 0 0 0 0 2.0000 0 0 0 0 1.0000 0 Bb = 1 0 0 0 Cb = 0 0 0.2500 0.5000 Db = 0 从而可以应用数值积分方法求取系统的阶跃响应。下面给出了应用 MATLAB 语言编 写的四阶龙格-库塔数值积分方法的仿真程序,相应的仿真曲线由图 4-4 给出。 X = [ 0;0;0;0]; Y = 0; t = 0; U = 25; Tf = 15; h=0.01; N = Tf/h; Ab = [ -5 -2 -1 -0.5; 4 0 0 0; 0 2 0 0; 0 0 1 0];
图44四阶龙格-库塔数值积分方法的仿真曲线 Cb=[000.250.5 KI=Ab*x+Bb*U K2=Ab*(X+h*K1/2)+Bb*U K3=Ab*(X+ h*K2/2)+Bb*U K4=Ab*(X+h*K3)+Bb*U X=X+h*(K1+2*K2+2*K3+K4)/6 Y=[Y, Cb*X t=[t, t(i)+h]: plot(t,Y) 当由已知系统开环传递函数求取系统开环状态方程时,除了可以利用ss函数直 接求取外,还可以使用状态方程相似变换函数sss进行求取,下面给出上例中应用 相似变换函数ss求取系统开环状态方程的基本用法。这里主要利用矩阵水平翻转 函数 flipper构造出反对角阵作为变换阵,从而得到相应的状态方程 num=2*1, 2: den= conv(conv(1, 0],[1, 3 ).1, 2, 2D) 1= tf(num, den); G2=SS(G1) plr(eye(4)); G=sS2ss(G2, T) 12
127 图 4-4 四阶龙格-库塔数值积分方法的仿真曲线 Bb = [1; 0; 0;0]; Cb = [0 0 0.25 0.5]; Db = 0; for i = 1:n K1 = Ab * X + Bb*U; K2 = Ab * (X + h*K1/2)+Bb*U; K3 = Ab * (X + h*K2/2)+Bb*U; K4 = Ab * (X + h*K3)+Bb*U; X = X+ h*(K1 + 2*K2+ 2*K3 +K4)/6; Y = [ Y, Cb*X]; t = [t, t(i)+h]; end plot (t,Y) Grid 当由已知系统开环传递函数求取系统开环状态方程时,除了可以利用 ss 函数直 接求取外,还可以使用状态方程相似变换函数 ss2ss 进行求取,下面给出上例中应用 相似变换函数 ss2ss 求取系统开环状态方程的基本用法。这里主要利用矩阵水平翻转 函数 fliplr 构造出反对角阵作为变换阵,从而得到相应的状态方程。 num = 2 *[1,2]; den = conv(conv([1,0],[1,3]),[1,2,2]); G1= tf (num, den); G2 = ss(G1); T = fliplr (eye(4)); G = ss2ss(G2,T)