0

我有 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

感谢您的帮助 =)

4

1 回答 1

0

转换为 SS 模型始终是一个丑陋的过程,并且根据方法,您可以获得不同的表示。所以不要执着于获得相等的 ABC 和 D 值。

另外,从TF转换而来的SS的状态,除了存储前一个状态的信息外,往往没有任何意义。

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

impulse (sys, sysSimulink)

从文档中:

推荐的工作代表

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

使用高阶传递函数(tf 或 zpk 模型)的计算精度有时很差,特别是对于 MIMO 或高阶系统。转换为传递函数表示会导致精度损失。

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

于 2013-06-14T14:13:47.817 回答