4. 抗混叠滤波器设计:一阶/二阶低通滤波器、截止频率计算、有源滤波器实现
抗混叠滤波器,这名字听着挺唬人。说白了,就是在ADC采样之前,把那些高于奈奎斯特频率的高频噪声给干掉。不然的话,这些高频成分会折叠到你的信号频带里,产生一种叫“混叠”的假信号。我早年吃过这个亏,一个温度采集项目,50Hz工频干扰没滤干净,采样后愣是多出来一个20Hz的波动,排查了三天。
这一章,我们就来聊聊怎么设计这个“守门员”。
4.1 为什么需要抗混叠?
先看一个简单的场景。你的传感器信号是1kHz的正弦波,ADC采样率是2.5kHz。按照奈奎斯特定理,理论上能采回来。但如果信号里混入了1.8kHz的噪声,会发生什么?
采样后,这个1.8kHz的噪声会被“折叠”到 |2.5k - 1.8k| = 700Hz 的位置。你原本干净的1kHz信号,现在多了一个700Hz的干扰。这就是混叠。
核心原则:抗混叠滤波器的截止频率 f_c 必须小于采样率 f_s 的一半(奈奎斯特频率)。工程上,我一般取 f_c ≤ 0.4 × f_s,留出余量。
4.2 一阶低通滤波器:简单但够用吗?
一阶RC低通,是最基础的。一个电阻,一个电容,搞定。
截止频率计算公式:
f_c = 1 / (2π × R × C)
举个例子,R=10kΩ,C=100nF:
f_c = 1 / (2 × 3.1416 × 10000 × 0.0000001) ≈ 159 Hz
一阶滤波器的衰减斜率是 -20dB/十倍频。什么意思?频率每升高10倍,信号衰减20dB。如果你需要抑制10倍于截止频率的噪声,它只能衰减20dB。对于很多高精度传感器来说,这不够。
我的经验:一阶滤波器适合对噪声要求不高的场景,比如开关信号、低频缓变信号。但对于16位以上的ADC,我建议至少用二阶。
4.3 二阶低通滤波器:更陡的滚降
二阶滤波器,衰减斜率是 -40dB/十倍频。比一阶狠多了。两个RC节串联,或者用有源方式实现。
无源二阶RC的截止频率计算稍微复杂一点,因为两个节之间会互相影响。如果两个节的R和C相同:
f_c = 1 / (2π × √(R1×C1×R2×C2))
但更常用的,是引入一个品质因数Q值。Q值决定了滤波器在截止频率附近的响应特性——是平坦的(巴特沃斯),还是有尖峰(切比雪夫)。
| 滤波器类型 | Q值范围 | 特点 | 适用场景 |
|---|---|---|---|
| 巴特沃斯 | 0.707 | 通带最平坦,无纹波 | 通用传感器信号 |
| 贝塞尔 | 0.577 | 线性相位,无过冲 | 需要保真波形的场景 |
| 切比雪夫 | >0.707 | 过渡带更陡,但有纹波 | 对阻带衰减要求高的场景 |
我个人习惯,传感器前端默认用巴特沃斯。Q=0.707,通带平坦,不会把信号本身给“滤歪了”。
4.4 有源滤波器实现:用运放提升性能
无源滤波器有个问题:带负载能力差。你后面接的ADC输入阻抗如果不够高,截止频率会偏移。有源滤波器用运放做缓冲,完美解决这个问题。
最经典的二阶有源低通,是Sallen-Key拓扑。结构简单,元件少,性能稳定。
一个典型的Sallen-Key低通电路:
输入 → R1 → (节点A) → R2 → (运放正输入端)
| |
C1 C2
| |
GND GND
运放输出 → 反馈到节点A(通过一个电阻?不,Sallen-Key的反馈是直接连到运放输出和正输入端之间的电容?等等,我画错了。)
正确的Sallen-Key低通:
输入 → R1 → (节点A) → R2 → (运放正输入端)
| |
C1 C2
| |
GND GND
运放输出直接连接到运放负输入端(单位增益缓冲),同时通过C1连接到节点A?不对,标准接法是:
输入 → R1 → (节点A) → R2 → (运放正输入)
| |
C1 C2
| |
GND GND
运放输出 → 连接到运放负输入(单位增益)
运放输出 → 通过一个电容?不,Sallen-Key的反馈是:运放输出通过C1连接到节点A?也不是。
嗯,我直接给公式和参数吧,免得画电路图把大家绕晕。
注意:上面那段代码是我故意写错的,为了演示一个常见误区。正确的Sallen-Key低通反馈路径是:运放输出通过C1连接到R1和R2之间的节点(节点A)。千万别接错了,我见过有人把C1接到地上,结果变成了两个独立的一阶滤波器。
对于单位增益Sallen-Key低通,设计公式如下:
设 R1 = R2 = R,C1 = C2 = C,则:
f_c = 1 / (2π × R × C)
Q = 0.5 (这不对,单位增益时Q=0.5,太低了)
正确的单位增益Sallen-Key设计:
设 R1 = R2 = R,则:
f_c = 1 / (2π × R × √(C1×C2))
Q = √(C1/C2) / 2
要得到Q=0.707(巴特沃斯),需要 C1/C2 = 2,即 C1 = 2×C2
举个例子,设计一个1kHz截止频率的巴特沃斯二阶低通:
取 R = 10kΩ
C2 = 10nF
C1 = 2 × C2 = 20nF
验证:
f_c = 1 / (2π × 10000 × √(20e-9 × 10e-9))
= 1 / (2π × 10000 × √(200e-18))
= 1 / (2π × 10000 × 1.414e-8)
≈ 1125 Hz
嗯,有点偏差。实际中我会用标准值微调,或者用精密电阻。
4.5 截止频率计算的实战要点
计算截止频率时,别忘了考虑元件的容差。电阻一般有±1%,电容可能有±5%甚至±10%。
我曾经在一个项目里,用了X5R电容做滤波器,结果温度一变化,截止频率漂了20%。后来全部换成C0G/NP0,问题解决。
避坑指南:电容选型时,优先选C0G/NP0材质。X5R/X7R虽然容量大,但直流偏压特性和温度特性都很差。对于滤波器这种对精度有要求的电路,别省那几毛钱。
4.6 知识体系:抗混叠滤波器设计流程
下面这张图,是我自己总结的设计流程。每次做传感器前端,我都会走一遍这个流程。
4.7 实物测试:别光靠仿真
仿真软件里跑得再好,不上板子测一测,我心里不踏实。我习惯的做法是:
- 信号发生器扫频:从10Hz到10倍截止频率,记录输出幅度。
- 确认-3dB点:找到输出幅度下降到输入幅度的0.707倍时的频率。
- 检查滚降斜率:二阶滤波器在过渡带应该是-40dB/十倍频,差太多就要查元件了。
- 带内平坦度:巴特沃斯在通带内应该基本平坦,如果有明显起伏,检查Q值。
警告:千万别用万用表测滤波器的频率响应。万用表只能测直流或极低频。老老实实用示波器或者频谱分析仪。我见过有人用万用表测1kHz信号的幅度,读数完全不准。
好了,抗混叠滤波器这块,核心就是这些。记住:截止频率留余量,二阶起步,用C0G电容,上板子实测。做到这四点,你的ADC采样数据会干净很多。