文中代码及相关仿真脚本均可在 BlogCode 中获取,本篇代码集中于
DSP/dsp03目录下。痛苦系列 DSP 专栏:抛弃死记硬背与纯符号堆砌,从工程中的真实痛点切入,剖析直觉误区,由第一性原理推导数学工具与物理边界,并结合 Python 仿真验证。
前言
在《痛苦系列 01》与《02》中,我们讨论了连续信号的时域离散化,以及借助 DTFT 和 DFT 将时域波形转换到频域进行分析的方法。
在前面的讨论中,我们主要分析有限长序列,以及能够满足常规傅里叶变换收敛条件的序列。对于离散时间序列,绝对可和条件:
∑n=−∞∞∣xn∣<∞
是保证 DTFT 绝对收敛且频谱连续的充分条件,但并非 DTFT 在所有数学意义下存在的必要条件(例如有限能量序列可以在均方意义下定义 DTFT,某些周期信号也可以借助 Dirac 冲激广义函数进行描述)。
本篇为了清晰地讨论级数收敛与系统稳定性,重点关注 Z 变换的绝对收敛域(ROC)。在离散系统分析中,信号或系统的冲激响应并不总是衰减的。例如一个包含正反馈的二阶系统,或者一个指数增长的序列:
xn=2nun(n=0,1,2,...)
如果直接将其代入常规的 DTFT 级数:
X(ejω)=∑n=0∞2ne−jωn=∑n=0∞(2e−jω)n
由于公比的模长大于 1,级数求和必然发散。此时,仅在单位圆( ∣e−jω∣=1)上评估的常规傅里叶级数便失去了计算意义。
为了统一分析发散、临界以及稳定的各类离散序列,并深入探究系统的稳定性边界,我们需要将分析范围从一维的单位圆拓展到整个二维复平面。这就是引入 Z 变换(Z-Transform) 的核心原因。
本篇阅读导图:
- 从 DTFT 到 Z 变换 :引入衰减因子与复变量 z 的定义。
- 收敛域(ROC)的作用:为什么代数表达式必须配合 ROC 才能唯一确定时域系统?
- 收敛域的几何形态:从等比数列求和推导因果外域、反因果内域及系统稳定性条件。
- 零极点与频率响应:借助复平面曲面模型理解极点与零点对幅频特性的塑造。
- 极点分布与时域响应:部分分式展开的物理意义,以及极点坐标对时域波形形态的控制。
- 仿真设计与差分方程:以 50Hz 陷波器为例,探讨极点取舍的工程代价,并推导差分方程进行代码验证。
一、 从 DTFT 到 Z 变换:衰减因子与复变量 z
对于指数发散的序列 xn=2nun,直接求和会导致发散。一个直接的数学处理思路是:人为给序列乘以一个指数衰减因子 r−n(其中 r>0),强行将其压制为收敛序列。
设原始序列每步放大 2 倍,我们选取 r=3(即衰减项 3−n),则加权后的序列变为:
xn⋅r−n=2n⋅3−n=(32)n
由于公比模长小于 1,随着 n 的增大,加权后的序列迅速衰减趋向于 0。
仿真对比:衰减因子对发散信号的压制
左图是指数增长的序列 xn=1.2n;中图是直接求和时的数值发散;右图是在乘以衰减因子 r−n(取 r=1.5)后,序列被有效压制并顺利收敛。
对加权后的收敛序列重新进行傅里叶变换:
X=∑n=−∞∞(xnr−n)e−jωn=∑n=−∞∞xn(rejω)−n
将括号内的复数项 rejω 统一定义为复变量 z:
z=rejω
由此便得到了 Z 变换的定义式:
X(z)=∑n=−∞∞xnz−n
作者按: z 是复平面上的一个点。其模长 ∣z∣=r 代表径向缩放尺度(衰减/增长率),辐角 ∠z=ω 代表角频率。当 r=1(即点落在单位圆上)时,Z 变换退化为 DTFT。因此,DTFT 只是 Z 变换在单位圆上的一个特例切片。
二、 为什么必须关注收敛域(ROC)
在实际计算中,容易产生一种误区:认为只要通过公式代数化简得到了 X(z) 的分式表达式,就完全确定了系统。
我们来看一组对比示例。
代数式完全相同的两个不同信号
分别求以下两个时域信号的 Z 变换:
- 信号 A(因果序列) : x1n=(0.5)nun=1,;0.5,;0.25,;...
- 信号 B(反因果序列) : x2n=−(0.5)nu−n−1=...,;−4,;−2,;0
1. 求解信号 A:
代入定义式:
X1(z)=∑n=0∞(0.5)nz−n=∑n=0∞(z0.5)n
这是一个公比为 q=z0.5 的等比数列。该级数收敛的充要条件为公比模长小于 1:
∣q∣= z0.5 <1⟹∣z∣>0.5
在收敛区域内求和,结果为:
X1(z)=1−0.5z−11=z−0.5z(收敛域:∣z∣>0.5)
2. 求解信号 B:
代入定义式:
X2(z)=∑n=−∞−1−(0.5)nz−n
令 m=−n( m 从 1 到 ∞):
X2(z)=−∑m=1∞(0.5)−mzm=−∑m=1∞(2z)m
该等比数列的公比为 q=2z。级数收敛的充要条件同样是模长小于 1:
∣2z∣<1⟹∣z∣<0.5
在收敛区域内求和,利用等比数列首项为 2z 的求和公式:
X2(z)=−1−2z2z=2z−12z=z−0.5z(收敛域:∣z∣<0.5)
若改写为负幂次形式,即 1−0.5z−11。但需要注意,反因果序列的收敛域 ∣z∣<0.5 包含了原点 z=0。级数在 z=0 处直接求和的值为 0,采用正幂次形式 z−0.5z 在 z=0 处取值为 0,两相吻合;而负幂次形式在 z=0 处则会出现形式上的未定义。
对比计算结果:
X1(z)=z−0.5z(∣z∣>0.5)与X2(z)=z−0.5z(∣z∣<0.5)
两者的有理函数代数表达式完全一致,但对应的时域序列一个因果且衰减,另一个反因果且发散。
作者按:脱离了收敛域(ROC),单独的 Z 变换代数表达式是不完备的。代数式描述了极点的位置,而 ROC 则决定了时域信号是向未来延展还是向过去延展,二者共同确定了系统的因果性与稳定性。
三、 收敛域的几何形态与稳定性条件
收敛域在复平面上的几何形状并非随机产生,而是直接由等比级数公比模长小于 1 的条件决定:
-
因果序列(右边序列, n≥0):
- 展开项中含 z−n,即 z 位于分母;
- 公比形式为 q∝z1;
- 为使 ∣q∣<1,要求分母模长足够大,即 ∣z∣>R;
- 收敛域表现为某个圆盘向外的开阔区域。
-
反因果序列(左边序列, n<0):
- 展开项中含 z∣n∣,即 z 位于分子;
- 公比形式为 q∝z;
- 为使 ∣q∣<1,要求分子模长足够小,即 ∣z∣<R;
- 收敛域表现为某个圆盘向内的区域。
-
双边序列:
- 同时包含正负时间项,收敛域一般为内外极点之间的圆环区域 R1<∣z∣<R2(边界可能根据信号具体情况退化)。
系统 BIBO 稳定的充要条件
线性时不变系统(LTI)满足 BIBO(有界输入有界输出)稳定的充要条件是:其冲激响应绝对可和:
∑n=−∞∞∣hn∣<∞
由于在单位圆上( ∣z∣=1),有 ∣z−n∣=1,因此单位圆上的 Z 变换级数绝对收敛,当且仅当冲激响应绝对可和。
由此可得,LTI 系统满足 BIBO 稳定的充要条件是其系统函数的收敛域完整包含单位圆:
z:∣z∣=1⊆ROCH(z)
对于因果有理系统 ,由于其收敛域是从最外侧极点向外延伸的开阔区域,这一条件又等价于:其全部未被消去的极点严格位于单位圆内部( ∣pk∣<1)。
仿真对比:不同系统的收敛域划分
左图:因果稳定系统,极点在圆内,ROC 包含单位圆并向外发散;中图:反因果系统,ROC 向内收缩且未包含单位圆;右图:双边系统,ROC 位于两圆之间。
四、 零极点与系统频率响应
将离散系统的传递函数写为零极点形式:
H(z)=A(z)B(z)=(z−p1)(z−p2)...(z−pN)b0(z−z1)(z−z2)...(z−zM)
- 分子为 0 的根 zk 称为零点(Zeros);
- 分母为 0 的根 pk 称为极点(Poles)。
1. 复平面上的曲面模型
为了直观理解零极点如何塑造系统的频响特性,我们可以将复平面上的模值 ∣H(z)∣ 视作一张受零极点约束的三维曲面:
- 极点:分母趋向于 0,使曲面向上隆起形成高耸的山峰。极点靠近单位圆时,会在对应频率处产生明显的谐振或通带放大;
- 零点:分子为 0,使曲面高度降为零。零点落在单位圆上时,会将对应频率的响应完全压低至零(陷波);
- 频率响应(DTFT) :正是沿着单位圆周 ∣z∣=1 截取的一圈曲面高度变化。
三维曲面:复平面零极点曲面与单位圆截面频响
图中山峰由极点顶起,青色粗线为沿单位圆截取的频率响应曲线。
2. 零点与极点的相互影响
零极点对频率响应的作用可以用复数矢量的几何距离来解释。对于单位圆上的任意一点 ejω:
∣H(ejω)∣=∣b0∣∏k=1N∣ejω−pk∣∏k=1M∣ejω−zk∣
即该频率点的响应幅度,等于该点到所有零点的距离连乘,除以到所有极点的距离连乘。
当零点与极点具有相同或相近的辐角、但模长不同时,它们会共同塑造该频率附近的响应形态:
仿真对比:零点对极点共振峰的抑制
左图为纯极点系统的频响尖峰;右图为在同角度引入零点后,零点将对应频率处的幅度压低为 0,消除了共振。
零点位于单位圆上时,会将对应数字角频率处的响应压低为 0;而靠近该零点的极点,则有助于收窄陷波宽度,使远离陷波中心的频率响应更快地回升平坦。
需要澄清的是:只有当零点与极点位于完全相同的复数位置时,才构成严格的代数极零相消。零点与极点仅处于同一角度但模长不同,并不发生代数约分,而是通过几何距离的比值变化共同影响频带特性。
五、 极点分布与时域冲激响应
极点不仅在频域上塑造了滤波器的幅频形状,在时域上,它更直接决定了系统冲激响应 hn 的衰减与振荡特性。
1. 逆 Z 变换与并联基本项
严格的逆 Z 变换通过复平面上的闭合围线积分定义:
hn=2πj1∮CH(z)zn−1dz
其中积分路径位于 H(z) 的收敛域内,并按逆时针方向围绕原点积分。
在实际分析中,更通用且直观的方法是部分分式展开(Partial Fraction Expansion)。对于极点互异、且分子阶数小于分母阶数的严格真分式有理系统,传递函数可以拆解为若干一阶分式之和:
H(z)=∑k=1N1−pkz−1Ak
(若系统包含直接通路项,还需增加常数项 D;若存在重极点,则需引入更高阶的分式项)。
这一展开说明:极点互异的有理系统,其时域冲激响应可以看作多个一阶基本子系统(单极点模态)响应的线性叠加。对单个因果子系统求逆变换得到:
1−pkz−11⟷因果pknun
因此,每个极点 pk 的位置分别决定了一个独立模态的时域表现。
2. 极点位置与时域波形对应关系
设极点坐标为 p=rpejωp:
| 极点位置 | 几何特征 | 时域响应的典型形态(因果系统) | 系统特性 | ||||
|---|---|---|---|---|---|---|---|
| 0<p<1 | 实轴右侧,圆内 | pnun,单调指数衰减 | 衰减模态 | ||||
| −1<p<0 | 实轴左侧,圆内 | pnun,正负交替且幅值衰减 | 交替衰减模态 | ||||
| p=re±jω0,r<1 | 复平面上下共轭,圆内 | rncos(ω0n+ϕ)un,带指数包络的振荡 | 阻尼振荡模态 | ||||
| p=e±jω0 | 单位圆边界 $ | p | = 1$ | 等幅持续振荡 | 不满足 BIBO 稳定 | ||
| **$ | p | > 1$** | 单位圆外侧 $ | p | > 1$ | 指数增长;复极点还会伴随振荡 | 发散不稳定 |
注:表中 ϕ 为相位常数,波形的具体幅值与相位由零点分布和激励条件决定。特别需要区分的是:单位圆上的单极点虽能产生有界的等幅持续振荡,但其冲激响应不满足绝对可和条件,且在受到同频正弦波输入时输出会线性增长发散,因此严格来说不满足 BIBO 稳定性。
仿真对比:极点位置变化对应的时域响应左图( r=0.95,圆内):能量自然衰减收敛;中图( r=1.0,圆上):等幅持续振荡;右图( r=1.05,圆外):幅值迅速发散溢出。
六、 仿真设计:50Hz 陷波器与差分方程实现
在尚未系统展开 FIR 与 IIR 滤波理论之前,我们通过一个 50Hz 陷波器的极简设计,来演示前面讨论的零极点几何关系是如何直接转化为工程代码的。这不仅是一次"复平面图纸到硬件实现"的演练,更展示了 Z 变换如何回答"时域差分方程系数从何而来"的核心问题。
设计设定
假定系统采样率为 fs=1000 Hz。我们希望滤除信号中存在的 50Hz 干扰,同时尽量保证其他频率信号的幅值不受影响。
1. 计算目标角频率
采样率 fs=1000 Hz 对应角频率 2π。因此 50Hz 对应的数字角频率为:
ω0=2πfsf0=2π100050=0.1π rad/sample
2. 放置零点以形成陷波点
为了在 50Hz 处实现完全抑制,在单位圆对应的角度上配置一对共轭零点(模长为 1,角度为 ±0.1π):
z1=ej0.1π,z2=e−j0.1π
分子多项式展开为:
B(z)=(1−z1z−1)(1−z2z−1)=1−2cos(0.1π)z−1+z−2
3. 放置极点以收窄阻带
若只使用这一对零点,零点引起的衰减会波及较宽的邻近频带。
为了收窄陷波宽度,在完全相同的角度方向、略微靠内的位置(取半径 r=0.95)放置一对共轭极点:
p1=0.95ej0.1π,p2=0.95e−j0.1π
分母多项式展开为:
A(z)=(1−p1z−1)(1−p2z−1)=1−2(0.95)cos(0.1π)z−1+0.952z−2
在偏离 50Hz 的频带上,极点与零点距离接近,幅值相互抵消,使得通带响应迅速恢复平坦。
4. 极点参数的工程取舍:频带宽度与时域代价
在这里,可能会产生一个实际追问:为什么极点半径选 r=0.95?如果为了让陷波凹槽更窄、更陡峭,直接选 r=0.999 是否更好?
在实际工程设计中,极点位置的选择是一个典型的综合权衡(Trade-off):
- 频域陡度 vs 时域瞬态振铃(Ringing) : 极点模长 r 越逼近 1,陷波凹槽确实越狭窄,对 50Hz 以外信号的误伤越小;但根据前文的模态分析,冲激响应衰减速度由 rn 决定。若取 r=0.999,系统冲激响应衰减极慢。一旦输入信号中混入脉冲或台阶阶跃扰动,时域会拖出长达数百甚至上千个采样点的高频振荡(振铃),系统需要很长时间才能恢复平稳;
- 定点硬件截断与极点外漂(有限字长效应) : 在 PC 端的双精度浮点环境下, r=0.999 是稳定的;但在许多基于 16 位定点 DSP 或低成本微控制器的嵌入式系统中,多项式系数必须定点截断。极点如果紧贴着单位圆、缺乏足够的安全裕量(Safety Margin) ,极微小的量化舍入误差就可能将极点踢出单位圆( ∣p∣≥1),导致硬件系统一通电就自激震荡或输出顶死满轨。
工程中选择 r=0.95,正是频域过渡带宽度、时域收敛速度与硬件数值安全三者权衡折中的结果。
5. 差分方程推导与时延实现
得到系统函数后,需要将其转化为可在代码中递推执行的差分方程。
传递函数表示为:
H(z)=X(z)Y(z)=1+a1z−1+a2z−21+b1z−1+b2z−2
其中 z−1 对应时域中的单步时延操作( z−1X(z)↔xn−1)。交叉相乘后移项整理:
yn=xn+b1xn−1+b2xn−2−a1yn−1−a2yn−2
多项式系数分别为:
- b1=−2cos(0.1π)
- b2=1
- a1=−2×0.95cos(0.1π)
- a2=0.952
这就是 scipy.signal.lfilter(b, a, x) 在内部递推执行的标准差分方程形式。
6. 直流增益归一化考量
代入直流处( ω=0,即 z=1)计算当前系统的幅度响应:
H(1)=A(1)B(1)=1−2(0.95)cos(0.1π)+0.9522−2cos(0.1π)≈1.02507
计算可得 20log10∣H(1)∣≈0.215 dB,直流增益存在微小的抬升。若需要使直流增益精确归一化为 1(0 dB),可在输入端添加缩放因子:
G=H(1)1=B(1)A(1)≈0.97554
这一校正保证了直流增益严格为 0 dB,避免滤波后信号整体幅度发生系统性放大。
仿真对比:50Hz 陷波器零极点布局、频响与滤波效果
左图为零极点复平面布局;中图为系统频响曲线,在 50Hz 处呈现明显的凹陷;右图为时域仿真,合成波形经过滤波后滤除了 50Hz 干扰成分。
七、 总结
Z 变换通过引入径向缩放因子,将原本局限于单位圆的傅里叶分析拓展到了整个复平面。
- 收敛域(ROC) 是连接代数多项式与时域物理系统的桥梁,界定了系统的因果性与稳定性;
- 极点 决定了系统的固有模态与稳定性边界,极点全部落在单位圆内是因果系统 BIBO 稳定的充要条件;
- 零极点分布 直观反映了系统在各频段的响应特征,通过合理配置零极点的几何位置,可以直接推导出对应的时域差分方程。
Z 变换与傅里叶变换的工程分工
在实际工程中,很多初学者容易混淆 Z 变换与傅里叶变换的使用场景。其实二者有着清晰的分工:
- 运行期(Runtime)看 FFT:FFT 吃进实时数据流、吐出离散频谱,直接用于波形监测、特征识别与频域滤波;
- 设计期(Design Time)看 Z 变换 :在工程代码跑起来的时候,硬件几乎不会去计算连续复变函数 X(z)。Z 变换的真正角色,是工程师在写代码之前,用来把频域滤波意图翻译成时域差分方程系数、并在部署前验算系统稳定边界与量化容错的"离线审查图纸"。
在下一篇中,我们将进一步讨论数字滤波器的具体设计方法,聚焦于 FIR 滤波器中的线性相位特性与窗函数的选择权衡。
附录:本篇仿真代码
本篇涉及的仿真脚本可在代码仓库中获取:DSP/dsp03/pain_series_03_demo.py。
bash
# 依赖安装
pip install numpy matplotlib scipy
# 运行仿真实验
python DSP/dsp03/pain_series_03_demo.py
左图是指数增长的序列 x
左图:因果稳定系统,极点在圆内,ROC 包含单位圆并向外发散;中图:反因果系统,ROC 向内收缩且未包含单位圆;右图:双边系统,ROC 位于两圆之间。
图中山峰由极点顶起,青色粗线为沿单位圆截取的频率响应曲线。
左图为纯极点系统的频响尖峰;右图为在同角度引入零点后,零点将对应频率处的幅度压低为 0,消除了共振。
左图( r=0.95,圆内):能量自然衰减收敛;中图( r=1.0,圆上):等幅持续振荡;右图( r=1.05,圆外):幅值迅速发散溢出。
左图为零极点复平面布局;中图为系统频响曲线,在 50Hz 处呈现明显的凹陷;右图为时域仿真,合成波形经过滤波后滤除了 50Hz 干扰成分。