第 9 章:Z 变换 / Z-Transform
9.1 为什么需要 Z 变换?
在连续时间世界中,拉普拉斯变换(Laplace Transform)将微分方程转化为代数方程,极大地简化了系统分析。然而,当我们面对离散时间系统(Discrete-Time Systems)——例如数字滤波器、采样数据控制系统——微分方程被**差分方程(Difference Equations)**取代,拉普拉斯变换的工具箱不再直接适用。
核心问题: 如何为离散时间信号建立一套与拉普拉斯变换等价的频域分析工具?
答案就是 Z 变换(Z-Transform)。它将时域的差分方程映射为 z 域的代数方程,使得系统分析、设计和实现都变得更加清晰。
从拉普拉斯到 Z 变换的桥梁
考虑连续信号 $x(t)$ 以采样周期 $T$ 进行理想采样,得到离散序列 $x[n] = x(nT)$。对采样信号取拉普拉斯变换:
$$x_s(t) = \sum_{n=-\infty}^{\infty} x[n],\delta(t - nT)$$
$$X_s(s) = \sum_{n=-\infty}^{\infty} x[n],e^{-snT}$$
令 $z = e^{sT}$,则 $e^{-snT} = z^{-n}$,于是:
$$\boxed{X(z) = \sum_{n=-\infty}^{\infty} x[n],z^{-n}}$$
这就是**双边 Z 变换(Bilateral Z-Transform)**的定义。变量 $z$ 是一个复变量,$z = e^{sT}$ 建立了 s 平面到 z 平面的映射关系。
数学背景: Z 变换本质上是复平面上的 Laurent 级数(洛朗级数)。其收敛性由复变函数中的幂级数收敛理论保证。可以用
sympy的 Laurent 级数功能进行符号验证。
9.2 收敛域(Region of Convergence, ROC)
Z 变换的级数并非对所有 $z$ 都收敛。使级数收敛的 $z$ 值集合称为收敛域(ROC)。ROC 是 Z 变换定义中不可分割的一部分——同一个 $X(z)$ 表达式,不同的 ROC 对应不同的时域序列。
ROC 的三种典型情形
| 序列类型 | 时域特征 | ROC 形状 |
|---|---|---|
| 因果序列(右侧序列) | $x[n] = 0,; n < 0$ | $ |
| 反因果序列(左侧序列) | $x[n] = 0,; n > 0$ | $ |
| 双边序列 | $n \in (-\infty, +\infty)$ 均非零 | $R_1 < |
示例: $X(z) = \frac{z}{z - a}$
- ROC 为 $|z| > |a|$ 时,对应因果序列 $x[n] = a^n u[n]$
- ROC 为 $|z| < |a|$ 时,对应反因果序列 $x[n] = -a^n u[-n-1]$
关键原则: Z 变换必须连同 ROC 一起给出,否则逆变换不唯一。
flowchart TD
A[已知 X_z 表达式] --> B{ROC 类型?}
B -->|圆外 R1 小于 z| C[因果序列
x_n = 0, n 小于 0]
B -->|圆内 z 小于 R2| D[反因果序列
x_n = 0, n 大于 0]
B -->|环状 R1 小于 z 小于 R2| E[双边序列]
9.3 常用 Z 变换对
掌握以下基本变换对,是灵活运用 Z 变换的基础:
| 时域 $x[n]$ | z 域 $X(z)$ | ROC |
|---|---|---|
| $\delta[n]$ | $1$ | 全部 $z$ |
| $\delta[n - n_0]$ | $z^{-n_0}$ | $z \neq 0$($n_0 > 0$) |
| $u[n]$ | $\dfrac{z}{z - 1}$ | $ |
| $a^n u[n]$ | $\dfrac{z}{z - a}$ | $ |
| $-a^n u[-n-1]$ | $\dfrac{z}{z - a}$ | $ |
| $n,a^n u[n]$ | $\dfrac{az}{(z - a)^2}$ | $ |
| $a^n \cos(\omega_0 n),u[n]$ | $\dfrac{z(z - a\cos\omega_0)}{z^2 - 2a\cos\omega_0,z + a^2}$ | $ |
| $a^n \sin(\omega_0 n),u[n]$ | $\dfrac{a\sin\omega_0,z}{z^2 - 2a\cos\omega_0,z + a^2}$ | $ |
推导提示: $a^n \cos(\omega_0 n),u[n]$ 可利用欧拉公式分解为 $\frac{1}{2}(a^n e^{j\omega_0 n} + a^n e^{-j\omega_0 n}),u[n]$,再对每一项应用 $a^n u[n]$ 的变换对(令 $a \to ae^{\pm j\omega_0}$)即可。使用
sympy可符号验证。
9.4 Z 变换的基本性质
9.4.1 线性(Linearity)
$$a,x_1[n] + b,x_2[n] \xleftrightarrow{\mathcal{Z}} a,X_1(z) + b,X_2(z)$$
ROC 至少为两者 ROC 的交集。
9.4.2 时移性质(Time Shifting)
$$x[n - n_0] \xleftrightarrow{\mathcal{Z}} z^{-n_0},X(z)$$
这是差分方程转化为代数方程的关键。每一项延迟对应乘以 $z^{-1}$(即一个延迟单元)。
9.4.3 z 域缩放(Scaling in z-Domain)
$$a^n,x[n] \xleftrightarrow{\mathcal{Z}} X!\left(\frac{z}{a}\right), \quad \text{ROC: } |a|\cdot R_x$$
9.4.4 时间反转(Time Reversal)
$$x[-n] \xleftrightarrow{\mathcal{Z}} X!\left(\frac{1}{z}\right), \quad \text{ROC: } \frac{1}{R_x}$$
9.4.5 卷积定理(Convolution Theorem)
$$\boxed{x_1[n] * x_2[n] \xleftrightarrow{\mathcal{Z}} X_1(z) \cdot X_2(z)}$$
这是 Z 变换最重要的性质之一。 时域卷积等于 z 域乘积——这意味着 LTI 系统的输出可以通过系统函数与输入 Z 变换的乘积来计算。ROC 至少为两者 ROC 的交集。
9.4.6 初值定理(Initial Value Theorem)
对于因果序列:
$$x[0] = \lim_{z \to \infty} X(z)$$
9.4.7 终值定理(Final Value Theorem)
对于因果序列,若 $X(z)$ 在单位圆上及圆外仅有一个极点 $z = 1$(其余极点在单位圆内):
$$\lim_{n \to \infty} x[n] = \lim_{z \to 1} (z - 1),X(z)$$
工程直觉: 终值定理在数字控制系统中用于判断稳态误差,类似于连续系统中的拉普拉斯终值定理。
9.5 逆 Z 变换(Inverse Z-Transform)
已知 $X(z)$ 和 ROC,求 $x[n]$ 的过程称为逆 Z 变换:
$$x[n] = \mathcal{Z}^{-1}{X(z)} = \frac{1}{2\pi j} \oint_C X(z),z^{n-1},dz$$
其中 $C$ 是 ROC 内一条逆时针闭合围线。直接计算复积分通常使用留数定理(Residue Theorem),但工程中更常用以下两种方法:
9.5.1 幂级数展开法(长除法)
将 $X(z)$ 展开为 $z$ 的幂级数,系数即为 $x[n]$。
伪代码:
| |
示例: $X(z) = \frac{1}{1 - 0.5z^{-1}},; |z| > 0.5$
长除法:$1 \div (1 - 0.5z^{-1}) = 1 + 0.5z^{-1} + 0.25z^{-2} + \cdots$
故 $x[n] = (0.5)^n u[n]$,与变换对一致。
9.5.2 部分分式展开法
当 $X(z)$ 为有理函数时,先展开为部分分式,再查表求各项逆变换。
步骤:
- 令 $X(z)/z$ 进行部分分式展开(先除以 $z$ 可简化计算)
- 查表得到每项的逆变换
- 根据 ROC 确定因果性,组合结果
伪代码:
| |
数学工具验证: Python 中
scipy.signal.residuez可直接计算部分分式展开的留数和极点。numpy.polydiv可做多项式除法。对于留数法逆变换,可借助sympy.residue进行符号计算。
9.6 系统函数 $H(z)$
9.6.1 定义
对于线性时不变(LTI)离散系统,设输入为 $x[n]$,输出为 $y[n]$,单位冲激响应为 $h[n]$,则:
$$Y(z) = H(z) \cdot X(z)$$
$$\boxed{H(z) = \frac{Y(z)}{X(z)} = \sum_{n=-\infty}^{\infty} h[n],z^{-n}}$$
$H(z)$ 称为系统函数(System Function)或传递函数(Transfer Function)。
9.6.2 差分方程与系统函数
N 阶线性常系数差分方程的一般形式:
$$\sum_{k=0}^{N} a_k,y[n-k] = \sum_{k=0}^{M} b_k,x[n-k]$$
两边取 Z 变换(利用时移性质):
$$\sum_{k=0}^{N} a_k,z^{-k},Y(z) = \sum_{k=0}^{M} b_k,z^{-k},X(z)$$
$$\boxed{H(z) = \frac{Y(z)}{X(z)} = \frac{\sum_{k=0}^{M} b_k,z^{-k}}{\sum_{k=0}^{N} a_k,z^{-k}} = \frac{b_0 + b_1 z^{-1} + \cdots + b_M z^{-M}}{a_0 + a_1 z^{-1} + \cdots + a_N z^{-N}}}$$
数字滤波器实现: $H(z)$ 的这种有理分式形式直接对应 FIR($N=0$)或 IIR 滤波器的结构。分子系数 $b_k$ 为前馈路径,分母系数 $a_k$ 为反馈路径。
9.6.3 极零点图(Pole-Zero Plot)
将 $H(z)$ 表示为零极点形式:
$$H(z) = G \cdot \frac{\prod_{i=1}^{M}(z - z_i)}{\prod_{j=1}^{N}(z - p_j)}$$
其中 $z_i$ 为零点(Zeros),$p_j$ 为极点(Poles),$G$ 为增益因子。
在 z 平面上标出极点(×)和零点(○)的图称为极零点图,它直观地反映了系统的频率响应特性:
- 极点靠近单位圆 → 对应频率处增益大(共振峰)
- 零点靠近单位圆 → 对应频率处增益小(陷波)
flowchart LR
A[差分方程] -->|Z 变换| B[系统函数 H_z]
B -->|因式分解| C[极零点图]
C -->|单位圆上求值| D[频率响应 H_e_jω]
B -->|z = e^{jω}| D
9.6.4 稳定性判据
对于因果 LTI 系统:
$$\boxed{\text{因果系统稳定} \iff H(z) \text{ 的所有极点位于单位圆内} \iff |p_j| < 1,;\forall j}$$
这与连续系统中"所有极点在左半平面"的判据完全对应。
证明思路: 因果系统的 $h[n]$ 为因果序列,ROC 为 $|z| > \max|p_j|$。稳定性要求 $\sum|h[n]| < \infty$,等价于 $H(z)$ 的 ROC 包含单位圆($|z| = 1$)。因此 $\max|p_j| < 1$。
Python 验证: 使用
scipy.signal.freqz(b, a)计算频率响应,scipy.signal.zpk2tf/tf2zpk在零极点和传递函数系数之间转换,matplotlib绘制极零点图。
9.7 s 平面到 z 平面的映射
由 $z = e^{sT}$($T$ 为采样周期),s 平面与 z 平面之间存在如下映射:
| s 平面区域 | z 平面区域 | 物理含义 |
|---|---|---|
| 左半平面($\mathrm{Re}(s) < 0$) | 单位圆内($ | z |
| 虚轴($s = j\omega$) | 单位圆上($ | z |
| 右半平面($\mathrm{Re}(s) > 0$) | 单位圆外($ | z |
映射特性:
- s 平面的虚轴 $s = j\omega$ 映射为 z 平面的单位圆 $z = e^{j\omega T}$
- s 平面每增加 $\frac{2\pi}{T}$ 的频率跨度,z 平面上绕单位圆一周(这就是频率混叠的几何解释)
- 左半平面中的等阻尼线映射为 z 平面上的螺旋线
$$\text{令 } s = \sigma + j\omega,\quad z = e^{sT} = e^{\sigma T} \cdot e^{j\omega T}$$
$$|z| = e^{\sigma T}, \quad \angle z = \omega T$$
工程意义: 这一映射是数字滤波器设计中**双线性变换法(Bilinear Transform)和脉冲响应不变法(Impulse Invariance)**的理论基础。
9.8 工程应用
9.8.1 数字滤波器设计
设计一个数字低通滤波器的典型流程:
flowchart TD
A[设计指标
通带/阻带频率、纹波] --> B[选择设计方法]
B --> C[双线性变换法
s → z 映射]
B --> D[脉冲响应不变法]
B --> E[窗函数法 FIR]
C --> F[得到 H_z]
D --> F
E --> F
F --> G[极零点分析
验证稳定性]
G --> H[频率响应验证
freqz]
H --> I[差分方程实现
y_n = Sigma b_k x_n-k - Sigma a_k y_n-k]
9.8.2 从差分方程到频率响应
完整示例: 一阶 IIR 低通滤波器
差分方程:$y[n] = 0.1,x[n] + 0.9,y[n-1]$
取 Z 变换:
$$Y(z) = 0.1,X(z) + 0.9,z^{-1},Y(z)$$
$$H(z) = \frac{Y(z)}{X(z)} = \frac{0.1}{1 - 0.9,z^{-1}} = \frac{0.1,z}{z - 0.9}$$
极点 $p = 0.9$(在单位圆内,系统稳定)。频率响应:
$$H(e^{j\omega}) = \frac{0.1}{1 - 0.9,e^{-j\omega}}$$
Python 验证:
| |
9.8.3 极零点分析伪代码
| |
9.9 本章小结
| 概念 | 要点 |
|---|---|
| Z 变换 | 离散时间信号的频域分析工具,$z = e^{sT}$ |
| ROC | 变换对的一部分,决定逆变换的唯一性 |
| 系统函数 $H(z)$ | 差分方程 → 代数方程的桥梁 |
| 稳定性 | 因果系统:所有极点在单位圆内 |
| 卷积定理 | 时域卷积 = z 域乘积 |
flowchart TB
subgraph 连续时间
L[拉普拉斯变换] --> LS[s 平面分析]
LS --> LH[左半平面 = 稳定]
end
subgraph 离散时间
Z[Z 变换] --> ZP[z 平面分析]
ZP --> ZC[单位圆内 = 稳定]
end
L -.->|z = e^{sT}| Z
LS -.->|映射| ZP
LH -.->|对应| ZC
下一步: 在第 10 章中,我们将利用 Z 变换的工具,深入讨论数字滤波器设计方法,包括 FIR 和 IIR 滤波器的系统设计流程。
参考工具:
- Python:
scipy.signal.freqz、scipy.signal.tf2zpk、scipy.signal.residuez - MATLAB:
freqz、zplane、residuez - 符号计算:
sympy的 Z 变换模块sympy.discrete.transforms.ztransform