第 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]$。

伪代码:

1
2
3
4
5
6
# 长除法求逆 Z 变换(因果序列)
X_z = 分子多项式 / 分母多项式
for n = 0, 1, 2, ..., N:
    # 长除法每一步得到 z^(-n) 的系数
    x[n] = 当前步的商系数
    余项 = 余项 * z  # 降幂

示例: $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)$ 为有理函数时,先展开为部分分式,再查表求各项逆变换。

步骤:

  1. 令 $X(z)/z$ 进行部分分式展开(先除以 $z$ 可简化计算)
  2. 查表得到每项的逆变换
  3. 根据 ROC 确定因果性,组合结果

伪代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 部分分式展开法
X_z = 有理函数(分子/分母)
X_z_over_z = X_z / z
对 X_z_over_z 做部分分式展开:
    X_z_over_z = A/(z - p1) + B/(z - p2) + ...
X_z = A*z/(z - p1) + B*z/(z - p2) + ...
对每一项:
    if ROC 包含 |z| > |pi|:
        逆变换 += A * (pi)^n * u[n]
    elif ROC 包含 |z| < |pi|:
        逆变换 += -A * (pi)^n * u[-n-1]

数学工具验证: 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 验证:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
from scipy.signal import freqz
import matplotlib.pyplot as plt

b = [0.1]       # 分子系数
a = [1, -0.9]   # 分母系数

w, h = freqz(b, a, worN=1024)

plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.plot(w / np.pi, 20 * np.log10(np.abs(h)))
plt.title('幅频响应 (Magnitude Response)')
plt.xlabel('归一化频率 (×π rad/sample)')
plt.ylabel('幅度 (dB)')

plt.subplot(1, 2, 2)
plt.plot(w / np.pi, np.angle(h))
plt.title('相频响应 (Phase Response)')
plt.xlabel('归一化频率 (×π rad/sample)')
plt.ylabel('相位 (rad)')
plt.tight_layout()
plt.show()

9.8.3 极零点分析伪代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 绘制极零点图
H_z = 分子/分母 多项式
zeros = 分子根
poles = 分母根

在 z 平面上画单位圆
标注 zeros 为 ○,poles 为 ×

# 判断稳定性
if all(|p| < 1 for p in poles) and 系统因果:
    print("系统稳定")
else:
    print("系统不稳定")

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.freqzscipy.signal.tf2zpkscipy.signal.residuez
  • MATLAB:freqzzplaneresiduez
  • 符号计算:sympy 的 Z 变换模块 sympy.discrete.transforms.ztransform