深入解析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, Wedge
def 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 plt
def 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
研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)