[学习] 深入解析Z变换:从数学基础到工程应用
深入解析Z变换:从数学基础到工程应用
文章目录
- 深入解析Z变换:从数学基础到工程应用
- 摘要
- 一、Z变换的数学定义
- 1. 基本表达式
- 2. 收敛域(Region of Convergence, ROC)
- 二、数学意义:为什么需要Z变换?
- 1. 对DTFT的推广
- 2. 与拉普拉斯变换的关系
- 3. 微分方程的代数化
- 三、物理意义:复平面中的信号与系统
- 1. 复平面(Z平面)的几何解释
- 2. 零极点分析
- 3. 系统稳定性判据
- 四、工程应用:数字信号处理案例
- 案例1:数字滤波器设计
- 案例2:系统稳定性分析
- 案例3:卷积计算的简化
- 五、Z变换的核心性质
- 结语:Z变换的工程哲学
摘要
Z变换是离散时间信号系统分析的核心数学工具,通过将时域序列映射到复平面(Z域),为数字滤波器设计、系统稳定性分析和频谱计算提供了理论基础。本文从数学定义出发,结合物理意义与工程案例,系统剖析Z变换在数字信号处理中的核心作用,并提供完整的Python可视化实现。
一、Z变换的数学定义
1. 基本表达式
离散时间信号 x [ n ] x[n] x[n] 的双边Z变换定义为:
X ( z ) = ∑ n = − ∞ ∞ x [ n ] ⋅ z − n X(z) = \sum_{n=-\infty}^{\infty} x[n] \cdot z^{-n} X(z)=n=−∞∑∞x[n]⋅z−n
其中:
- z z z 为复变量: z = r e j ω z = re^{jω} z=rejω, r r r 表示幅度衰减/增长因子, ω ω ω 为数字角频率
- n n n 为离散时间索引:序列在时间轴上的位置
单边Z变换(适用于因果系统)定义为:
X ( z ) = ∑ n = 0 ∞ x [ n ] ⋅ z − n X(z) = \sum_{n=0}^{\infty} x[n] \cdot z^{-n} X(z)=n=0∑∞x[n]⋅z−n
2. 收敛域(Region of Convergence, ROC)
Z变换的收敛性由收敛域决定。ROC是复平面上使级数绝对可和的 z z z 值集合:
∑ n = − ∞ ∞ ∣ x [ n ] ⋅ r − n ∣ < ∞ \sum_{n=-\infty}^{\infty} |x[n] \cdot r^{-n}| < \infty n=−∞∑∞∣x[n]⋅r−n∣<∞
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Wedgedef plot_roc():fig, ax = plt.subplots(figsize=(8, 8))# 单位圆unit_circle = Circle((0, 0), 1, fill=False, color='blue', linestyle='--', alpha=0.7)ax.add_patch(unit_circle)# 右边序列ROC (|z| > 0.5)wedge_out = Wedge((0,0), 1.5, 0, 360, width=0.5, color='red', alpha=0.3)ax.add_patch(wedge_out)ax.text(1.2, 0.1, '|z|>0.5\n(右边序列)', fontsize=10)# 左边序列ROC (|z| < 0.8)wedge_in = Wedge((0,0), 0.8, 0, 360, width=0.8, color='green', alpha=0.3)ax.add_patch(wedge_in)ax.text(0.1, 0.6, '|z|<0.8\n(左边序列)', fontsize=10)# 双边序列ROC (0.4 < |z| < 0.9)ring = Wedge((0,0), 0.9, 0, 360, width=0.5, color='purple', alpha=0.3)ax.add_patch(ring)ax.text(0.3, 0.1, '0.4<|z|<0.9\n(双边序列)', fontsize=10)# 设置坐标轴ax.axhline(0, color='black', alpha=0.3)ax.axvline(0, color='black', alpha=0.3)ax.set_xlim(-1.6, 1.6)ax.set_ylim(-1.6, 1.6)ax.set_aspect('equal')ax.set_title('Z变换收敛域(ROC)类型', fontsize=14)ax.set_xlabel('实部(Re)', fontsize=12)ax.set_ylabel('虚部(Im)', fontsize=12)ax.grid(True, linestyle='--', alpha=0.6)plt.tight_layout()plt.show()# 执行绘图
plot_roc()
二、数学意义:为什么需要Z变换?
1. 对DTFT的推广
离散时间傅里叶变换(DTFT)可视为Z变换在单位圆上的特例:
X ( e j ω ) = X ( z ) ∣ z = e j ω X(e^{jω}) = X(z) \big|_{z=e^{jω}} X(ejω)=X(z) z=ejω
DTFT要求信号绝对可和,而Z变换通过引入衰减因子 r − n r^{-n} r−n 放宽了收敛条件。
2. 与拉普拉斯变换的关系
对连续信号采样后(采样周 T T T),其拉普拉斯变换为超越函数:
X ( s ) = ∑ n = − ∞ ∞ x ( n T ) e − s n T X(s) = \sum_{n=-\infty}^{\infty} x(nT) e^{-snT} X(s)=n=−∞∑∞x(nT)e−snT
通过变量代换 z = e s T z = e^{sT} z=esT,得到Z变换:
X ( z ) = ∑ n = − ∞ ∞ x [ n ] z − n X(z) = \sum_{n=-\infty}^{\infty} x[n] z^{-n} X(z)=n=−∞∑∞x[n]z−n
这一变换将超越函数转化为有理分式,极大简化了计算。
3. 微分方程的代数化
Z变换将差分方程(离散系统的描述工具)转化为代数方程:
时域差分方程: a 0 y [ n ] + a 1 y [ n − 1 ] = b 0 x [ n ] → Z域代数方程: ( a 0 + a 1 z − 1 ) Y ( z ) = b 0 X ( z ) \begin{aligned} \text{时域差分方程:} & \quad a₀y[n] + a₁y[n-1] = b₀x[n] \\ \rightarrow \text{Z域代数方程:} & \quad (a₀ + a₁z⁻¹)Y(z) = b₀X(z) \end{aligned} 时域差分方程:→Z域代数方程:a0y[n]+a1y[n−1]=b0x[n](a0+a1z−1)Y(z)=b0X(z)
这一特性类比于拉普拉斯变换对微分方程的简化作用。
三、物理意义:复平面中的信号与系统
1. 复平面(Z平面)的几何解释
- 单位圆( ∣ z ∣ = 1 |z|=1 ∣z∣=1):对应稳态频率响应
- 圆内区域( ∣ z ∣ < 1 |z|<1 ∣z∣<1):信号分量衰减
- 圆外区域( ∣ z ∣ > 1 |z|>1 ∣z∣>1):信号分量增长
2. 零极点分析
Z变换常表示为有理:
X ( z ) = ∑ k = 0 M b k z − k ∑ k = 0 N a k z − k = K ∏ i = 1 M ( 1 − c i z − 1 ) ∏ j = 1 N ( 1 − d j z − 1 ) X(z) = \frac{\sum_{k=0}^{M} b_k z^{-k}}{\sum_{k=0}^{N} a_k z^{-k}} = K \frac{\prod_{i=1}^{M} (1 - c_i z^{-1})}{\prod_{j=1}^{N} (1 - d_j z^{-1})} X(z)=∑k=0Nakz−k∑k=0Mbkz−k=K∏j=1N(1−djz−1)∏i=1M(1−ciz−1)
- 零点 z = c i z=c_i z=ci:使分子为零的点,抑制对应频率
- 极点 z = d j z=d_j z=dj:使分母为零的点,放大对应频率
def plot_pole_zero():# 系统函数: H(z) = (z-0.8)(z+0.5)/[(z-0.6+0.4j)(z-0.6-0.4j)(z+0.7)]zeros = [0.8, -0.5]poles = [complex(0.6, 0.4), complex(0.6, -0.4), -0.7]fig, ax = plt.subplots(figsize=(8, 8))# 单位圆unit_circle = Circle((0, 0), 1, fill=False, color='blue', linestyle='--', alpha=0.5)ax.add_patch(unit_circle)# 绘制零点ax.scatter(np.real(zeros), np.imag(zeros), s=100, marker='o', facecolors='none', edgecolors='r', label='零点')# 绘制极点ax.scatter(np.real(poles), np.imag(poles), s=100, marker='x', color='b', label='极点')# 设置坐标轴ax.axhline(0, color='black', alpha=0.3)ax.axvline(0, color='black', alpha=0.3)ax.set_xlim(-1.2, 1.2)ax.set_ylim(-1.2, 1.2)ax.set_aspect('equal')ax.set_title('系统零极点分布图', fontsize=14)ax.set_xlabel('实部(Re)', fontsize=12)ax.set_ylabel('虚部(Im)', fontsize=12)ax.grid(True, linestyle='--', alpha=0.6)ax.legend(loc='best')# 添加稳定性分析for pole in poles:mag = np.abs(pole)color = 'green' if mag < 1 else 'red'ax.text(np.real(pole)+0.05, np.imag(pole), f'|p|={mag:.2f}', color=color, fontsize=10)plt.tight_layout()plt.show()# 执行绘图
plot_pole_zero()
3. 系统稳定性判据
系统稳定的充要条件:所有极点位于单位圆内( ∣ d j ∣ < 1 |d_j| < 1 ∣dj∣<1)
四、工程应用:数字信号处理案例
案例1:数字滤波器设计
设计一Butterworth低通滤波器:
- 确定指标:通带截止频率 ω p = 0.2 π \omega_p=0.2\pi ωp=0.2π,阻带截止 ω s = 0.4 π \omega_s=0.4\pi ωs=0.4π
- 通过双线性变换将模拟滤波器转为数字:
s = 2 T 1 − z − 1 1 + z − 1 s = \frac{2}{T} \frac{1 - z^{-1}}{1 + z^{-1}} s=T21+z−11−z−1 - 得到Z域传递函数:
H ( z ) = 0.067 + 0.134 z − 1 + 0.067 z − 2 1 − 1.142 z − 1 + 0.412 z − 2 H(z) = \frac{0.067 + 0.134z^{-1} + 0.067z^{-2}}{1 - 1.142z^{-1} + 0.412z^{-2}} H(z)=1−1.142z−1+0.412z−20.067+0.134z−1+0.067z−2
from scipy import signal
import matplotlib.pyplot as pltdef plot_filter_response():# 定义滤波器系数b = [0.067, 0.134, 0.067] # 分子系数a = [1, -1.142, 0.412] # 分母系数# 创建频率响应图plt.figure(figsize=(12, 8))# 幅频响应plt.subplot(2, 1, 1)w, h = signal.freqz(b, a)plt.plot(w/np.pi, 20 * np.log10(np.abs(h)), 'b')plt.axvline(0.2, color='r', linestyle='--') # 通带截止plt.axvline(0.4, color='g', linestyle='--') # 阻带截止plt.title('Butterworth低通滤波器幅频响应')plt.ylabel('幅度 (dB)')plt.xlabel('归一化频率 (×π rad/sample)')plt.grid(True)plt.ylim([-50, 5])# 相频响应plt.subplot(2, 1, 2)angles = np.unwrap(np.angle(h))plt.plot(w/np.pi, angles, 'g')plt.title('相频响应')plt.ylabel('角度 (弧度)')plt.xlabel('归一化频率 (×π rad/sample)')plt.grid(True)plt.tight_layout()plt.show()# 执行绘图
plot_filter_response()
案例2:系统稳定性分析
已知系统函数:
H ( z ) = 1 1 − 1.2 z − 1 + 0.35 z − 2 H(z) = \frac{1}{1 - 1.2z^{-1} + 0.35z^{-2}} H(z)=1−1.2z−1+0.35z−21
- 求极点:解方程 z 2 − 1.2 z + 0.35 = 0 z^2 - 1.2z + 0.35 = 0 z2−1.2z+0.35=0 → 极点 z = 0.6 ± j 0.2 z=0.6 \pm j0.2 z=0.6±j0.2
- 计算模: ∣ z ∣ = 0.6 2 + 0.2 2 ≈ 0.632 < 1 |z| = \sqrt{0.6^2 + 0.2^2} \approx 0.632 < 1 ∣z∣=0.62+0.22≈0.632<1
- 结论:所有极点在单位圆内 → 系统稳定
案例3:卷积计算的简化
时域卷积 y [ n ] = x [ n ] ∗ h [ n ] y[n] = x[n] * h[n] y[n]=x[n]∗h[n] 在Z域变为乘积:
Z { x [ n ] ∗ h [ n ] } = X ( z ) ⋅ H ( z ) \mathcal{Z}\{x[n] * h[n]\} = X(z) \cdot H(z) Z{x[n]∗h[n]}=X(z)⋅H(z)
工程价值:
- 复杂度从 O ( N 2 ) O(N^2) O(N2) 降至 O ( N log N ) O(N \log N) O(NlogN)(结合FFT实现)
- 硬件实现时减少乘法器数量
五、Z变换的核心性质
性质 | 时域 | Z域 | 条件 |
---|---|---|---|
线性 | a x 1 [ n ] + b x 2 [ n ] ax₁[n]+bx₂[n] ax1[n]+bx2[n] | a X 1 ( z ) + b X 2 ( z ) aX₁(z)+bX₂(z) aX1(z)+bX2(z) | ROC取交集 |
时移 | x [ n − k ] x[n-k] x[n−k] | z − k X ( z ) z^{-k}X(z) z−kX(z) | ROC可能增删 0 / ∞ 0/\infty 0/∞ |
卷积 | x [ n ] ∗ h [ n ] x[n]*h[n] x[n]∗h[n] | X ( z ) H ( z ) X(z)H(z) X(z)H(z) | ROC至少重叠 |
频移 | e j ω 0 n x [ n ] e^{jω₀n}x[n] ejω0nx[n] | X ( e − j ω 0 z ) X(e^{-jω₀}z) X(e−jω0z) | ROC不变 |
初值定理 | x x x | lim z → ∞ X ( z ) \lim_{z\to\infty} X(z) limz→∞X(z) | 仅因果序列 |
结语:Z变换的工程哲学
Z变换的本质是在复平面中重建离散信号的动力学特征。它将时间域的差分方程转化为复平面中的几何问题(零极点分布),将卷积运算转化为乘法操作,为实时数字信号处理奠定了数学基础。在5G通信、音频编码、医学成像等领域,Z换持续发挥着不可替代的作用——理解它,便是掌握了数字世界的一把钥匙。
所有Python绘图代码均可直接复制运行,需安装以下库:
pip install numpy matplotlib scipy
研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)