我想将转换函数转换为零极点增益,然后再转换回转换函数形式。
据我了解,zp2tf
的输出应返回原始传递函数。但是我似乎无法使它正常工作。
我具有以下形式的五阶传递函数:
我继续找到该传递函数的零点和极点,以查看可以删除哪个极点以减少阶数。由于此模型同时包含电气部分和机械部分,因此与机械时间常数相比,电气部分的时间常数很小,因此,我们可以用增益代替电气系统并获得等效的四阶系统。
为此,我使用了MathWorks上的这段代码,上面的5阶TF:
b = [0.0001 10];
a = [0.005 5.00010060 0.661600001 61.01102010 2.1101 10];
fvtool(b,a,'polezero')
[b,a] = eqtflength(b,a);
[z,p,k] = tf2zp(b,a)
输出如下,这正是我所期望的:
z = -100000
k = 0.02
和等效的PZ地图:
以上结果显示了与电路相关的极点,该极点位于左侧。可以将其删除,从而将传递函数的阶数从5阶降低到4阶。
为了减少顺序,我尝试删除
我的问题是我无法使用zp2tf
(official docs here)从零极点形式转换为tf形式。
我关注了文档并输入了p,z和k值:
z = [-100000]';
p = roots([0.005 5.00010060 0.661600001 61.01102010 2.1101 10]);
k = 0.0200;
[b,a] = zp2tf(z,p,k)
我希望看到我的原始分子和分母,但是值完全不同:
为什么我没有得到最初在传递函数中得到的零点?
答案 0 :(得分:1)
您实际上正在获得相同的传递函数。只是分子和分母乘以200的倍数。将200作为分子和分母的公倍数,您将看到与开始时相同的传递函数。
>> [bnew,anew] = zp2tf(z,p,k)
bnew =
1.0e+03 *
0.0000 2.0000 0 0 0 0
anew =
1.0e+04 *
0.0001 0.1000 0.0132 1.2202 0.0422 0.2000
>> bnew/200
ans =
0.0001 10.0000 0 0 0 0
>> anew/200
ans =
0.0050 5.0001 0.6616 61.0110 2.1101 10.0000