痛苦系列 | DSP-03 跨越单位圆:Z变换与零极点分析

文中代码及相关仿真脚本均可在 BlogCode 中获取,本篇代码集中于 DSP/dsp03 目录下。

痛苦系列 DSP 专栏:抛弃死记硬背与纯符号堆砌,从工程中的真实痛点切入,剖析直觉误区,由第一性原理推导数学工具与物理边界,并结合 Python 仿真验证。

前言

在《痛苦系列 01》与《02》中,我们讨论了连续信号的时域离散化,以及借助 DTFT 和 DFT 将时域波形转换到频域进行分析的方法。

在前面的讨论中,我们主要分析有限长序列,以及能够满足常规傅里叶变换收敛条件的序列。对于离散时间序列,绝对可和条件:

∑n=−∞∞ ∣xn∣<∞ \sum_{n=-\infty}^{\infty} |xn| < \infty ∑n=−∞∞∣xn∣<∞

是保证 DTFT 绝对收敛且频谱连续的充分条件,但并非 DTFT 在所有数学意义下存在的必要条件(例如有限能量序列可以在均方意义下定义 DTFT,某些周期信号也可以借助 Dirac 冲激广义函数进行描述)。

本篇为了清晰地讨论级数收敛与系统稳定性,重点关注 Z 变换的绝对收敛域(ROC)。在离散系统分析中,信号或系统的冲激响应并不总是衰减的。例如一个包含正反馈的二阶系统,或者一个指数增长的序列:

xn=2nun(n=0,1,2,... )xn = 2^n un \quad (n = 0, 1, 2, \dots) xn=2nun(n=0,1,2,...)

如果直接将其代入常规的 DTFT 级数:

X(ejω)= ∑n=0∞ 2ne−jωn= ∑n=0∞ (2e−jω)nX(e^{j\omega}) = \sum_{n=0}^{\infty} 2^n e^{-j\omega n} = \sum_{n=0}^{\infty} \left(2 e^{-j\omega}\right)^n X(ejω)=∑n=0∞2ne−jωn=∑n=0∞(2e−jω)n

由于公比的模长大于 1,级数求和必然发散。此时,仅在单位圆( ∣e−jω∣=1|e^{-j\omega}| = 1 ∣e−jω∣=1)上评估的常规傅里叶级数便失去了计算意义。

为了统一分析发散、临界以及稳定的各类离散序列,并深入探究系统的稳定性边界,我们需要将分析范围从一维的单位圆拓展到整个二维复平面。这就是引入 Z 变换(Z-Transform) 的核心原因。

本篇阅读导图:

  1. 从 DTFT 到 Z 变换 :引入衰减因子与复变量 zz z 的定义。
  2. 收敛域(ROC)的作用:为什么代数表达式必须配合 ROC 才能唯一确定时域系统?
  3. 收敛域的几何形态:从等比数列求和推导因果外域、反因果内域及系统稳定性条件。
  4. 零极点与频率响应:借助复平面曲面模型理解极点与零点对幅频特性的塑造。
  5. 极点分布与时域响应:部分分式展开的物理意义,以及极点坐标对时域波形形态的控制。
  6. 仿真设计与差分方程:以 50Hz 陷波器为例,探讨极点取舍的工程代价,并推导差分方程进行代码验证。

一、 从 DTFT 到 Z 变换:衰减因子与复变量 z

对于指数发散的序列 xn=2nunxn = 2^n un xn=2nun,直接求和会导致发散。一个直接的数学处理思路是:人为给序列乘以一个指数衰减因子 r−nr^{-n} r−n(其中 r>0r > 0 r>0),强行将其压制为收敛序列。

设原始序列每步放大 2 倍,我们选取 r=3r = 3 r=3(即衰减项 3−n3^{-n} 3−n),则加权后的序列变为:

xn⋅r−n=2n⋅3−n= (23) n xn \cdot r^{-n} = 2^n \cdot 3^{-n} = \left(\frac{2}{3}\right)^n xn⋅r−n=2n⋅3−n=(32)n

由于公比模长小于 1,随着 nn n 的增大,加权后的序列迅速衰减趋向于 0。

仿真对比:衰减因子对发散信号的压制 左图是指数增长的序列 xn=1.2nxn = 1.2^n xn=1.2n;中图是直接求和时的数值发散;右图是在乘以衰减因子 r−nr^{-n} r−n(取 r=1.5r = 1.5 r=1.5)后,序列被有效压制并顺利收敛。

对加权后的收敛序列重新进行傅里叶变换:

X= ∑n=−∞∞ (xnr−n)e−jωn= ∑n=−∞∞ xn(rejω)−n X = \sum_{n=-\infty}^{\infty} \left( xn r^{-n} \right) e^{-j\omega n} = \sum_{n=-\infty}^{\infty} xn \left( r e^{j\omega} \right)^{-n} X=∑n=−∞∞(xnr−n)e−jωn=∑n=−∞∞xn(rejω)−n

将括号内的复数项 rejωr e^{j\omega} rejω 统一定义为复变量 zz z:

z=rejωz = r e^{j\omega} z=rejω

由此便得到了 Z 变换的定义式:

X(z)= ∑n=−∞∞ xnz−nX(z) = \sum_{n=-\infty}^{\infty} xn z^{-n} X(z)=∑n=−∞∞xnz−n

作者按: zz z 是复平面上的一个点。其模长 ∣z∣=r|z| = r ∣z∣=r 代表径向缩放尺度(衰减/增长率),辐角 ∠z=ω\angle z = \omega ∠z=ω 代表角频率。当 r=1r = 1 r=1(即点落在单位圆上)时,Z 变换退化为 DTFT。因此,DTFT 只是 Z 变换在单位圆上的一个特例切片。


二、 为什么必须关注收敛域(ROC)

在实际计算中,容易产生一种误区:认为只要通过公式代数化简得到了 X(z)X(z) X(z) 的分式表达式,就完全确定了系统。

我们来看一组对比示例。

代数式完全相同的两个不同信号

分别求以下两个时域信号的 Z 变换:

  • 信号 A(因果序列) : x1n=(0.5)nun=1,;0.5,;0.25,;... x_1n = (0.5)^n un = {1, ; 0.5, ; 0.25, ; \dots} x1n=(0.5)nun=1,;0.5,;0.25,;...
  • 信号 B(反因果序列) : x2n=−(0.5)nu−n−1=...,;−4,;−2,;0 x_2n = -(0.5)^n u-n-1 = {\dots, ; -4, ; -2, ; 0} x2n=−(0.5)nu−n−1=...,;−4,;−2,;0

1. 求解信号 A:

代入定义式:

X1(z)= ∑n=0∞ (0.5)nz−n= ∑n=0∞ (0.5z) n X_1(z) = \sum_{n=0}^{\infty} (0.5)^n z^{-n} = \sum_{n=0}^{\infty} \left(\frac{0.5}{z}\right)^n X1(z)=∑n=0∞(0.5)nz−n=∑n=0∞(z0.5)n

这是一个公比为 q=0.5z q = \frac{0.5}{z} q=z0.5 的等比数列。该级数收敛的充要条件为公比模长小于 1:

∣q∣= ∣0.5z∣ <1  ⟹  ∣z∣>0.5 |q| = \left|\frac{0.5}{z}\right| < 1 \implies |z| > 0.5 ∣q∣= z0.5 <1⟹∣z∣>0.5

在收敛区域内求和,结果为:

X1(z)= 11−0.5z−1 = zz−0.5 (收敛域:∣z∣>0.5) X_1(z) = \frac{1}{1 - 0.5 z^{-1}} = \frac{z}{z - 0.5} \quad (\text{收敛域:}|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 X_2(z) = \sum_{n=-\infty}^{-1} -(0.5)^n z^{-n} X2(z)=∑n=−∞−1−(0.5)nz−n

令 m=−nm = -n m=−n( mm m 从 11 1 到 ∞\infty ∞):

X2(z)=− ∑m=1∞ (0.5)−mzm=− ∑m=1∞ (2z)m X_2(z) = -\sum_{m=1}^{\infty} (0.5)^{-m} z^m = -\sum_{m=1}^{\infty} (2z)^m X2(z)=−∑m=1∞(0.5)−mzm=−∑m=1∞(2z)m

该等比数列的公比为 q=2zq = 2z q=2z。级数收敛的充要条件同样是模长小于 1:

∣2z∣<1  ⟹  ∣z∣<0.5|2z| < 1 \implies |z| < 0.5 ∣2z∣<1⟹∣z∣<0.5

在收敛区域内求和,利用等比数列首项为 2z2z 2z 的求和公式:

X2(z)=− 2z1−2z = 2z2z−1 = zz−0.5 (收敛域:∣z∣<0.5) X_2(z) = - \frac{2z}{1 - 2z} = \frac{2z}{2z - 1} = \frac{z}{z - 0.5} \quad (\text{收敛域:}|z| < 0.5) X2(z)=−1−2z2z=2z−12z=z−0.5z(收敛域:∣z∣<0.5)

若改写为负幂次形式,即 11−0.5z−1 \frac{1}{1 - 0.5 z^{-1}} 1−0.5z−11。但需要注意,反因果序列的收敛域 ∣z∣<0.5|z| < 0.5 ∣z∣<0.5 包含了原点 z=0z=0 z=0。级数在 z=0z=0 z=0 处直接求和的值为 00 0,采用正幂次形式 zz−0.5 \frac{z}{z - 0.5} z−0.5z 在 z=0z=0 z=0 处取值为 00 0,两相吻合;而负幂次形式在 z=0z=0 z=0 处则会出现形式上的未定义。


对比计算结果:

X1(z)= zz−0.5 (∣z∣>0.5)与X2(z)= zz−0.5 (∣z∣<0.5) X_1(z) = \frac{z}{z - 0.5} \quad (|z| > 0.5) \quad \text{与} \quad X_2(z) = \frac{z}{z - 0.5} \quad (|z| < 0.5) X1(z)=z−0.5z(∣z∣>0.5)与X2(z)=z−0.5z(∣z∣<0.5)

两者的有理函数代数表达式完全一致,但对应的时域序列一个因果且衰减,另一个反因果且发散。

作者按:脱离了收敛域(ROC),单独的 Z 变换代数表达式是不完备的。代数式描述了极点的位置,而 ROC 则决定了时域信号是向未来延展还是向过去延展,二者共同确定了系统的因果性与稳定性。


三、 收敛域的几何形态与稳定性条件

收敛域在复平面上的几何形状并非随机产生,而是直接由等比级数公比模长小于 1 的条件决定:

  1. 因果序列(右边序列, n≥0n \ge 0 n≥0):

    • 展开项中含 z−nz^{-n} z−n,即 zz z 位于分母;
    • 公比形式为 q∝1z q \propto \frac{1}{z} q∝z1;
    • 为使 ∣q∣<1|q| < 1 ∣q∣<1,要求分母模长足够大,即 ∣z∣>R|z| > R ∣z∣>R;
    • 收敛域表现为某个圆盘向外的开阔区域。
  2. 反因果序列(左边序列, n<0n < 0 n<0):

    • 展开项中含 z∣n∣z^{|n|} z∣n∣,即 zz z 位于分子;
    • 公比形式为 q∝zq \propto z q∝z;
    • 为使 ∣q∣<1|q| < 1 ∣q∣<1,要求分子模长足够小,即 ∣z∣<R|z| < R ∣z∣<R;
    • 收敛域表现为某个圆盘向内的区域。
  3. 双边序列:

    • 同时包含正负时间项,收敛域一般为内外极点之间的圆环区域 R1<∣z∣<R2 R_1 < |z| < R_2 R1<∣z∣<R2(边界可能根据信号具体情况退化)。

系统 BIBO 稳定的充要条件

线性时不变系统(LTI)满足 BIBO(有界输入有界输出)稳定的充要条件是:其冲激响应绝对可和:

∑n=−∞∞ ∣hn∣<∞ \sum_{n=-\infty}^{\infty} |hn| < \infty ∑n=−∞∞∣hn∣<∞

由于在单位圆上( ∣z∣=1|z| = 1 ∣z∣=1),有 ∣z−n∣=1|z^{-n}| = 1 ∣z−n∣=1,因此单位圆上的 Z 变换级数绝对收敛,当且仅当冲激响应绝对可和。

由此可得,LTI 系统满足 BIBO 稳定的充要条件是其系统函数的收敛域完整包含单位圆:

z:∣z∣=1⊆ROCH(z) {z : |z| = 1} \subseteq \text{ROC}{H(z)} z:∣z∣=1⊆ROCH(z)

对于因果有理系统 ,由于其收敛域是从最外侧极点向外延伸的开阔区域,这一条件又等价于:其全部未被消去的极点严格位于单位圆内部( ∣pk∣<1 |p_k| < 1 ∣pk∣<1)。

仿真对比:不同系统的收敛域划分 左图:因果稳定系统,极点在圆内,ROC 包含单位圆并向外发散;中图:反因果系统,ROC 向内收缩且未包含单位圆;右图:双边系统,ROC 位于两圆之间。


四、 零极点与系统频率响应

将离散系统的传递函数写为零极点形式:

H(z)= B(z)A(z) = b0(z−z1)(z−z2)...(z−zM) (z−p1)(z−p2)...(z−pN) H(z) = \frac{B(z)}{A(z)} = \frac{b_0 (z - z_1)(z - z_2)\dots(z - z_M)}{(z - p_1)(z - p_2)\dots(z - p_N)} H(z)=A(z)B(z)=(z−p1)(z−p2)...(z−pN)b0(z−z1)(z−z2)...(z−zM)

  • 分子为 0 的根 zk z_k zk 称为零点(Zeros);
  • 分母为 0 的根 pk p_k pk 称为极点(Poles)。

1. 复平面上的曲面模型

为了直观理解零极点如何塑造系统的频响特性,我们可以将复平面上的模值 ∣H(z)∣|H(z)| ∣H(z)∣ 视作一张受零极点约束的三维曲面:

  1. 极点:分母趋向于 0,使曲面向上隆起形成高耸的山峰。极点靠近单位圆时,会在对应频率处产生明显的谐振或通带放大;
  2. 零点:分子为 0,使曲面高度降为零。零点落在单位圆上时,会将对应频率的响应完全压低至零(陷波);
  3. 频率响应(DTFT) :正是沿着单位圆周 ∣z∣=1|z| = 1 ∣z∣=1 截取的一圈曲面高度变化。

三维曲面:复平面零极点曲面与单位圆截面频响 图中山峰由极点顶起,青色粗线为沿单位圆截取的频率响应曲线。

2. 零点与极点的相互影响

零极点对频率响应的作用可以用复数矢量的几何距离来解释。对于单位圆上的任意一点 ejωe^{j\omega} ejω:

∣H(ejω)∣=∣b0∣ ∏k=1M ∣ejω−zk∣ ∏k=1N ∣ejω−pk∣ |H(e^{j\omega})| = |b_0| \frac{\prod_{k=1}^M |e^{j\omega} - z_k|}{\prod_{k=1}^N |e^{j\omega} - p_k|} ∣H(ejω)∣=∣b0∣∏k=1N∣ejω−pk∣∏k=1M∣ejω−zk∣

即该频率点的响应幅度,等于该点到所有零点的距离连乘,除以到所有极点的距离连乘。

当零点与极点具有相同或相近的辐角、但模长不同时,它们会共同塑造该频率附近的响应形态:

仿真对比:零点对极点共振峰的抑制 左图为纯极点系统的频响尖峰;右图为在同角度引入零点后,零点将对应频率处的幅度压低为 0,消除了共振。

零点位于单位圆上时,会将对应数字角频率处的响应压低为 0;而靠近该零点的极点,则有助于收窄陷波宽度,使远离陷波中心的频率响应更快地回升平坦。

需要澄清的是:只有当零点与极点位于完全相同的复数位置时,才构成严格的代数极零相消。零点与极点仅处于同一角度但模长不同,并不发生代数约分,而是通过几何距离的比值变化共同影响频带特性。


五、 极点分布与时域冲激响应

极点不仅在频域上塑造了滤波器的幅频形状,在时域上,它更直接决定了系统冲激响应 hnhn hn 的衰减与振荡特性。

1. 逆 Z 变换与并联基本项

严格的逆 Z 变换通过复平面上的闭合围线积分定义:

hn= 12πj ∮CH(z)zn−1dzhn = \frac{1}{2\pi j} \oint_C H(z) z^{n-1} dz hn=2πj1∮CH(z)zn−1dz

其中积分路径位于 H(z)H(z) H(z) 的收敛域内,并按逆时针方向围绕原点积分。

在实际分析中,更通用且直观的方法是部分分式展开(Partial Fraction Expansion)。对于极点互异、且分子阶数小于分母阶数的严格真分式有理系统,传递函数可以拆解为若干一阶分式之和:

H(z)= ∑k=1N Ak 1−pkz−1 H(z) = \sum_{k=1}^N \frac{A_k}{1 - p_k z^{-1}} H(z)=∑k=1N1−pkz−1Ak

(若系统包含直接通路项,还需增加常数项 DD D;若存在重极点,则需引入更高阶的分式项)。

这一展开说明:极点互异的有理系统,其时域冲激响应可以看作多个一阶基本子系统(单极点模态)响应的线性叠加。对单个因果子系统求逆变换得到:

1 1−pkz−1 ⟷ 因果 pknun \frac{1}{1 - p_k z^{-1}} \quad \stackrel{\text{因果}}{\longleftrightarrow} \quad p_k^n un 1−pkz−11⟷因果pknun

因此,每个极点 pk p_k pk 的位置分别决定了一个独立模态的时域表现。

2. 极点位置与时域波形对应关系

设极点坐标为 p=rpe jωp p = r_p e^{j\omega_p} p=rpejωp:

极点位置 几何特征 时域响应的典型形态(因果系统) 系统特性
0<p<10 < p < 1 0<p<1 实轴右侧,圆内 pnunp^n un pnun,单调指数衰减 衰减模态
−1<p<0-1 < p < 0 −1<p<0 实轴左侧,圆内 pnunp^n un pnun,正负交替且幅值衰减 交替衰减模态
p=re ±jω0 ,r<1p = r e^{\pm j\omega_0}, r < 1 p=re±jω0,r<1 复平面上下共轭,圆内 rncos⁡(ω0n+ϕ)un r^n \cos(\omega_0 n + \phi) un rncos(ω0n+ϕ)un,带指数包络的振荡 阻尼振荡模态
p=e ±jω0 p = e^{\pm j\omega_0} p=e±jω0 单位圆边界 $ p = 1$ 等幅持续振荡 不满足 BIBO 稳定
**$ p > 1$** 单位圆外侧 $ p > 1$ 指数增长;复极点还会伴随振荡 发散不稳定

注:表中 ϕ\phi ϕ 为相位常数,波形的具体幅值与相位由零点分布和激励条件决定。特别需要区分的是:单位圆上的单极点虽能产生有界的等幅持续振荡,但其冲激响应不满足绝对可和条件,且在受到同频正弦波输入时输出会线性增长发散,因此严格来说不满足 BIBO 稳定性。
仿真对比:极点位置变化对应的时域响应 左图( r=0.95r=0.95 r=0.95,圆内):能量自然衰减收敛;中图( r=1.0r=1.0 r=1.0,圆上):等幅持续振荡;右图( r=1.05r=1.05 r=1.05,圆外):幅值迅速发散溢出。


六、 仿真设计:50Hz 陷波器与差分方程实现

在尚未系统展开 FIR 与 IIR 滤波理论之前,我们通过一个 50Hz 陷波器的极简设计,来演示前面讨论的零极点几何关系是如何直接转化为工程代码的。这不仅是一次"复平面图纸到硬件实现"的演练,更展示了 Z 变换如何回答"时域差分方程系数从何而来"的核心问题。

设计设定

假定系统采样率为 fs=1000 Hz f_s = 1000\text{ Hz} fs=1000 Hz。我们希望滤除信号中存在的 50Hz 干扰,同时尽量保证其他频率信号的幅值不受影响。

1. 计算目标角频率

采样率 fs=1000 Hz f_s = 1000\text{ Hz} fs=1000 Hz 对应角频率 2π2\pi 2π。因此 50Hz 对应的数字角频率为:

ω0=2π f0fs =2π501000=0.1π rad/sample \omega_0 = 2\pi \frac{f_0}{f_s} = 2\pi \frac{50}{1000} = 0.1\pi\text{ rad/sample} ω0=2πfsf0=2π100050=0.1π rad/sample

2. 放置零点以形成陷波点

为了在 50Hz 处实现完全抑制,在单位圆对应的角度上配置一对共轭零点(模长为 1,角度为 ±0.1π\pm 0.1\pi ±0.1π):

z1=ej0.1π,z2=e−j0.1π z_1 = e^{j 0.1\pi}, \quad z_2 = e^{-j 0.1\pi} z1=ej0.1π,z2=e−j0.1π

分子多项式展开为:

B(z)=(1−z1z−1)(1−z2z−1)=1−2cos⁡(0.1π)z−1+z−2B(z) = (1 - z_1 z^{-1})(1 - z_2 z^{-1}) = 1 - 2\cos(0.1\pi)z^{-1} + z^{-2} B(z)=(1−z1z−1)(1−z2z−1)=1−2cos(0.1π)z−1+z−2

3. 放置极点以收窄阻带

若只使用这一对零点,零点引起的衰减会波及较宽的邻近频带。

为了收窄陷波宽度,在完全相同的角度方向、略微靠内的位置(取半径 r=0.95r = 0.95 r=0.95)放置一对共轭极点:

p1=0.95ej0.1π,p2=0.95e−j0.1π p_1 = 0.95 e^{j 0.1\pi}, \quad p_2 = 0.95 e^{-j 0.1\pi} 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−2A(z) = (1 - p_1 z^{-1})(1 - p_2 z^{-1}) = 1 - 2(0.95)\cos(0.1\pi)z^{-1} + 0.95^2 z^{-2} A(z)=(1−p1z−1)(1−p2z−1)=1−2(0.95)cos(0.1π)z−1+0.952z−2

在偏离 50Hz 的频带上,极点与零点距离接近,幅值相互抵消,使得通带响应迅速恢复平坦。

4. 极点参数的工程取舍:频带宽度与时域代价

在这里,可能会产生一个实际追问:为什么极点半径选 r=0.95r = 0.95 r=0.95?如果为了让陷波凹槽更窄、更陡峭,直接选 r=0.999r = 0.999 r=0.999 是否更好?

在实际工程设计中,极点位置的选择是一个典型的综合权衡(Trade-off):

  • 频域陡度 vs 时域瞬态振铃(Ringing) : 极点模长 rr r 越逼近 1,陷波凹槽确实越狭窄,对 50Hz 以外信号的误伤越小;但根据前文的模态分析,冲激响应衰减速度由 rnr^n rn 决定。若取 r=0.999r = 0.999 r=0.999,系统冲激响应衰减极慢。一旦输入信号中混入脉冲或台阶阶跃扰动,时域会拖出长达数百甚至上千个采样点的高频振荡(振铃),系统需要很长时间才能恢复平稳;
  • 定点硬件截断与极点外漂(有限字长效应) : 在 PC 端的双精度浮点环境下, r=0.999r = 0.999 r=0.999 是稳定的;但在许多基于 16 位定点 DSP 或低成本微控制器的嵌入式系统中,多项式系数必须定点截断。极点如果紧贴着单位圆、缺乏足够的安全裕量(Safety Margin) ,极微小的量化舍入误差就可能将极点踢出单位圆( ∣p∣≥1|p| \ge 1 ∣p∣≥1),导致硬件系统一通电就自激震荡或输出顶死满轨。

工程中选择 r=0.95r = 0.95 r=0.95,正是频域过渡带宽度、时域收敛速度与硬件数值安全三者权衡折中的结果。

5. 差分方程推导与时延实现

得到系统函数后,需要将其转化为可在代码中递推执行的差分方程。

传递函数表示为:

H(z)= Y(z)X(z) = 1+b1z−1+b2z−2 1+a1z−1+a2z−2 H(z) = \frac{Y(z)}{X(z)} = \frac{1 + b_1 z^{-1} + b_2 z^{-2}}{1 + a_1 z^{-1} + a_2 z^{-2}} H(z)=X(z)Y(z)=1+a1z−1+a2z−21+b1z−1+b2z−2

其中 z−1z^{-1} z−1 对应时域中的单步时延操作( z−1X(z)↔xn−1z^{-1} X(z) \leftrightarrow xn-1 z−1X(z)↔xn−1)。交叉相乘后移项整理:

yn=xn+b1xn−1+b2xn−2−a1yn−1−a2yn−2yn = xn + b_1 xn-1 + b_2 xn-2 - a_1 yn-1 - a_2 yn-2 yn=xn+b1xn−1+b2xn−2−a1yn−1−a2yn−2

多项式系数分别为:

  • b1=−2cos⁡(0.1π) b_1 = -2\cos(0.1\pi) b1=−2cos(0.1π)
  • b2=1 b_2 = 1 b2=1
  • a1=−2×0.95cos⁡(0.1π) a_1 = -2 \times 0.95 \cos(0.1\pi) a1=−2×0.95cos(0.1π)
  • a2=0.952 a_2 = 0.95^2 a2=0.952

这就是 scipy.signal.lfilter(b, a, x) 在内部递推执行的标准差分方程形式。

6. 直流增益归一化考量

代入直流处( ω=0\omega = 0 ω=0,即 z=1z = 1 z=1)计算当前系统的幅度响应:

H(1)= B(1)A(1) = 2−2cos⁡(0.1π)1−2(0.95)cos⁡(0.1π)+0.952 ≈1.02507H(1) = \frac{B(1)}{A(1)} = \frac{2 - 2\cos(0.1\pi)}{1 - 2(0.95)\cos(0.1\pi) + 0.95^2} \approx 1.02507 H(1)=A(1)B(1)=1−2(0.95)cos(0.1π)+0.9522−2cos(0.1π)≈1.02507

计算可得 20 log⁡10 ∣H(1)∣≈0.215 dB 20\log_{10}|H(1)| \approx 0.215\text{ dB} 20log10∣H(1)∣≈0.215 dB,直流增益存在微小的抬升。若需要使直流增益精确归一化为 1(0 dB),可在输入端添加缩放因子:

G= 1H(1) = A(1)B(1) ≈0.97554 G = \frac{1}{H(1)} = \frac{A(1)}{B(1)} \approx 0.97554 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)X(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
相关推荐
蛋蛋的就会顺顺的2 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
开发小能手1233 小时前
答案daanC语言
数据结构·算法
Navigator_Z4 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
pride.li5 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
kyriewen6 小时前
我上手了 Vite+ 1.0:Node 不用自己装,lint 却翻车了
前端·javascript·程序员
旺仔仔仔6 小时前
机器人项目实战(5):从单次抓取,到接收指令连续做事
算法
旺仔仔仔6 小时前
机器人项目实战(2):识别物体、提取点云,再到抓取姿态
算法
姜鱼问生6 小时前
密码明明一样,为什么 GPG 说“错的“?
后端·算法·架构
启观川7 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法