3、Z变换与系统函数:从离散域看滤波器的灵魂

说实话,很多做雷达信号处理的工程师,一提到Z变换就头疼。觉得这是数学课上的东西,跟实际工程离得太远。我以前也这么想,直到有一次在项目里调试一个数字滤波器,怎么调都不对劲——后来才发现,问题就出在我对系统函数的理解不够深。

今天咱们就聊聊Z变换、系统函数和零极点分析。这些东西,说白了就是滤波器的「身份证」和「体检报告」。搞懂了它们,你设计滤波器时心里就有底了。

3.1 Z变换定义:离散世界的拉普拉斯

Z变换的定义其实很简单。对于一个离散序列 x[n],它的Z变换是:

X(z) = Σ x[n] · z^(-n)   (n从 -∞ 到 +∞)

嗯,这里要注意,实际工程中我们处理的都是因果序列(n<0时x[n]=0),所以求和通常从n=0开始。

你可能会问:为什么要搞出个Z变换?

我个人的理解是这样的:连续系统我们用拉普拉斯变换,把微分方程变成代数方程。离散系统呢?差分方程不好解,Z变换就是干这个的——把差分方程变成代数方程,把卷积变成乘法。

举个例子,一个简单的差分方程:

y[n] = x[n] + 0.5·y[n-1]

做Z变换后变成:

Y(z) = X(z) + 0.5·z^(-1)·Y(z)

整理一下:

Y(z)/X(z) = 1 / (1 - 0.5·z^(-1))

你看,一个差分方程,几行就变成了一个有理分式。这就是Z变换的威力。

我的小技巧: 刚开始学Z变换时,别纠结于收敛域那些理论细节。先把双边Z变换当成一个「查表工具」用起来。常用的几对变换关系背下来,工程上够用了。

3.2 系统函数:滤波器的DNA

系统函数 H(z),就是输出Z变换除以输入Z变换:

H(z) = Y(z) / X(z)

它包含了滤波器的全部信息。我在项目中遇到过很多次,拿到一个滤波器设计,第一件事就是看它的系统函数。为什么?因为从H(z)里,你能直接读出滤波器的结构、稳定性和频率响应。

一般来说,数字滤波器的系统函数可以写成:

H(z) = (b₀ + b₁·z^(-1) + ... + b_M·z^(-M)) / (1 + a₁·z^(-1) + ... + a_N·z^(-N))

这里b系数是前向路径的增益,a系数是反馈路径的增益。如果所有a系数都是0,那就是FIR滤波器;否则就是IIR滤波器。

滤波器类型 系统函数特点 典型应用
FIR 只有零点,没有极点(除原点外) 脉冲压缩、匹配滤波
IIR 既有零点又有极点 杂波抑制、多普勒滤波

你想想看,在雷达信号处理里,为什么FIR和IIR都要用?

我个人习惯是:需要线性相位时用FIR,比如脉冲压缩,相位失真会直接影响距离分辨率。需要高计算效率时用IIR,比如MTI滤波器,用二阶IIR就能达到很好的杂波抑制效果。

3.3 系统函数与频率响应:从Z域到频域

系统函数和频率响应之间是什么关系?

很简单:把z换成e^(jω)就行了

H(e^(jω)) = H(z) |_{z = e^(jω)}

为什么?因为单位圆上的z值正好对应离散时间系统的频率响应。ω从0到π对应0到一半采样频率。

我记得有一次调试一个带通滤波器,仿真时频率响应看着挺好,但实际测试时通带边缘总是不对。后来发现,是我把采样频率搞错了——Z变换里的频率归一化,一定要跟实际采样率对应起来。

避坑指南: 我曾经在FPGA上实现一个滤波器,仿真和实测差了10dB。查了两天才发现,是系统函数的系数量化精度不够。Z变换的系数在FPGA里要用定点数表示,位数不够就会引入误差。建议至少保留16位精度。

3.4 零极点分析:一眼看穿滤波器性能

零极点分析,是我最喜欢用的工具。为什么?因为它直观。

系统函数H(z)的分子根是零点,分母根是极点。在z平面上画出来:

  • 零点用「○」表示——信号被抑制的频率点
  • 极点用「×」表示——信号被增强的频率点

从零极点图,你能直接读出:

  1. 稳定性:所有极点必须在单位圆内。只要有一个极点在单位圆外,系统就不稳定。
  2. 频率响应:从单位圆上某点走到零点的距离越短,该频率衰减越大;走到极点的距离越短,该频率增益越大。
  3. 滤波器类型:零点在单位圆上的,通常是陷波滤波器;极点在单位圆附近的,通常是谐振器。

举个例子,一个简单的MTI滤波器:

H(z) = 1 - z^(-1)

它在z=1处有一个零点。z=1对应直流分量(ω=0),所以这个滤波器能抑制直流和慢速杂波。我在做动目标检测时,经常用这种结构。

核心要点: 零极点分析是滤波器设计的「捷径」。一个熟练的工程师,看一眼零极点图,就能大致判断出滤波器的幅频响应和相频响应。这比算几百个点的FFT快多了。

3.5 实战经验:零极点配置的注意事项

在实际工程中,零极点配置有几个坑要避开:

  • 极点不要离单位圆太近:虽然理论上在单位圆内就稳定,但太靠近单位圆,系数量化误差可能导致极点「漂」到圆外。我一般留0.05的余量。
  • 零点可以放在单位圆上:比如陷波滤波器,零点放在单位圆上能实现无限深的陷波。但要注意,实际实现时由于量化误差,陷波深度是有限的。
  • 高阶滤波器要分解成二阶节:直接实现一个高阶IIR滤波器,系数灵敏度太高。我习惯用级联型或并联型,每个二阶节独立调整。

嗯,说到这儿,我想起一个项目。当时要设计一个64阶的带通滤波器,直接实现时,系数稍微变一点,频率响应就面目全非。后来改成16个二阶节级联,问题就解决了。这就是零极点分解在实际中的应用。

3.6 小结

Z变换和系统函数,是数字滤波器设计的理论基础。掌握了它们,你就能:

  • 从差分方程直接写出系统函数
  • 从系统函数画出零极点图
  • 从零极点图判断滤波器的频率响应和稳定性
  • 在实际工程中避免常见的实现陷阱

下一章,我们会把这些理论用到实际滤波器设计中。到时候你会发现,今天学的这些,全是「干货」。

课后练习: 找一个你常用的滤波器,写出它的系统函数,画出零极点图,然后跟它的频率响应对比一下。你会发现,零极点图和频率响应之间,真的是一一对应的。