逆Z变换:三种实用方法详解

逆Z变换,说白了就是把Z域的信号变回时域。这步做不好,前面算半天也是白搭。我个人习惯把这三种方法——部分分式展开、幂级数展开、留数法——当成工具箱里的三把扳手,各有各的适用场景。

方法一:部分分式展开法

这是我最常用的方法,没有之一。为什么?因为它直观,而且跟拉普拉斯变换里的部分分式展开几乎一模一样。你想想看,我们手头有个有理分式X(z),把它拆成几个简单分式之和,每个简单分式对应一个已知的逆Z变换对,查表就完事了。

核心思路:将X(z)展开为低阶分式之和,利用已知变换对求逆变换。

具体步骤我总结为三步:

  1. 预处理:如果分子阶数≥分母阶数,先做多项式除法,得到真分式部分
  2. 因式分解:将分母分解为(z - p₁)(z - p₂)...的形式
  3. 展开:根据极点类型(单极点、重极点)写出展开式,待定系数

我在项目中遇到过这样一个例子:

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变换三种方法 部分分式展开法 幂级数展开法 留数法 预处理:多项式除法 因式分解分母 待定系数展开 查表得逆变换 判断收敛域方向 分子分母同除z^k 长除法求系数 系数即为x[n] 构造X(z)z^(n-1) 找出所有极点 计算各极点留数 留数之和=x[n] 选择建议:有理分式→部分分式 | 求前几项→幂级数 | 理论分析→留数法

三种方法各有千秋。我个人习惯是:遇到有理分式先用部分分式法,如果只需要前几个样本值就用长除法,做理论推导时用留数法。你想想看,掌握了这三种方法,基本上所有逆Z变换问题都能搞定。

核心要点回顾:

  • 部分分式法:拆解→查表,最实用
  • 幂级数法:长除法,适合求有限项
  • 留数法:围线积分,通用但手算易错
  • 三种方法结果一致,可互相验证

专注资料整理