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图说清楚

下面这张图总结了滤波器选型的核心逻辑。我把它画成了决策流程,方便你对照自己的场景。

滤波器选型决策流程 噪声需要抑制吗? 噪声频率 < 10×带宽? 是 → 用巴特沃斯 通带平坦,相位延迟可控 否 → 用切比雪夫 过渡带更陡,注意相位裕度 检查相位裕度损失 截止频率 > 3~5倍带宽 选择纹波规格 控制回路用 ≤1dB 实测验证相位裕度 提示:无论选哪种滤波器,最终都要用扫频或阶跃响应验证相位裕度 > 30°

4.6 实际调参建议

纸上谈兵没意思,说点实际的。我在调伺服驱动器时,滤波器参数通常按以下步骤来:

  1. 先不加滤波器,测出系统的穿越频率和相位裕度。这是基准线。
  2. 分析噪声频谱。用示波器或ADC采样做FFT,找到噪声的主要频段。
  3. 初选滤波器类型和截止频率。如果噪声频率离穿越频率很远(10倍以上),巴特沃斯就够了。如果很近,考虑切比雪夫,但要预留更多相位裕度。
  4. 仿真验证。在MATLAB或Python里把滤波器加进去,看伯德图。确保穿越频率处的相位滞后不超过20°~30°。
  5. 实测。上电后先跑小信号阶跃,看有没有振铃。有振铃就说明相位裕度不够,要么提高截止频率,要么换滤波器类型。

一个小技巧:如果你不确定选巴特沃斯还是切比雪夫,可以先上巴特沃斯。它的相位特性更温和,系统不容易“翻车”。等系统稳定了,再根据噪声抑制效果决定要不要换成切比雪夫。

4.7 避坑指南

最后分享几个我亲身踩过的坑:

  • 别把滤波器截止频率设得太接近穿越频率。我曾经为了滤掉一个1.2kHz的噪声,把截止频率设在1.5kHz,结果系统在1kHz附近开始振荡。后来把截止频率提到3kHz,虽然噪声没完全滤掉,但系统稳定了。
  • 注意数字滤波器的离散化误差。采样频率太低时,双线性变换的频率 warping 效应会把截止频率“拉偏”。我建议采样频率至少是截止频率的20倍以上。
  • 切比雪夫滤波器的纹波会放大某些频率的噪声。如果噪声频率正好落在纹波峰值处,幅值反而会被放大。所以用切比雪夫之前,一定要确认噪声频谱不落在纹波频段。
  • 多级滤波器慎用。两个二阶滤波器串联,相位延迟是叠加的。我见过有人用三个二阶滤波器串联,结果系统相位裕度直接归零。如果必须用高阶滤波,考虑直接设计四阶滤波器,而不是两个二阶串联。

嗯,关于二阶巴特沃斯和切比雪夫滤波器,今天就聊到这儿。记住一句话:滤波器是工具,不是万能药。选型时多想想相位延迟,系统会感谢你的。