二、陷波滤波器:原理、类型(FIR/IIR)与频域特性分析

聊到伺服减振,陷波滤波器绝对是个绕不开的家伙。我刚开始调伺服那会儿,遇到机械共振,第一反应就是降增益。结果呢?响应慢了,干活效率低了,还被产线师傅吐槽“这机器跟没吃饭一样”。后来才明白,与其把整个系统的带宽砍掉,不如精准地“切掉”那个共振峰——这就是陷波滤波器干的事。

2.1 陷波滤波器的核心原理

说白了,陷波滤波器就是一个“定向狙击手”。它只针对某个特定频率的信号进行衰减,其他频率的信号基本不受影响。你想想看,机械共振通常就发生在那么一两个频率点上,比如800Hz或者1.2kHz。我们没必要把整个低频段都压下去,对吧?

它的传递函数长这样:

H(s) = (s² + ω₀²) / (s² + (ω₀/Q)·s + ω₀²)

这里ω₀就是你要干掉的那个中心频率,Q值决定了这个“坑”有多宽。Q值越大,坑越窄,选择性越好;Q值越小,坑越宽,但会把旁边的频率也带歪。

关键点:陷波深度通常用dB表示。比如-20dB的陷波,意味着该频率的幅值被衰减到原来的1/10。我在项目里见过有人把陷波深度设到-60dB,结果相位裕度崩了,系统直接振荡——嗯,过犹不及。

2.2 FIR与IIR:两种实现路径

数字域里实现陷波,主要有两条路:FIR和IIR。我个人的习惯是,能上IIR就上IIR,除非有特殊要求。

2.2.1 IIR陷波滤波器

IIR(无限脉冲响应)滤波器,它的特点是“有反馈”。计算量小,效率高,用很少的阶数就能实现很深的陷波。我最早在TI的DSP上做陷波,一个二阶IIR就搞定了800Hz的共振,CPU占用率几乎可以忽略。

一个典型的二阶IIR陷波差分方程:

y[n] = b₀·x[n] + b₁·x[n-1] + b₂·x[n-2] - a₁·y[n-1] - a₂·y[n-2]

系数怎么算?嗯,这里有个标准公式,我直接给你:

设中心频率 f₀,采样率 fs,陷波带宽 BW
则:
ω₀ = 2π·f₀/fs
α = sin(ω₀)·sinh( (BW/2)·ln(2) / (sin(ω₀)·2) )

b₀ =  1
b₁ = -2·cos(ω₀)
b₂ =  1
a₀ =  1 + α
a₁ = -2·cos(ω₀)
a₂ =  1 - α

// 最后归一化:
b₀ /= a₀, b₁ /= a₀, b₂ /= a₀
a₁ /= a₀, a₂ /= a₀

警告:IIR有反馈,意味着它可能不稳定。尤其是当Q值设得特别高(比如Q>20)时,系数量化误差可能导致滤波器“自激”。我曾经在16位定点DSP上吃过这个亏,滤波器直接啸叫了。后来改用双精度或者加个饱和处理才搞定。

2.2.2 FIR陷波滤波器

FIR(有限脉冲响应)滤波器,没有反馈,天生稳定。但代价是什么?阶数高。要做一个同样深度的陷波,FIR可能需要几十甚至上百阶,计算量是IIR的几十倍。

FIR的优点是线性相位。什么意思?就是信号经过滤波器后,不同频率的延迟是一样的。这在某些对波形形状有严格要求的场合很重要。比如我做激光切割的轨迹控制时,相位失真会导致拐角过切,那时候我就不得不用FIR。

一个简单的FIR陷波设计思路(窗函数法):

1. 确定理想陷波频率响应 Hd(ω)
2. 做IFFT得到无限长脉冲响应 hd[n]
3. 加窗截断(汉明窗、布莱克曼窗等)
4. 得到有限长系数 h[n]

小技巧:如果你不确定用FIR还是IIR,先问自己三个问题:① 相位是否敏感?② 计算资源够不够?③ 稳定性有没有风险?如果①②③的回答是“否、是、是”,那就无脑选IIR。

2.3 频域特性分析

我们来看看陷波滤波器在频域里到底长什么样。我习惯用波特图来观察,幅频和相频两条曲线,信息量很大。

2.3.1 幅频特性

幅频曲线在中心频率f₀处会有一个“深坑”。这个坑的深度由陷波深度决定,坑的宽度由Q值决定。我一般这样看:

  • Q=1:坑比较宽,-3dB带宽大约为f₀的70%。适合抑制宽频带的谐振。
  • Q=10:坑很窄,-3dB带宽大约为f₀的7%。适合精准打击单一频率。
  • Q=0.5:坑非常宽,几乎变成了低通滤波器。一般不这么用。

这里我画了一张图,帮你直观理解:

不同Q值下的陷波滤波器幅频特性 0.1f₀ f₀ 10f₀ 0 dB -20 dB -40 dB Q=0.5 Q=5 Q=20 f₀

从图上你能看到,Q值越大,陷波越“尖锐”。但注意,Q值太大时,相位变化也会非常剧烈,这在闭环系统里可能引发新的问题。

2.3.2 相频特性

相频曲线在陷波频率附近会有一个“跳变”。IIR陷波的相位跳变是不可避免的,而且Q值越高,跳变越陡。这个相位跳变会引入群延迟,说白了就是信号经过滤波器后,不同频率的“到达时间”不一样。

我记得有一次调一个高速贴片机,Z轴在1.2kHz有个共振。我用IIR陷波把它压下去了,结果发现位置环的相位裕度从45°掉到了20°。系统虽然不共振了,但开始出现低频抖动。后来我不得不把陷波深度从-30dB降到-15dB,才在减振和稳定性之间找到平衡。

经验之谈:陷波滤波器不是万能的。它解决的是“特定频率的共振”,而不是“系统的刚度不足”。如果你发现系统在多个频率都有共振,或者共振频率随着负载变化而漂移,那就要考虑是不是机械结构本身有问题了。我曾经在一个项目里,花了三天调陷波参数,最后发现是联轴器松了——拧紧螺丝,万事大吉。

2.4 实际应用中的参数整定

在实际的伺服驱动器里,陷波滤波器通常有这几个参数需要你设置:

参数 含义 典型范围 我的建议
中心频率 你要抑制的共振频率 10Hz ~ 5000Hz 用FFT扫频确定,别靠耳朵听
陷波深度 衰减量,单位dB -10dB ~ -40dB 从-15dB开始试,不够再加
Q值 带宽/选择性 0.5 ~ 20 先设5,看效果再调
滤波器类型 FIR或IIR IIR为主 除非相位敏感,否则用IIR

整定步骤(我自己的习惯):

  1. 先做一次频率响应分析(扫频),找到共振峰的位置和幅值。
  2. 把陷波中心频率对准共振峰,深度设-15dB,Q值设5。
  3. 观察系统是否稳定。如果稳定,逐步增加深度,直到共振被抑制。
  4. 检查相位裕度。如果低于30°,适当降低Q值或深度。
  5. 做一次阶跃响应测试,看是否有振铃或过冲。

嗯,这里要特别提醒一点:不要同时开多个陷波滤波器。我见过有人一口气开了四个陷波,结果系统相位曲线变得跟心电图一样,根本稳不住。一般来说,一个系统最多用两个陷波,一个对付低频共振,一个对付高频共振。再多,就该检查机械设计了。

最后说一句,陷波滤波器是个好工具,但它不是银弹。它帮你“切除”了共振,但并没有“治愈”共振。真正的好系统,是机械刚性好、共振点少、阻尼足够。滤波器只是最后的补救措施。我在做方案评审时,如果看到有人一上来就计划用三个陷波,我通常会建议他先回去把机械结构加固一下。

总结一下:陷波滤波器 = 精准打击 + 有限副作用。IIR效率高但要注意稳定性,FIR稳定但计算量大。整定时从浅到深、从宽到窄,时刻盯着相位裕度。记住,滤波器是“药”,不是“饭”。


公众号:蓝海资料掘金营,微信deep3321