Matlab: tf2zp与tf2zpk的差异

目录

1. 问题

2. tf2zp和tf2zpk的差异


 

1. 问题

        tf2zp和tf2zpk都是用于由传递函数(Transfer Function)计算系统的零极点,但是它们之间有细微的差别。运行以下脚本:

b = [0.5, 1];
a = [1, 0.5, 1];
[z1,p1,k1] = tf2zp(b,a)
[z2,p2,k2] = tf2zpk(b,a)

得到结果如下:

z1 =    -2


p1 =

  -0.2500 + 0.9682i
  -0.2500 - 0.9682i


k1 =     0.5000


z2 =      0     -2


p2 =

  -0.2500 + 0.9682i
  -0.2500 - 0.9682i


k2 =     0.5000

 

针对同样的输入,tf2zp和tf2zpk计算出来的极点和增益是相同,但是零点略有差异,由tf2zp计算出来的结果中只有一个零点,而 tf2zpk计算出来的结果中有两个零点(多出来一个位置在0处的零点)。这是为什么呢?

 

2. tf2zp和tf2zpk的差异

        关于这一点Mathworks文档有如下说明:

Use tf2zpk when working with transfer functions expressed in inverse powers (gif.latex?1%20+%20z%5E%7B-1%7D%20+%20z%5E%7B-2%7D). A similar function, tf2zp, is more useful for working with positive powers (gif.latex?s%5E2%20+%20s%20+%201), such as in continuous-time transfer functions.

        简而言之,就是tf2zpk是用于离散系统传递函数,而tf2zp是用于连续系统传递函数。

         连续系统传递函数是基于拉普拉斯变换而得,其中s的幂次通常是以非负整数的形式出现(其根源在于gif.latex?L%28%5Cfrac%7Bdx%7D%7Bdt%7D%29%20%3D%20s%5Ccdot%20L%28x%29)。而离散系统传递函数是基于z变换而得,其中z的幂次通常是以非正整数的形式出现(其根源则在于gif.latex?Z%28x%28n-1%29%29%20%3D%20z%5E%7B-1%7D%20%5Ccdot%20Z%28x%29)。

        以非负的幂表示和以非正的幂表示其实并没有本质的差别,相互之间也是可以相互转化的,但是在传递函数(在用非正数的幂表示时)的分子的阶数低于分母的阶数时,由非正的幂的形式转换为非负的幂的形式的表示时,却会导致多出来的零点。

        以上例来说,b = [0.5, 1]; a = [1, 0.5, 1],当然它用于表示非负的幂的形式的连续系统的传递函数时,表示的是:

        gif.latex?H%28s%29%20%3D%20%5Cfrac%7B0.5%20s%20+%201%7D%7Bs%5E2%20+%200.5%20s%20+%201%7D

        很显然,它只有gif.latex?s%3D-2一个零点。

        但是,如果它是表示非正的幂的形式的离散系统的传递函数时,表示的则是:

        gif.latex?%5Cbegin%7Balign%7D%20H%28z%29%20%26%3D%20%5Cfrac%7B0.5%20+%20z%5E%7B-1%7D%7D%7B1%20+%200.5%20z%5E%7B-1%7D%20+%20z%5E%7B-2%7D%7D%20%5C%5C%20%26%3D%20%5Cfrac%7B0.5%20z%5E2%20+%20z%7D%7Bz%5E2%20+%200.5%20z%20+%201%7D%20%5Cend%7Balign%7D

        它的确有两个零点:0和-2!

 

        所以,在做从传递函数求零点的计算中,不要忘记所处理的传递函数的表达形式(b和a)是代表离散系统的,还是代表连续系统的传递函数,并据此选择是使用tf2zp还是zp2tf。

 

        有意思的是,在 传递函数、零极点模型以及状态空间模型的相互转换的函数族中,只有从传递函数到零极点区分了连续版和离散版。其它的如zp2tf, tf2ss, ss2tf, ss2zp和zp2ss则都并没有区分连续版和离散版,这是为什么呢?我也还没有想明白。。。^-^一种可能的解释是只有从传递函数求零极点时才会出现这种模糊性。。。待确认

        不妨做一个实验,以下代码针对上面代码段生成的两组zpk结果分别调用zp2tf变回去,

[b1,a1] = zp2tf(z1,p1,k1)
[b2,a2] = zp2tf(z2,p2,k2)

b1 =         0    0.5000    1.0000


a1 =    1.0000    0.5000    1.0000


b2 =    0.5000    1.0000         0


a2 =    1.0000    0.5000    1.0000        

        很明显,所得到的传递函数的分子有差异。我们可以理解为,当从零极点变换会传递函数表现形式时,总是当作非负幂形式的传递函数来看的。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨牛慢耕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值