1. 从一个反直觉的现象说起:采样频率够了,为什么波形还是错的
很多刚接触ADC采样的朋友都有过这样的经历:按照采样定理,信号最高频率是1kHz,我采样率给到10kHz,理论上绰绰有余,结果采回来的波形乱七八糟,FFT一分析,频谱上多出一堆原本不存在的频率成分。更诡异的是,你把采样率继续往上提,提到100kHz,那些鬼影频率还在,只是位置变了。
问题出在哪?出在你只满足了采样定理的一半条件。采样定理说的是:采样率必须大于信号最高频率的两倍,这是必要条件,但前提是——进入ADC的信号本身必须是带限的,也就是说,在fs/2以上的频率成分必须已经被清理干净了。如果你没有在ADC前面做这件事,高频噪声和干扰就会在采样过程中被“折叠”到低频区域,和你的有用信号混在一起,再也分不开。
这就是混叠。而抗混叠滤波器,就是放在ADC前面、专门用来干掉这些高频成分的模拟滤波器。它的存在,是采样定理能够成立的前提条件,而不是可选项。
我见过太多项目,ADC前面直接接传感器输出,或者随便放一个RC低通,截止频率拍脑袋定,结果调试的时候发现数据跳得厉害,还以为是软件滤波没做好。实际上,问题在信号进入ADC之前就已经埋下了。
这篇文章,我打算把抗混叠滤波器这件事从头到尾讲清楚。为什么需要它、它怎么工作、怎么选参数、怎么设计电路、实际调试中会遇到什么问题,以及一些我踩过的坑。不管你是做STM32的ADC采集、做音频编解码、做电机电流采样,还是做精密测量,只要涉及模拟信号数字化,这个话题都绕不开。
2. 混叠到底是怎么发生的:从频域折叠到实际危害
2.1 采样在频域里做了什么
要理解混叠,得先理解采样在频域里的本质。时域上,采样就是每隔Ts秒取一个值,相当于把连续信号乘以一个周期冲激串。到了频域,乘法变成卷积,周期冲激串的频谱也是周期冲激串,所以采样后的信号频谱,就是原始信号频谱以fs为周期进行无限复制。
这意味着什么?意味着采样之后,频谱在0到fs/2之间(第一奈奎斯特区)的内容,和fs/2到fs之间的内容,以及fs到3fs/2之间的内容,全部会重叠在一起。如果你原始信号里有一个1.2kHz的成分,采样率是2kHz,那么这个1.2kHz会折叠到2k-1.2k=0.8kHz的位置,和原本0.8kHz的信号完全重叠,你无法区分哪个是真实的0.8kHz,哪个是1.2kHz折叠过来的。
这就是混叠的数学本质:频率高于fs/2的成分,会以fs为轴镜像折叠到第一奈奎斯特区内。折叠后的频率f_alias = |f_signal - n*fs|,其中n取使结果落在0到fs/2之间的整数。
2.2 一个具体的例子:50Hz工频干扰如何毁掉你的数据
假设你在做一个称重传感器信号采集,有用信号带宽0到10Hz,你选了采样率100Hz,理论上fs/2=50Hz,刚好卡在工频干扰的频率上。这时候如果传感器引线上耦合了50Hz的工频干扰,而且没有抗混叠滤波器,会发生什么?
50Hz正好等于fs/2,折叠后落在0Hz,也就是直流。你的称重数据会出现一个缓慢漂移的直流偏置,而且这个偏置会随着工频干扰的幅度变化而变化。你以为是传感器温漂,实际上是混叠。
如果工频是50.5Hz呢?折叠后落在0.5Hz,你的数据会出现一个0.5Hz的周期性波动,看起来像是有个低频振动。你可能会去查机械结构、查减震,但真正的问题在ADC前面。
更隐蔽的情况:如果你的有用信号带宽是0到40Hz,采样率100Hz,那么40Hz到50Hz之间的噪声会折叠到0到10Hz,和你的有用信号重叠。这部分噪声你既看不到原始频率,也无法用数字滤波去掉,因为它已经和信号融为一体了。
2.3 混叠为什么无法用数字滤波补救
很多人会想:我先采样,采完之后用数字滤波器把高频成分滤掉不就行了?不行。因为混叠发生在采样那一刻,高频成分已经折叠到低频了,数字滤波器看到的“低频”里,混杂着真实低频和折叠过来的高频,它无法区分。
数字滤波能做的,是在采样之后对已经混叠的信号做进一步处理,但混叠本身是不可逆的。信息已经丢失了。这就是为什么抗混叠滤波器必须是模拟的,必须放在ADC前面,必须在采样之前就把高频成分干掉。
注意:抗混叠滤波器是模拟滤波器,不是数字滤波器。它的位置在ADC之前,信号链的最末端。任何放在ADC之后的滤波,都无法解决混叠问题。
3. 抗混叠滤波器的核心参数怎么定:截止频率、阶数、滤波器类型
3.1 截止频率:不是随便设的,要和采样率配合
抗混叠滤波器的截止频率fc,决定了哪些频率能通过、哪些被衰减。理论上,fc应该小于等于fs/2,但实际上要考虑两个因素:一是滤波器不是理想的,截止频率之后有一个过渡带,过渡带内衰减不够;二是你要保证在fs/2处的衰减足够大,通常要求至少达到ADC的分辨率对应的信噪比。
举个例子:一个12位ADC,理论信噪比SNR = 6.02*12 + 1.76 ≈ 74dB。这意味着在fs/2处,抗混叠滤波器至少要提供74dB的衰减,才能保证折叠回来的噪声低于ADC的量化噪声。如果滤波器在fs/2处只衰减了40dB,那么混叠噪声就会成为主导,你的12位ADC实际有效位数可能只有7位左右。
所以截止频率的设定,要结合滤波器阶数和fs/2处的衰减要求来算。一阶RC低通在fs/2处的衰减是-20log10(fs/2/fc) dB,二阶是-40log10,n阶是-20n*log10。如果要求74dB衰减,一阶滤波器需要fs/2/fc = 10^(74/20) ≈ 5015,也就是说fc要低到fs/2的1/5000,这显然不现实,因为你的有用信号带宽会被严重压缩。
实际做法是:先确定有用信号带宽f_signal,然后选择滤波器阶数,使得在fs/2处的衰减满足要求,同时fc略大于f_signal。比如有用信号带宽10kHz,采样率100kHz,fs/2=50kHz,要求60dB衰减。二阶滤波器需要50k/fc = 10^(60/40) ≈ 31.6,fc ≈ 1.58kHz,这又太小了,会滤掉有用信号。所以需要更高阶数,比如四阶,50k/fc = 10^(60/80) ≈ 5.62,fc ≈ 8.9kHz,勉强可用。六阶的话,50k/fc = 10^(60/120) ≈ 3.16,fc ≈ 15.8kHz,比较合理。
3.2 阶数选择:在衰减速度和信号保真之间找平衡
阶数越高,过渡带越陡,fs/2处的衰减越大,但代价是电路复杂度、成本、功耗和相位失真都会增加。一阶RC最简单,但衰减太慢;二阶Sallen-Key是常用折中;四阶以上通常用多级级联或者集成滤波器芯片。
我个人的经验是:对于一般12位到16位ADC,如果采样率是信号带宽的5到10倍,二阶到四阶滤波器通常够用。如果采样率只是信号带宽的2到3倍,那至少需要六阶以上,或者考虑过采样技术来降低对抗混叠滤波器的要求。
过采样是一个很实用的技巧:如果你把采样率提高到远高于信号带宽,比如100倍,那么fs/2就很高,抗混叠滤波器的截止频率可以设得比较高,过渡带可以很宽,一阶RC就能满足要求。代价是数据量大,需要数字抽取滤波。很多Σ-Δ ADC就是利用这个原理,内部采样率极高,模拟抗混叠滤波器要求很低。
3.3 滤波器类型:巴特沃斯、切比雪夫、贝塞尔怎么选
巴特沃斯:通带最平坦,没有纹波,过渡带衰减速度中等。适合对通带平坦度要求高的场合,比如音频测量。
切比雪夫:过渡带更陡,但通带有纹波。适合对过渡带要求高、对通带纹波不敏感的场合。
贝塞尔:相位线性度最好,群延迟最平坦。适合对相位失真敏感的应用,比如脉冲信号采集、多通道同步采样。
我一般首选巴特沃斯,因为它的通带特性最“干净”,调试起来心里有底。如果过渡带实在不够,再考虑切比雪夫。贝塞尔用在需要保波形形状的场合,比如采集脉冲或者瞬态信号。
4. 实际电路怎么搭:从分立RC到集成滤波器芯片
4.1 一阶RC:最简单,但别指望它干重活
一阶RC抗混叠滤波器就是一个电阻加一个电容,截止频率fc = 1/(2πRC)。它的优点是简单、便宜、无源、不引入噪声。缺点是衰减太慢,-20dB/十倍频,而且输出阻抗高,直接接ADC可能带不动。
我通常把一阶RC放在ADC驱动运放之后、ADC输入之前,作为最后的“保险”。它的截止频率可以设得比fs/2高一些,主要用来滤掉高频噪声和尖峰,真正的抗混叠任务交给前面的有源滤波器。
提示:ADC输入端的RC,电阻不宜过大,否则会与ADC内部的采样电容形成分压,导致采样精度下降。一般建议R在10Ω到100Ω之间,C根据截止频率计算。具体要看ADC数据手册里的输入阻抗和采样时间要求。
4.2 二阶Sallen-Key:最常用的有源抗混叠方案
Sallen-Key拓扑用两个电阻、两个电容和一个运放,实现二阶低通。它的优点是结构简单、增益可调、输入阻抗高。缺点是Q值对元件容差敏感,高频时运放带宽会成为限制。
设计步骤:先确定fc和Q值。巴特沃斯二阶的Q=0.707。然后选电容C1=C2=C(方便计算),计算电阻。公式是R1 = Q/(2πfcC),R2 = 1/(Q*2πfcC)。实际选值时,先选一个标准电容值,比如1nF,然后算电阻,再取最接近的标准电阻值。
我踩过的坑:Sallen-Key的Q值如果设得太高,通带边缘会出现峰值,反而放大某些频率的噪声。巴特沃斯的0.707是比较稳妥的选择。另外,运放的增益带宽积要足够,至少是fc的10倍以上,否则高频衰减特性会偏离设计。
4.3 开关电容滤波器:可编程,但有陷阱
开关电容滤波器(SCF)用时钟频率控制截止频率,fc = fclk/N,N由芯片型号决定。优点是截止频率可编程,不需要换元件,适合多通道或者需要动态调整的场合。缺点是开关噪声、时钟馈通、混叠风险。
开关电容滤波器本身也是一个采样系统,它的内部开关频率就是时钟频率。如果输入信号里含有接近时钟频率的成分,会在SCF内部产生混叠。所以SCF前面通常还需要一个简单的RC预滤波器,把时钟频率附近的噪声先滤掉。
另外,SCF的时钟如果和ADC采样时钟同源,可能会引入相关性噪声。我一般会把SCF时钟和ADC时钟错开,或者用非整数倍关系,避免噪声在频谱上固定位置堆积。
4.4 集成有源滤波器芯片:省事但要注意匹配
像LTC1562、MAX274这类集成滤波器芯片,内部集成了运放和电阻网络,只需要外接少量电阻设定截止频率和Q值。优点是省事、一致性好、寄生小。缺点是成本高、灵活性差、可能需要双电源。
用这类芯片时,外接电阻的精度直接影响截止频率和Q值。我一般用1%精度的金属膜电阻,温度系数选50ppm/℃以内的。如果截止频率要求很准,还需要用可调电阻或者数字电位器做校准。
5. 调试与排查:那些数据手册不会告诉你的坑
5.1 混叠到底有没有发生,怎么判断
最直接的方法:用一个信号发生器,从低频往高频扫,同时观察ADC采回来的频谱。如果某个频率的信号在超过fs/2之后,突然出现在低频区域,而且频率随输入频率变化而镜像变化,那就是混叠。
另一个方法:在ADC输入端加一个已知频率的高频信号,幅度固定,然后看ADC输出里有没有对应的低频成分。如果有,说明抗混叠滤波器没起作用。
我通常会在调试阶段,故意把抗混叠滤波器旁路掉,对比一下有和没有的频谱差异。如果差异明显,说明滤波器在干活;如果没差异,要么滤波器没起作用,要么信号里本来就没有高频成分。
5.2 滤波器自激振荡:运放选型和布局的问题
有源滤波器自激,通常是因为运放的相位裕度不够,或者反馈路径布局太长。Sallen-Key拓扑里,运放接成单位增益跟随器时,如果运放不是单位增益稳定,就会振荡。
解决办法:选单位增益稳定的运放,或者在输出和反相输入之间加一个小电阻(比如50Ω)隔离容性负载。布局上,反馈路径要短,地平面要完整,电源去耦电容要靠近运放引脚。
我遇到过一次,Sallen-Key滤波器在实验室里工作正常,到了现场就自激。后来发现是现场温度低,运放的相位裕度下降。换了温度范围更宽的运放就好了。所以选型时一定要看运放的温度特性,不能只看常温参数。
5.3 噪声和失真的权衡:滤波器本身也会引入问题
抗混叠滤波器在滤掉高频噪声的同时,也会引入自己的噪声和失真。电阻的热噪声、运放的电压噪声和电流噪声、电容的介质吸收,都会影响信号质量。
降低噪声的方法:用低噪声运放,电阻值不要太大(热噪声与电阻值平方根成正比),电容选C0G或者薄膜电容,避免用高介电常数的陶瓷电容(压电效应和介质吸收严重)。
失真的主要来源是运放的非线性。如果信号幅度接近运放输出摆幅,失真会急剧增加。所以运放的输出摆幅要留足余量,一般信号峰值不超过电源轨的80%。
5.4 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 频谱中出现非输入频率成分 | 混叠 | 旁路抗混叠滤波器对比 | 加滤波器或提高阶数 |
| 通带边缘有峰值 | Q值过高 | 检查电阻电容值 | 降低Q值或改用巴特沃斯 |
| 高频衰减不够 | 运放带宽不足 | 测运放输出高频响应 | 换高带宽运放 |
| 输出自激 | 相位裕度不足 | 示波器看输出波形 | 加隔离电阻或换运放 |
| 低频噪声大 | 电阻热噪声 | 短路输入端测噪声 | 减小电阻值或换低噪声运放 |
| 截止频率偏离设计 | 元件容差 | 实测元件值 | 用高精度元件或校准 |
6. 几个实际案例:从电机电流采样到音频采集
6.1 电机电流采样:PWM噪声如何混叠到电流环
电机驱动里,电流采样通常在PWM周期中点触发ADC,采样率等于PWM频率。PWM开关噪声含有丰富的高频谐波,如果抗混叠滤波器没做好,这些谐波会折叠到电流信号里,导致电流环振荡。
我的做法:在电流采样电阻和ADC之间,放一个二阶Sallen-Key低通,截止频率设在PWM频率的1/10左右,同时在ADC输入端加一个一阶RC,截止频率设在PWM频率的1/2左右。这样两级滤波,既保证了fs/2处的衰减,又不会过度影响电流信号的带宽。
另外,ADC的采样时刻要避开PWM开关瞬间,通常选在PWM周期中点,这时候开关噪声已经衰减得差不多了。
6.2 音频采集:20kHz带宽,为什么采样率要44.1kHz
音频CD标准采样率44.1kHz,fs/2=22.05kHz,刚好比人耳上限20kHz高一点。抗混叠滤波器需要在这个过渡带内从通带转到阻带,对滤波器阶数要求很高。早期CD机用多阶模拟滤波器,后来用过采样加数字滤波,模拟滤波器要求大大降低。
如果你自己做音频采集,采样率48kHz,有用信号20kHz,fs/2=24kHz,过渡带只有4kHz,二阶滤波器根本不够。要么用过采样,要么用高阶滤波器。我一般用Σ-Δ ADC,内部过采样率很高,外部只需要一个简单的RC。
6.3 精密称重:24位ADC前面到底要不要滤波器
24位Σ-Δ ADC内部有过采样和数字滤波,模拟抗混叠滤波器要求很低,一阶RC通常就够。但要注意,Σ-Δ ADC的输入采样频率虽然高,但它的模拟输入端仍然会有开关电容采样,如果前端驱动能力不足,会影响精度。
我通常会在称重传感器和ADC之间加一个仪表放大器,然后加一个一阶RC,截止频率设在ADC输出数据率的10倍左右。这样既能滤掉高频噪声,又不会影响称重信号的响应速度。
7. 一些个人体会和实用建议
抗混叠滤波器这件事,最怕的就是“想当然”。觉得采样率够了就行,觉得数字滤波能补救,觉得随便放个电容就能解决问题。实际上,混叠一旦发生,就是不可逆的,后面做再多努力都是白费。
我的建议是:在项目初期就把抗混叠滤波器的方案定下来,不要等到调试出问题了再回头改。先确定信号带宽、采样率、ADC位数,然后算fs/2处的衰减要求,再选滤波器阶数和类型,最后选元件和运放。每一步都有依据,不要拍脑袋。
元件选型上,电阻用1%金属膜,电容用C0G或薄膜,运放选低噪声、单位增益稳定、带宽足够的。布局上,滤波器尽量靠近ADC,反馈路径短,地平面完整,电源去耦到位。
调试的时候,先单独测滤波器,用信号发生器扫频,看幅频特性是否符合设计。然后再接ADC,看整体频谱。如果发现问题,先查滤波器,再查ADC配置,最后查信号源。
最后分享一个小技巧:如果你不确定抗混叠滤波器有没有必要,可以先在ADC输入端加一个简单的RC,截止频率设在fs/2的1/5左右,然后对比有和没有的频谱。如果频谱干净了很多,说明滤波器在起作用,再根据实际需求决定要不要升级到有源滤波器。这个方法简单粗暴,但很有效。