4、Z反变换:部分分式展开法、幂级数展开法(长除法)、留数法、初值与终值定理
各位同学,咱们今天聊Z反变换。
说白了,Z变换是把离散信号从时域搬到复频域,方便我们分析系统。但最终,我们得把结果变回时域序列,才能知道系统实际怎么动作。这个“变回去”的过程,就是Z反变换。
我个人习惯把Z反变换比作“解方程”。你从时域出发,经过Z变换得到代数方程,一顿操作解出X(z),最后再用反变换找回x(n)。今天咱们就讲四种最常用的“解法”。
核心思路:Z反变换就是把有理分式形式的X(z)还原成时域序列x(n)。四种方法各有适用场景,没有万能药。
4.1 部分分式展开法
这是我最常用的方法,没有之一。为什么?因为它跟拉普拉斯反变换的套路一模一样,你只要会查表就行。
基本步骤很简单:
- 把X(z)写成真分式形式(分子次数低于分母)
- 因式分解分母
- 展开成部分分式之和
- 查Z变换表,逐项反变换
举个例子:
已知 X(z) = z / (z² - 3z + 2),求 x(n)
解:
1. 分母因式分解:z² - 3z + 2 = (z-1)(z-2)
2. 展开:X(z)/z = 1/[(z-1)(z-2)] = A/(z-1) + B/(z-2)
解得 A = -1,B = 1
3. 所以 X(z) = -z/(z-1) + z/(z-2)
4. 查表:z/(z-1) → 1ⁿ = 1,z/(z-2) → 2ⁿ
5. 结果:x(n) = -1 + 2ⁿ,n ≥ 0
我的小技巧:做部分分式时,我习惯先处理X(z)/z,而不是直接处理X(z)。这样展开后每一项都是z/(z-p)的形式,查表特别方便。这个习惯是我当年做数字滤波器设计时养成的,省了不少事。
这里要注意一个坑:如果X(z)的分子分母次数相同,你得先做多项式除法,把整式部分提出来。我曾经在项目里因为忘了这步,算出来的结果差了整整一个脉冲项,排查了半天才发现。
4.2 幂级数展开法(长除法)
这个方法说白了就是做除法。你把X(z)写成分子分母多项式,然后直接做长除法,得到z的幂级数,系数就是x(n)。
为什么会这样?因为Z变换本身就是幂级数:X(z) = Σ x(n)z⁻ⁿ。所以长除出来的系数,就是序列值。
步骤:
- 把X(z)写成z⁻¹的多项式形式(降幂排列)
- 做长除法
- 商就是x(0) + x(1)z⁻¹ + x(2)z⁻² + ...
看个例子:
X(z) = z / (z - 0.5)
写成z⁻¹形式:X(z) = 1 / (1 - 0.5z⁻¹)
做长除法:
1 + 0.5z⁻¹ + 0.25z⁻² + 0.125z⁻³ + ...
──────────────────────
1-0.5z⁻¹ ) 1
1 - 0.5z⁻¹
──────────
0.5z⁻¹
0.5z⁻¹ - 0.25z⁻²
────────────────
0.25z⁻²
0.25z⁻² - 0.125z⁻³
──────────────────
0.125z⁻³
...
所以 x(0)=1, x(1)=0.5, x(2)=0.25, x(3)=0.125, ...
即 x(n) = (0.5)ⁿ,n ≥ 0
注意:长除法只能得到前几项的值,得不到闭式表达式。如果你需要x(n)的通项公式,还是得用部分分式法。长除法适合用来验证前几个值,或者当系统阶数很高、你只关心前几个采样点时用。
嗯,这里要提醒一下:做长除法时,分子分母的排列顺序一定要统一。我习惯都用z⁻¹的降幂排列,这样不容易出错。
4.3 留数法
留数法,说白了就是复变函数里的留数定理在Z反变换中的应用。公式长这样:
x(n) = Σ [Residue of X(z)z^(n-1) at pole z = p]
看着吓人,其实操作起来有套路:
- 找出X(z)z^(n-1)的所有极点
- 对每个极点求留数
- 所有留数加起来就是x(n)
对于单极点,留数公式很简单:
Res[X(z)z^(n-1), z=p] = (z-p) * X(z) * z^(n-1) |_{z=p}
举个例子:
X(z) = z / (z-0.5)(z-0.8)
X(z)z^(n-1) = zⁿ / (z-0.5)(z-0.8)
极点:z=0.5,z=0.8
Res at z=0.5: (z-0.5) * zⁿ/(z-0.5)(z-0.8) |_{z=0.5}
= 0.5ⁿ / (0.5-0.8) = -0.5ⁿ/0.3
Res at z=0.8: (z-0.8) * zⁿ/(z-0.5)(z-0.8) |_{z=0.8}
= 0.8ⁿ / (0.8-0.5) = 0.8ⁿ/0.3
所以 x(n) = (0.8ⁿ - 0.5ⁿ)/0.3,n ≥ 0
我的经验:留数法其实跟部分分式法本质是一样的,只是计算路径不同。我个人只有在极点比较多、或者有重极点的时候才用留数法。平时做单极点系统,部分分式法更快。你想想看,留数法还要算导数,多麻烦。
4.4 初值与终值定理
这两个定理特别实用,因为它们不需要做完整的反变换,就能直接得到序列的初值和终值。
初值定理:
x(0) = lim_{z→∞} X(z)
说白了,就是看X(z)在z趋向无穷时的极限。如果X(z)是真分式,那x(0)就是分子最高次项系数除以分母最高次项系数。
终值定理:
lim_{n→∞} x(n) = lim_{z→1} (z-1)X(z)
注意:终值定理只在系统稳定的前提下才成立。如果系统有极点在单位圆上或圆外,终值定理会给出错误结果。
举个例子:
X(z) = z / (z-0.5)(z-0.8)
初值:x(0) = lim_{z→∞} z/(z-0.5)(z-0.8) = 0
因为分子一次,分母二次,z→∞时趋于0
终值:lim_{n→∞} x(n) = lim_{z→1} (z-1) * z/(z-0.5)(z-0.8)
代入z=1:= 0 * 1/(0.5*0.2) = 0
系统稳定,终值为0,合理
避坑指南:我曾经在一个电机控制项目里,用终值定理算稳态误差,结果怎么算都不对。后来发现系统有个极点在z=1(积分环节),终值定理的条件不满足。所以用终值定理前,一定先检查系统稳定性。
4.5 四种方法对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 部分分式展开法 | 能得到闭式表达式,查表方便 | 需要因式分解,重极点处理麻烦 | 低阶系统,单极点为主 |
| 幂级数展开法(长除法) | 操作简单,适合编程实现 | 得不到通项公式,只能算前几项 | 验证前几个值,或只需有限项 |
| 留数法 | 理论严谨,适合重极点 | 计算复杂,容易出错 | 高阶系统,重极点情况 |
| 初值与终值定理 | 快速得到边界值,无需完整反变换 | 信息有限,只给两个点 | 系统分析中的快速校验 |
我的建议:实际工程中,我90%的情况用部分分式法。长除法用来快速验证前几个值。留数法嘛,说实话,除了考试和写论文,我很少手算。现在MATLAB一个iztrans命令就搞定了。但理解原理很重要,不然你连结果对错都判断不了。
好了,Z反变换的四种方法就讲到这里。记住,方法没有好坏之分,只有合不合适。你平时做项目,多练几次就知道哪种情况该用哪种方法了。
公众号:蓝海资料掘金营,微信deep3321