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 知识体系:抗混叠滤波器设计流程

下面这张图,是我自己总结的设计流程。每次做传感器前端,我都会走一遍这个流程。

抗混叠滤波器设计流程 抗混叠滤波器设计流程 确定ADC采样率 f_s f_c ≤ 0.4 × f_s 选择阶数:一阶/二阶 一阶RC:-20dB/十倍频 二阶有源:-40dB/十倍频 计算R、C值 选择拓扑,计算R、C 仿真验证 + 实物测试 提示:实物测试时,用信号发生器扫频,确认-3dB点是否与设计值一致

4.7 实物测试:别光靠仿真

仿真软件里跑得再好,不上板子测一测,我心里不踏实。我习惯的做法是:

  1. 信号发生器扫频:从10Hz到10倍截止频率,记录输出幅度。
  2. 确认-3dB点:找到输出幅度下降到输入幅度的0.707倍时的频率。
  3. 检查滚降斜率:二阶滤波器在过渡带应该是-40dB/十倍频,差太多就要查元件了。
  4. 带内平坦度:巴特沃斯在通带内应该基本平坦,如果有明显起伏,检查Q值。

警告:千万别用万用表测滤波器的频率响应。万用表只能测直流或极低频。老老实实用示波器或者频谱分析仪。我见过有人用万用表测1kHz信号的幅度,读数完全不准。

好了,抗混叠滤波器这块,核心就是这些。记住:截止频率留余量,二阶起步,用C0G电容,上板子实测。做到这四点,你的ADC采样数据会干净很多。