4. 高阶滤波器设计:二阶巴特沃斯、切比雪夫滤波器的应用场景,以及相位延迟对控制的影响
说到滤波器,很多做控制的同行第一反应就是“低通滤波嘛,把高频噪声滤掉就行了”。但实际调参时你会发现,滤波器选不对,系统反而抖得更厉害。我见过不少项目,明明传感器噪声不大,加上滤波器后系统却开始振荡——问题就出在相位延迟上。
今天咱们就聊聊二阶巴特沃斯和切比雪夫滤波器。这两种滤波器在控制回路里很常见,但它们的脾气完全不同。选对了,系统稳如磐石;选错了,相位延迟会给你“惊喜”。
核心观点:滤波器不是越陡越好。控制回路里,相位延迟往往比幅频衰减更致命。
4.1 为什么需要高阶滤波器?
一阶RC低通滤波器,简单吧?但它的衰减斜率只有-20dB/dec。什么意思呢?如果噪声频率是截止频率的10倍,幅值只衰减到1/10。在很多工业场景里,这远远不够。
举个例子。电机电流采样里混入了PWM开关噪声,频率是20kHz。你的截止频率设在2kHz,一阶滤波只能把噪声压到原来的1/10。如果噪声幅值本身有1A,剩下0.1A依然会让电流环抖动。这时候就需要二阶甚至更高阶的滤波器,把衰减斜率提到-40dB/dec以上。
但代价是什么?相位延迟。一阶滤波在截止频率处有45°相位滞后,二阶直接翻倍到90°。你想想看,控制回路里多出90°相位滞后,相位裕度还够吗?
4.2 二阶巴特沃斯滤波器
巴特沃斯滤波器的特点,说白了就是“通带最平坦”。在截止频率以内,幅频响应几乎是一条直线,没有纹波。这在控制里非常讨喜——你不会因为滤波器本身引入额外的幅值波动。
它的传递函数长这样:
H(s) = ωₙ² / (s² + 2ζωₙs + ωₙ²)
对于二阶巴特沃斯,阻尼比ζ固定为0.707。这个值很讲究——既保证了通带平坦,又不会有过大的超调。
离散化之后,我常用的系数计算方式如下(双线性变换法,预畸变处理):
// 二阶巴特沃斯低通滤波器系数计算
// fc: 截止频率(Hz), fs: 采样频率(Hz)
float compute_butterworth_coeffs(float fc, float fs, float coeffs[5]) {
float T = 1.0f / fs;
float w0 = 2.0f * M_PI * fc;
// 预畸变
float wd = (2.0f / T) * tanf(w0 * T / 2.0f);
float a0 = wd * wd;
float a1 = 2.0f * 0.707f * wd;
float a2 = 1.0f;
float b0 = a0;
float b1 = 2.0f * a0;
float b2 = a0;
float den = a0 + a1/T + a2/(T*T);
coeffs[0] = (b0 + b1/T + b2/(T*T)) / den; // b0'
coeffs[1] = (2*b0 - 2*b2/(T*T)) / den; // b1'
coeffs[2] = (b0 - b1/T + b2/(T*T)) / den; // b2'
coeffs[3] = (2*a0 - 2*a2/(T*T)) / den; // a1'
coeffs[4] = (a0 - a1/T + a2/(T*T)) / den; // a2'
}
我的习惯:在电机电流环里,如果截止频率选在开关频率的1/10到1/5之间,巴特沃斯是首选。通带平坦意味着基波幅值几乎不衰减,电流环增益不会因为滤波而“缩水”。
4.3 切比雪夫滤波器
切比雪夫滤波器就不一样了。它允许通带内有纹波,换来的好处是——过渡带更陡。同样的阶数,切比雪夫的衰减斜率比巴特沃斯更“犀利”。
传递函数形式类似,但阻尼比不再固定:
H(s) = ωₙ² / (s² + 2ζωₙs + ωₙ²)
// 切比雪夫滤波器的ζ由纹波系数ε决定
// ζ = 1 / sqrt(1 + ε²) (对于二阶,近似关系)
纹波越大,过渡带越陡,但通带内的幅值波动也越大。常见的纹波规格有0.5dB、1dB、3dB。我建议控制回路里别用超过1dB的纹波,否则幅值波动会干扰增益整定。
| 滤波器类型 | 通带特性 | 过渡带陡度 | 相位延迟(@fc) | 典型应用 |
|---|---|---|---|---|
| 一阶RC | 平坦 | -20dB/dec | 45° | 简单噪声抑制 |
| 二阶巴特沃斯 | 最平坦 | -40dB/dec | 90° | 电流环、速度环 |
| 二阶切比雪夫(0.5dB) | 轻微纹波 | -40~-50dB/dec | 90°~100° | 位置环、高噪声环境 |
| 二阶切比雪夫(3dB) | 明显纹波 | -50~-60dB/dec | 100°~120° | 信号检测(非控制回路) |
从表格能看出来,切比雪夫的相位延迟比巴特沃斯更大。这是它的代价。
4.4 相位延迟对控制的影响
这才是今天的重点。滤波器引入的相位延迟,会直接吃掉你的相位裕度。
假设你的系统在穿越频率处原本有60°相位裕度,加上一个二阶巴特沃斯滤波器(截止频率等于穿越频率),相位裕度直接降到-30°——系统必振荡。
为什么会这样?因为滤波器在穿越频率附近贡献了约90°的相位滞后。如果截止频率选得比穿越频率高很多,比如高5倍以上,那相位滞后会小一些,但噪声抑制效果也打折了。
我曾经踩过的坑:在一个伺服驱动器项目里,为了抑制编码器的高频噪声,我在速度环里加了一个二阶巴特沃斯滤波器,截止频率设在200Hz。结果速度环在150Hz附近开始啸叫。查了半天才发现,速度环的穿越频率是180Hz,滤波器在180Hz处贡献了约85°的相位滞后,直接把相位裕度从50°拉到了-35°。后来我把截止频率提高到800Hz,噪声虽然没完全滤掉,但系统至少稳定了。
所以,滤波器截止频率的选择有个经验法则:
- 电流环:截止频率 > 5倍电流环带宽
- 速度环:截止频率 > 3倍速度环带宽
- 位置环:截止频率 > 2倍位置环带宽
当然,这只是经验值。具体还要看你的噪声频谱和系统刚性。
4.5 如何选择?一张SVG图说清楚
下面这张图总结了滤波器选型的核心逻辑。我把它画成了决策流程,方便你对照自己的场景。
4.6 实际调参建议
纸上谈兵没意思,说点实际的。我在调伺服驱动器时,滤波器参数通常按以下步骤来:
- 先不加滤波器,测出系统的穿越频率和相位裕度。这是基准线。
- 分析噪声频谱。用示波器或ADC采样做FFT,找到噪声的主要频段。
- 初选滤波器类型和截止频率。如果噪声频率离穿越频率很远(10倍以上),巴特沃斯就够了。如果很近,考虑切比雪夫,但要预留更多相位裕度。
- 仿真验证。在MATLAB或Python里把滤波器加进去,看伯德图。确保穿越频率处的相位滞后不超过20°~30°。
- 实测。上电后先跑小信号阶跃,看有没有振铃。有振铃就说明相位裕度不够,要么提高截止频率,要么换滤波器类型。
一个小技巧:如果你不确定选巴特沃斯还是切比雪夫,可以先上巴特沃斯。它的相位特性更温和,系统不容易“翻车”。等系统稳定了,再根据噪声抑制效果决定要不要换成切比雪夫。
4.7 避坑指南
最后分享几个我亲身踩过的坑:
- 别把滤波器截止频率设得太接近穿越频率。我曾经为了滤掉一个1.2kHz的噪声,把截止频率设在1.5kHz,结果系统在1kHz附近开始振荡。后来把截止频率提到3kHz,虽然噪声没完全滤掉,但系统稳定了。
- 注意数字滤波器的离散化误差。采样频率太低时,双线性变换的频率 warping 效应会把截止频率“拉偏”。我建议采样频率至少是截止频率的20倍以上。
- 切比雪夫滤波器的纹波会放大某些频率的噪声。如果噪声频率正好落在纹波峰值处,幅值反而会被放大。所以用切比雪夫之前,一定要确认噪声频谱不落在纹波频段。
- 多级滤波器慎用。两个二阶滤波器串联,相位延迟是叠加的。我见过有人用三个二阶滤波器串联,结果系统相位裕度直接归零。如果必须用高阶滤波,考虑直接设计四阶滤波器,而不是两个二阶串联。
嗯,关于二阶巴特沃斯和切比雪夫滤波器,今天就聊到这儿。记住一句话:滤波器是工具,不是万能药。选型时多想想相位延迟,系统会感谢你的。