4. 数字陷波滤波器设计:双线性变换法、脉冲响应不变法、滤波器阶数选择

好,咱们进入正题。前面聊了模拟陷波滤波器的设计,但实际运动控制里,我们用的都是数字控制器。所以,怎么把模拟滤波器变成数字的,这一步很关键。

说白了,就是要把连续域的传递函数 H(s),映射到离散域的传递函数 H(z)。我这些年用过的方法里,最常用的就两种:双线性变换法脉冲响应不变法。另外,滤波器阶数怎么选,也是个坑,我踩过。

4.1 双线性变换法:我的首选

我个人习惯,90% 的场景都用双线性变换法。为什么?因为它没有频率混叠的问题。

双线性变换的公式很简单:

s = (2/T) * (1 - z⁻¹) / (1 + z⁻¹)

其中 T 是采样周期。你把模拟滤波器的 H(s) 里的 s 替换成这个表达式,一通化简,就得到 H(z) 了。

举个例子,一个二阶模拟陷波器:

H(s) = (s² + ω₀²) / (s² + 2ζω₀s + ω₀²)

代入双线性变换后,得到数字滤波器系数。我一般用 MATLAB 的 bilinear 函数直接算,省事。

关键点:双线性变换会把整个 s 平面映射到 z 平面的单位圆内。所以模拟频率和数字频率之间有个非线性关系,叫频率预畸变。你得先做预畸变,再设计滤波器。

频率预畸变的公式:

ω_analog = (2/T) * tan(ω_digital * T / 2)

嗯,这里要注意:如果你陷波频率是 50Hz,采样率 1000Hz,那数字角频率就是 2π*50/1000 = 0.1π。预畸变后的模拟角频率要重新算一下。

我的经验:双线性变换法设计的数字滤波器,在低频段(比如陷波频率在采样率的 1/10 以下)效果非常好。高频段会有频率偏移,但运动控制的谐振通常在中低频,所以够用了。

4.2 脉冲响应不变法:慎用

脉冲响应不变法,说白了就是让数字滤波器的单位脉冲响应,等于模拟滤波器单位脉冲响应的采样值。

听起来很直观对吧?但有个大问题:频率混叠

模拟滤波器的频率响应不是带限的,采样后高频分量会折叠到低频段。陷波器本身就是要衰减特定频率,如果混叠了,你都不知道衰减的是哪个频率。

我曾经在一个项目中试过脉冲响应不变法,结果陷波频率偏了 3Hz,伺服系统反而抖得更厉害。后来换成双线性变换法,问题就解决了。

避坑指南:除非你的采样率远高于陷波频率(比如 10 倍以上),否则别用脉冲响应不变法。我一般只在采样率 > 20 倍陷波频率时才考虑它。

脉冲响应不变法的实现步骤:

  1. 对 H(s) 做部分分式展开
  2. 对每个极点,用 z = e^(sT) 映射到 z 平面
  3. 合并得到 H(z)

你看,步骤比双线性变换法还麻烦,效果还不好。所以,我个人建议:忘掉脉冲响应不变法,用双线性变换法就够了

4.3 滤波器阶数选择:不是越高越好

很多新手觉得,阶数越高,陷波效果越好。其实不是这么回事。

阶数越高,带来的问题越多:

  • 相位滞后更大:高阶滤波器会引入更大的相位延迟,影响系统稳定性
  • 计算量增加:每个采样周期要多算几次乘加,对低端 MCU 是负担
  • 数值稳定性差:高阶滤波器对系数精度敏感,容易发散

我一般遵循这个原则:

应用场景 推荐阶数 说明
单谐振点抑制 2 阶 最常用,效果足够
宽频带衰减 4 阶 两个二阶串联,或直接设计四阶
多谐振点 多个 2 阶串联 每个谐振点用一个二阶陷波器
高精度要求 4 阶 配合自适应算法使用

你想想看,运动控制里的谐振,通常就一两个频率点。用二阶陷波器,Q 值调高一点,衰减深度就够了。没必要上六阶、八阶。

我的建议:先从二阶开始试。如果效果不理想,再考虑四阶。千万别一上来就搞高阶,调试起来很痛苦。

4.4 实战中的选择逻辑

好了,说了这么多,到底怎么选?我总结一下我的决策流程:

  1. 确定陷波频率和带宽:通过频谱分析或扫频测试得到
  2. 选择设计方法:无脑选双线性变换法,记得做频率预畸变
  3. 选择阶数:默认二阶,不够再加
  4. 实现方式:用直接 II 型结构,系数量化误差小
  5. 验证:在仿真里看幅频响应和相频响应,确认没问题再上机

我曾经在一个项目中,谐振频率是 120Hz,采样率 2000Hz。我用双线性变换法设计了一个二阶陷波器,Q=10,衰减深度 -30dB。上机测试,谐振峰直接压平了,系统稳定运行。

但如果当时我用脉冲响应不变法,或者选了四阶,可能就要多花两天时间调试。所以,选对方法,事半功倍。

小技巧:设计完数字滤波器后,用 freqz 函数看一下幅频响应。如果陷波频率点有偏差,检查一下预畸变有没有做对。

4.5 本章知识体系

下面这张图,是我自己画的,把本章的核心逻辑串起来了。你看一眼,应该就能明白整个设计流程。

数字陷波滤波器设计流程 模拟陷波器 H(s) 选择设计方法 双线性变换法(推荐) vs 脉冲响应不变法 频率预畸变 ω_analog = (2/T) * tan(ω_digital * T / 2) 阶数选择 二阶(默认)→ 四阶(必要时) 数字陷波器 H(z) 注意事项 • 双线性变换无混叠 • 脉冲响应不变法慎用 • 二阶足够时别用高阶 • 验证幅频和相频响应 • 注意系数量化误差 • 上机前先仿真

这张图把整个流程串起来了:从模拟陷波器出发,选择设计方法,做频率预畸变,选阶数,最后得到数字陷波器。每一步都有坑,但按这个流程走,基本不会出大问题。

专注资料整理