逆z变换之——部分分式展开法
1. 部分分式展开法概述
部分分式展开法是求解Z逆变换的重要方法之一,特别适用于有理分式形式的Z变换表达式。其核心思想是将一个高阶的有理分式分解成多个低阶分式的和,从而简化逆变换的求解过程。
在数字信号处理中,线性时不变(LTI)系统的系统函数通常可以表示为z的有理分式形式。当我们需要从Z域变换回时域时,部分分式展开提供了一种系统化的解决方案。
基本定义:对于离散时间序列x(n)的Z变换,若X(z)可以表示为两个多项式之比:
$$
X(z)=\frac{B(z)}{A(z)}=\frac{b_0+b_1z^{−1}+⋯+b_Mz^{−M}}{a_0+a_1z^{−1}+⋯+a_Nz^{−N}}
$$
其中M和N分别表示分子和分母多项式的阶数。
2. 部分分式展开的基本原理
2.1 数学基础
部分分式展开建立在极点分解的基础上。任何有理分式都可以分解为部分分式之和,每个部分分式对应分母多项式的一个极点。
极点类型决定了展开形式:
单极点:每个单极点对应一个一次项分式
重极点:k重极点对应k个分式,分母次数从1到k
共轭复极点:对应二次项分式(在实数域内不可约)
2.2 真分式与假分式
部分分式展开前需确保X(z)为真分式(即分子阶数不大于分母阶数):
若M < N(真分式):直接进行部分分式展开
若M ≥ N(假分式):先通过多项式除法分解为多项式与真分式之和,再对真分式部分进行展开
多项式部分对应时域中的冲激序列及其延时,真分式部分对应系统的固有响应模式。
3. 部分分式展开的求解步骤
3.1 标准步骤
部分分式展开的系统化步骤如下:
因式分解分母多项式
将分母A(z)分解为因式乘积形式,确定系统的极点位置和重数。
确定展开形式
根据极点类型确定部分分式展开形式:
单实极点:$\frac{A}{1−p_i^{z−1}}$
r重实极点:$\frac{A_1}{1−p_i^{z−1}}+\frac{A_2}{(1−p_i^{z−1})^2}+…+\frac{A_r}{(1−p_i^{z−1})^r}$
共轭复极点:$\frac{B_0+B_1z^{−1}}{1+a_1z^{−1}+a_2z^{−2}}$(保持二次因式)
求解系数
常用的系数求解方法包括:
留数法:利用极点处的留数计算系数
系数比较法:通分后比较分子多项式系数
代入数值法:代入特定的z值求解方程
3.2 系数求解的留数法
对于单极点情况,留数可通过以下公式计算:
$$
Ai=(1−p_iz^{−1})X(z)|_{z=pi}
$$
对于重极点情况,计算更为复杂,需要使用求导公式。
表:部分分式展开中极点的类型与处理方法
| 极点类型 | 展开形式 | 系数求解方法 |
|---|---|---|
| 单实极点 | $\frac{A}{1−p_i^{ z−1}}$ | 直接代入法:$A_i = (1-p_iz^{-1})X(z)$ |
| 重实极点 | $\frac{A}{1−p_i^{ z−1}}+\frac{A}{(1−p_i^{ z−1})^2}+⋯$ | 求导法:$A_k=\frac{1}{(r−k)!}\frac{d^{r−k}}{dz^{r−k}}[(1−p_iz^{−1})^rX(z)]|_{z=p_i}$ |
| 共轭复极点 | $\frac{B_0+B_1z^{−1}}{1+a_1z^{−1}+a_2z^{−2}}$ | 通常使用系数比较法或分离实部虚部求解 |
4. 应用实例分析
4.1 单极点情况
考虑有理分式:
$$
X(z)=1+z−1−6z−25z−1
$$
分母可因式分解为:
$$
(1−2z−1)(1+3z−1)
$$
部分分式展开为:
$$
X(z)=\frac{A}{1−2z^{−1}}+\frac{B}{1+3z^{−1}}
$$
利用留数法计算系数:
$$
A=(1−2z^{−1})X(z)|_{z=2}=1
$$
$$
B=(1+3z^{−1})X(z)|_{z=−3}=−1
$$
因此:
$$
X(z)=\frac{1}{1−2z^{−1}}−\frac{1}{1+3z^{−1}}
$$
求逆Z变换得:
$$
x(n)=2^nu(n)−(−3)^nu(n)
$$
其中u(n)为单位阶跃函数。
4.2 重极点情况
考虑含有重极点的Z变换:
$$
X(z)=\frac{2z}{(z−2)^2}
$$
展开为:
$$
X(z)=\frac{A}{z−2}+\frac{B}{(z−2)^2}
$$
系数求解:
$$
B=(z−2)^2X(z)|_{z=2}=4
$$
为求A,需计算:
$$
A=\frac{d}{dz}[(z−2)^2X(z)]|_{z=2} = 2
$$
逆Z变换为:
$$
x(n)=2⋅2^nu(n)+n⋅2^nu(n)=(n+2)2^nu(n)
$$
5. 工具实现:Scipy中的residuez函数
Python的Scipy库提供了signal.residuez函数,可自动完成部分分式展开。
函数语法
1 | r, p, k = signal.residuez(b, a) |
其中:
b为分子多项式系数向量a为分母多项式系数向量r为部分分式系数向量p为极点向量k为直接项系数向量(若存在)
表:residuez函数在不同情况下的应用示例
| X(z) | 极点情况 | 展开结果 | 逆Z变换x(n) |
|---|---|---|---|
| $\frac{5z^{−1}}{1+z^{−1}-6z^{−2}}$ | 单极点p1=2, p2=-3 | r=[1, -1], p=[2, -3] | $2^nu(n)−(−3)^nu(n)$ |
| $\frac{-3z^{−1}}{2−5z^{−1}+2z^{−2}}$ | 单极点p1=0.5, p2=2 | r=[1, -1], p=[0.5, 2] | $(0.5)^nu(n)−2^nu(n)$ |
| $\frac{1}{1−3z^{−1}+2z^{−2}}$ | 单极点p1=1, p2=2 | r=[-1, 2], p=[1, 2] | $−1^nu(n)+2⋅2^nu(n)$ |
6. 收敛域的重要性
进行部分分式展开时,必须同时考虑Z变换的收敛域(Region of Convergence, ROC),因为它决定了逆变换得到的序列是左边序列、右边序列还是双边序列。
当收敛域为∣z∣>R时,对应因果序列(右边序列)
当收敛域为∣z∣<R时,对应反因果序列(左边序列)
当收敛域为环状区域R1<∣z∣<R2时,对应双边序列
关键原则:每个极点都对应一个收敛域的边界,最近的极点决定收敛域边界。
7. 与其他方法的比较
部分分式展开法常与另外两种逆Z变换方法比较:
留数法(围线积分法):基于复变函数理论,直接计算围线积分。概念清晰但计算复杂,适合理论分析。
长除法(幂级数展开法):直接对X(z)进行长除,得到幂级数形式,系数即为序列值。简单但难以得到封闭解。
部分分式展开法在计算复杂度和结果实用性间取得了良好平衡,特别适合有理分式形式的Z变换。
8. 总结
部分分式展开法是数字信号处理中连接Z域与时域的重要桥梁。通过将复杂有理分式分解为简单分式的和,大大简化了逆Z变换的计算过程。
掌握该方法需要注意:
熟练判断极点的类型和重数
根据极点情况确定正确的展开形式
结合收敛域确定最终时域序列的因果性
了解计算工具(如Scipy)的使用方法
该方法不仅是求解逆Z变换的有效工具,也为理解系统特性、分析稳定性提供了重要视角。
