Matlab将函数转换为可观察性规范形式

时间:2016-06-14 16:32:01

标签: matlab

我真的需要你的帮助,让我说我有一个原始的TF2(见下面的代码),我想将它转换为状态空间。从那个状态空间,我想再次获得传递函数。正如您所看到的,这可能是一个循环,但是我无法使用可观察性规范形式获得相同的传递函数。有什么想法吗?

syms m1 m2 b ks kd s;
TF2=-1*((s^2*m1+ks+s*b)/(s^2*m2+s*kd)) %Original TF
A=[0 0;1 -kd/m2]
B=[-ks/m2; -b/m2+((kd*m1)/(m2*m2))]
C=[0 1]
D=[-m1/m2]
phi=s*eye-A
TF=C*inv(phi)*B+D %TF from observability canonical form 

这是可观察性规范形式的公式:

enter image description here

,其中 enter image description here

这就是我得到的答案:

TF =

(ks*(s - 1))/(s*(kd + m2)) - (m2*(b/m2 - (kd*m1)/m2^2))/(kd + m2) - m1/m2


TF2 =

-(m1*s^2 + b*s + ks)/(m2*s^2 + kd*s)

提前致谢!

1 个答案:

答案 0 :(得分:1)

这是因为s*eye实际上是s*1,每当您使用矩阵和标量执行加法/减法时,标量会自动乘以 ones 矩阵并且没有 eye 矩阵。

因此,您生成的phi实际上是

[s | s]
[-----] - A
[s | s]  

而不是

[s | 0]
[-----] - A
[0 | s]  

应该是后者。您可以使用eye(2)修复此问题。

对于这样的符号计算,计算phi的行列式总是很方便的,无论如何,这将是分母,看你是否在正确的轨道上。