2.2 系统数学模型间的相互转换
在系统仿真研究中,在一些场合下需要用到系统的一种模型,而在另一场合下可能又需要系统的另外一种模型,而这些模型之间又有某种内在的等效关系,所以了解由一种模型到另外一种模型的转换方法也是很必要的。在MATLAB控制系统工具箱中提供了大量的控制系统模型相互转换的函数,如表2-1所示。
表2-1 模型转换函数
1.状态空间表达式到传递函数的转换
如果系统的状态空间表达式为
式中,A:n ×n;B:n ×r;C:m ×n;D:m ×r
则系统的传递函数可表示为
式中,B0,B1,…,Bm均为m ×r实常数矩阵。
在MATLAB控制系统工具箱中,给出一个根据状态空间表达式求取系统传递函数的函数ss2tf(),其调用格式为
[num,den] =ss2tf(A,B,C,D,iu).
其中,A,B,C和D为状态空间形式的各系数矩阵;iu为输入的代号,用来指定第几个输入。对于单变量系统iu=1,对多变量系统,不能用此函数一次求出对所有输入信号的整个传递函数矩阵,而必须对各个输入信号逐个地求取传递函数子矩阵,最后获得整个的传递函数矩阵;返回结果den为传递函数分母多项式按s 降幂排列的系数;传递函数分子系数则包含在矩阵num中。num的行数与输出y的维数一致,每行对应一个输出。
【例2-6】 对于例2-5中给出的多变量系统,可以由下面的命令分别对各个输入信号求取传递函数向量,然后求出这个传递函数矩阵。
解 在MATLAB命令窗口中,利用下列MATLAB命令
>>[num1,den1] =ss2tf(A,B,C,D,1),[num2,den2] =ss2tf(A,B,C,D,2)
结果显示:
从而可求得系统的传递函数矩阵为
2.状态空间形式到零极点形式的转换
MATLAB函数ss2zp()的调用格式为
[Z,P,K] =ss2zp(A,B,C,D,iu)
其中,A,B,C,D为状态空间形式的各系数矩阵;iu为输入的代号。对于单变量系统iu=1,对于多变量系统iu表示要求的输入序号;返回量列矩阵P储存传递函数的极点;而零点储存在矩阵Z中,Z的列数等于输出y的维数,每列对应一个输出;对应增益则在列向量K中。
【例2-7】 对于例2-5中给出的状态空间表达式,试根据以上函数求取系统的传递函数矩阵。
解 在MATLAB命令窗口中,利用下列MATLAB命令
>>[Z1,P1,K1] =ss2zp(A,B,C,D,1),[Z2,P2,K2] =ss2zp(A,B,C,D,2)
结果显示:
从而可求得系统的传递函数矩阵为
3.传递函数到状态空间表达式的转换
已知系统的传递函数模型,求取系统状态空间表达式的过程称为系统的实现。由于状态变量可以任意选取,所以实现的方法并不是唯一的。这里只介绍一种比较常用的实现方法。
对于单输入多输出系统
适当地选择系统的状态变量,则系统的状态空间表达式可以写成
在MATLAB控制系统工具箱中称这种方法为能控标准型实现方法,并给出了直接实现函数。该函数的调用格式为
[A,B,C,D] =tf2ss(num,den)
其中,num的每一行为相应于某输出的按s的降幂顺序排列的分子系数,其行数为输出的个数;行向量den为按s的降幂顺序排列的公分母系数;返回量A,B,C,D为状态空间形式的各系数矩阵。
【例2-8】 将以下系统变换成状态空间形式
解 在MATLAB命令窗口中,利用下列MATLAB命令
>>num=[0 2 3;1 2 1];den=[1 0.4 1];[A,B,C,D] =tf2ss(num,den)
结果显示:
在MATLAB的多变量频域设计(MFD)工具箱中,对多变量系统的状态空间表达式与传递函数矩阵间的相互转换给出了更简单的转换函数。它们的调用格式分别为
[num,dencom] =mvss2tf(A,B,C,D)
及
[A,B,C,D] =mvtf2ss(num,dencom)
4.传递函数形式到零极点形式的转换
MATLAB函数tf2zp()的调用格式为
[Z,P,K] =tf2zp(num,den)
【例2-9】 若已知系统的传递函数为
求其零极点和增益,并写出系统的零极点形式。
解 在MATLAB命令窗口中,利用下列MATLAB命令
>>num=[6 12 6 10];den=[1 2 3 1 1];[Z,P,K] =tf2zp(num,den)
结果显示:
变换后所得的零极点模型为
5.零极点形式到状态空间表达式的转换
MATLAB函数zp2ss()的调用格式为
[A,B,C,D] =zp2ss(Z,P,K)
6.零极点形式到传递函数形式的转换
MATLAB函数zp2tf()的调用格式为
[num,den] =zp2tf(Z,P,K)
【例2-10】 设系统的零极点增益模型为
求系统的状态空间模型及传递函数模型。
解 在MATLAB命令窗口中,利用下列MATLAB命令
>>K=6;Z=[ -3];P=[ -1;-2;-5]; >>[A,B,C,D] =zp2ss(Z,P,K),[num,den] =zp2tf(Z,P,K)
结果显示:
因此,系统的状态空间表达式为
传递函数模型为
7.传递函数形式与部分分式间的相互转换
MATLAB的转换函数residue()调用格式为
[R,P,H] =residue(num,den)
或
[num,den] =residue(R,P,H)
其中,列向量P为传递函数的极点,对应各极点的留数在列向量R中;行向量H为原传递函数中剩余部分的系数;num,den分别为传递函数的分子分母系数。
【例2-11】 对例2-9中给出的传递函数模型,通过下面语句将可以直接获得系统的部分分式模型。
解 在MATLAB命令窗口中,利用下列MATLAB命令
>>num=[6 12 6 10];den=[1 2 3 1 1];[R,P,H] =residue(num,den)
结果显示:
则可得系统的部分分式为
8.相似变换
由于状态变量选择的非唯一性,因此系统传递函数的实现不是唯一的,即系统的状态空间表达式也不是唯一的。在实际应用中,常常根据所研究问题的需要,利用相似变换将状态空间表达式化成相应的几种标准形式。
假设线性定常系统的状态空间表达式为
若引入一个非奇异线性变换
则可以将上述系统变换成
式中。
MATLAB控制系统工具箱给出了一个直接完成线性变换的函数ss2ss(),该函数的调用格式为
[A1,B1,C1,D1] =ss2ss(A,B,C,D,P)
通过上式不仅可求得系统的各种标准型实现,也可利用系统的结构分解来求取系统的最小实现。
9.最小实现
最小实现是一种模型的实现,它消除了模型中过多的或不必要的状态。对传递函数或零极点增益模型,这等价于将彼此相等的零极点对进行对消。利用MATLAB控制系统工具箱提供的minreal()函数可直接求出一个给定系统状态空间表达式的最小实现。该函数的调用格式为
[Am,Bm,Cm,Dm] =minreal(A,B,C,D,tol)
其中,A,B,C,D为原状态空间表达式的各系数矩阵;tol为用户任意指定的误差限,如果省略此参数,则会自动地取为eps;Am,Bm,Cm,Dm为最小实现的状态空间表达式的各系数矩阵。
如果原系统模型由传递函数形式num,den或零极点形式z,p给出,则可以直接调用minreal()函数来获得零极点对消最小实现的传递函数形式NUMm,DENm或零极点形式Zm,Pm。调用格式为
[NUMm,DENm] =minreal(num,den,tol) [Zm,Pm] =minreal(z,p,tol)
【例2-12】 已知系统的状态空间表达式为
求出系统最小实现的状态空间表达式的各系数矩阵。
解 在MATLAB命令窗口中,利用下列MATLAB命令
>>A=[-5800;-4700;0004;00-26];B=[4;-2;2;1];C=[2-2-22];D=0; >>[Am,Bm,Cm,Dm] =minreal(A,B,C,D)
结果显示:
【例2-13】 对于例2-12中给出的状态空间表达式,可以容易地得出系统的传递函数,然后由传递函数直接进行最小实现运算。
解 在MATLAB命令窗口中,利用下列MATLAB命令
>>A=[-5,8,0,0;-4,7,0,0;0,0,0,4;0,0,-2,6];B=[4;-2;2;1];C=[2,-2,-2,2];D=0; >>[num,den] =ss2tf(A,B,C,D,1),[NUMm,DENm] =minreal(num,den)
结果显示:
可得出零极点对消后的传递函数