逆Z变换:三种实用方法详解
逆Z变换,说白了就是把Z域的信号变回时域。这步做不好,前面算半天也是白搭。我个人习惯把这三种方法——部分分式展开、幂级数展开、留数法——当成工具箱里的三把扳手,各有各的适用场景。
方法一:部分分式展开法
这是我最常用的方法,没有之一。为什么?因为它直观,而且跟拉普拉斯变换里的部分分式展开几乎一模一样。你想想看,我们手头有个有理分式X(z),把它拆成几个简单分式之和,每个简单分式对应一个已知的逆Z变换对,查表就完事了。
核心思路:将X(z)展开为低阶分式之和,利用已知变换对求逆变换。
具体步骤我总结为三步:
- 预处理:如果分子阶数≥分母阶数,先做多项式除法,得到真分式部分
- 因式分解:将分母分解为(z - p₁)(z - p₂)...的形式
- 展开:根据极点类型(单极点、重极点)写出展开式,待定系数
我在项目中遇到过这样一个例子:
X(z) = (z² + 2z + 1) / (z² - 0.5z + 0.06),|z| > 0.3
先做多项式除法:
X(z) = 1 + (2.5z + 0.94) / (z² - 0.5z + 0.06)
分母因式分解:(z - 0.2)(z - 0.3)
设展开式:
(2.5z + 0.94) / [(z - 0.2)(z - 0.3)] = A/(z - 0.2) + B/(z - 0.3)
解出A和B:
A = (2.5×0.2 + 0.94)/(0.2 - 0.3) = 1.44/(-0.1) = -14.4
B = (2.5×0.3 + 0.94)/(0.3 - 0.2) = 1.69/0.1 = 16.9
所以:
X(z) = 1 - 14.4/(z - 0.2) + 16.9/(z - 0.3)
查表得:
x[n] = δ[n] - 14.4×(0.2)^(n-1)u[n-1] + 16.9×(0.3)^(n-1)u[n-1]
我的小技巧:如果极点都是单极点,用留数法求系数更快——A = (z - p₁)X(z)/z 在z=p₁处的值。省去解方程组的麻烦。
方法二:幂级数展开法(长除法)
这个方法说白了就是做多项式除法。把X(z)写成z⁻¹的幂级数形式,系数就是x[n]。适合求前几个样本值,或者当X(z)形式复杂、极点不好求的时候。
嗯,这里要注意:收敛域决定你是做z⁻¹的升幂排列还是降幂排列。
- 右边序列(|z| > R):做z⁻¹的升幂排列(分子分母按z的降幂排列)
- 左边序列(|z| < R):做z的升幂排列(分子分母按z的升幂排列)
举个例子,还是上面那个X(z):
X(z) = (z² + 2z + 1) / (z² - 0.5z + 0.06),|z| > 0.3
分子分母同除以z²:
X(z) = (1 + 2z⁻¹ + z⁻²) / (1 - 0.5z⁻¹ + 0.06z⁻²)
做长除法:
1 + 2.5z⁻¹ + 1.19z⁻² + ...
──────────────────────────────
1 - 0.5z⁻¹ + 0.06z⁻² ) 1 + 2z⁻¹ + z⁻²
1 - 0.5z⁻¹ + 0.06z⁻²
────────────────────
2.5z⁻¹ + 0.94z⁻²
2.5z⁻¹ - 1.25z⁻² + 0.15z⁻³
──────────────────────────
1.19z⁻² - 0.15z⁻³
...
所以x[0]=1, x[1]=2.5, x[2]=1.19... 跟部分分式法算出来的前几个值一致。
我曾经踩过的坑:长除法只能得到有限个样本值,无法得到闭式表达式。如果你需要x[n]的通项公式,还是得用部分分式法或留数法。
方法三:留数法
留数法,说白了就是围线积分。公式长这样:
x[n] = (1/2πj) ∮ X(z)z^(n-1) dz = Σ Res[X(z)z^(n-1) 在极点处]
看着吓人,其实用起来很简单——就是求X(z)z^(n-1)在所有极点处的留数之和。
对于单极点z=p:
Res = (z - p)X(z)z^(n-1) 在z=p处的值
对于m阶重极点:
Res = 1/(m-1)! × d^(m-1)/dz^(m-1) [(z-p)^m X(z)z^(n-1)] 在z=p处的值
还是那个例子:
X(z) = (z² + 2z + 1) / (z² - 0.5z + 0.06),|z| > 0.3
X(z)z^(n-1) = (z² + 2z + 1)z^(n-1) / [(z - 0.2)(z - 0.3)]
在z=0.2处的留数:
Res₁ = (z - 0.2)X(z)z^(n-1)|_{z=0.2} = (0.2² + 2×0.2 + 1)×0.2^(n-1)/(0.2 - 0.3)
= 1.44×0.2^(n-1)/(-0.1) = -14.4×0.2^(n-1)
在z=0.3处的留数:
Res₂ = (z - 0.3)X(z)z^(n-1)|_{z=0.3} = (0.3² + 2×0.3 + 1)×0.3^(n-1)/(0.3 - 0.2)
= 1.69×0.3^(n-1)/0.1 = 16.9×0.3^(n-1)
注意n=0时,z^(n-1)=z⁻¹,在z=0处还有一个极点,需要单独处理。所以:
x[n] = -14.4×0.2^(n-1)u[n-1] + 16.9×0.3^(n-1)u[n-1] + δ[n]
跟部分分式法结果完全一致。
我的建议:留数法适合理论推导,手算时容易出错。实际工程中,我更喜欢用部分分式法——步骤清晰,不容易漏项。
三种方法对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 部分分式展开 | 有理分式,极点易求 | 能得到闭式解,步骤清晰 | 重极点时计算稍繁 |
| 幂级数展开 | 求前N个样本值 | 简单直接,不用求极点 | 无法得到通项公式 |
| 留数法 | 理论分析,任意形式 | 通用性强,数学严谨 | 手算易错,n=0需单独处理 |
知识体系结构图
三种方法各有千秋。我个人习惯是:遇到有理分式先用部分分式法,如果只需要前几个样本值就用长除法,做理论推导时用留数法。你想想看,掌握了这三种方法,基本上所有逆Z变换问题都能搞定。
核心要点回顾:
- 部分分式法:拆解→查表,最实用
- 幂级数法:长除法,适合求有限项
- 留数法:围线积分,通用但手算易错
- 三种方法结果一致,可互相验证