使用MATLAB将2输入2输出传递函数转换为状态空间模型

时间:2013-06-14 13:39:02

标签: matlab simulink state-space

我有4个传输功能,分别是G11,G12,G21和G22。如何将此4传递函数转换为状态空间模型?以下是我的代码,但状态空间模型的结果与使用SIMULINK的线性化不同。

g_num11=[4];
g_den11=[1 4];
g11=tf({g_num11},{g_den11});

g_num12=[5.338e-76];
g_den12=[1 8.674 18.7];
g12=tf({g_num12},{g_den12});

g_num21=[-1.5268e-79];
g_den21=[1 15.02 72.02 111.7];
g21=tf({g_num21},{g_den21});

g_num22=[2.539];
g_den22=[1 11.02 29.67];
g22=tf({g_num22},{g_den22});

g_plant=tf({g_num11 g_num12; g_num21 g_num22}, {g_den11 g_den12; g_den21 g_den22})
sys=ss(g_plant,'min')
%Convert transfer function model  into state space model
[A,B,C,D]=ssdata(sys)

The results are shown below:
A =

   -4.0000   -0.0000   -0.0000
   -0.0000  -11.0200   -7.4175
    0.0000    4.0000   -0.0000


B =

   -2.0000    0.0000
    0.0000    1.0000
    0.0000   -0.0000


C =

   -2.0000    0.0000    0.0000
    0.0000   -0.0000    0.6348


D =

     0     0
     0     0

以下结果使用SIMULINK窗口中的线性分析进行线性化。

A =

   -4.0000   -0.0000   -0.0000
   -0.0000   -4.67400  -0.6744
    0.0000    0.0000   -6.3480


B =

   -4.0000    0.0000
    0.0000    0.0000
    0.0000    3.7650


C =

    1.0000    0.0000    0.0000
    0.0000    1.0000    0.0000


D =

     0     0
     0     0

感谢您的帮助=)

1 个答案:

答案 0 :(得分:0)

转换为SS模型总是一个丑陋的过程,并且根据方法,您可以获得不同的表示。所以不要过分注意得到A B C和D的相等值。

此外,从TF转换的SS的状态通常与先前状态的存储信息无关。

要验证您是否有类似的SS系统,请输入一个脉冲响应:

impulse (sys, sysSimulink)

来自文档:

  

推荐的工作代表

     

您可以使用任何模型类型表示数字系统组件。   但是,数字LTI模型类型不太适合   数值计算。一般来说,建议您工作   使用状态空间(ss)或频率响应数据(frd)模型   原因如下:

     

使用高阶传递函数的计算精度(tf   或zpk模型)有时很差,特别是对于MIMO或高阶   系统。转移函数表示的转换可能会产生   失去准确性。

     

使用ss将tf或zpk模型转换为状态空间时,   软件自动执行平衡和缩放操作。   平衡和缩放提高了计算的数字精度   涉及模型。有关平衡和缩放的更多信息   状态空间模型,请参见缩放状态空间模型。