ADC 采样率到底选多少才够?从奈奎斯特到过采样的工程取舍
做嵌入式采集的同学几乎都背过一句话:采样率至少是信号最高频率的 2 倍。奈奎斯特准则没错,但真按 2 倍去选 ADC,要么采回来一堆混叠垃圾,要么被抗混叠滤波器逼疯。今天把"留多少余量"这件事算清楚。
一、2 倍只是理论下限,不是工程值
奈奎斯特准则说:采样率 fs ≥ 2·fmax 时,带限信号可以无失真恢复。前提是两个理想条件:信号严格带限、重建用理想 sinc 插值。现实中两者都不存在。信号总有带外噪声,ADC 前的抗混叠滤波器也不可能是砖墙式的。
假设你要采集最高 10kHz 的有用信号。如果 fs = 20kHz(正好 2 倍),奈奎斯特频率就是 10kHz,任何超过 10kHz 的噪声都会直接折叠进 0~10kHz。这意味着抗混叠低通滤波器要在 10kHz 处从"全通"瞬间变成"全阻"——现实中不存在这样的滤波器。
二、余量到底留多少:看滤波器的过渡带
工程上真正决定采样率的,是你手头的抗混叠滤波器有多"陡"。
设信号带宽 fmax,滤波器 -3dB 截止频率取 fc ≈ fmax,阻带起始频率 fsb。要求是在 fsb 处衰减足够大(比如 60dB),且 fsb < fs - fmax(保证阻带噪声折叠后不污染有用频段)。
一个二阶 Sallen-Key 低通,-40dB/dec 的滚降,从 fc 到获得 60dB 衰减需要 1.5 个十倍频程。取 fc = 10kHz,则 fsb ≈ 316kHz,要求 fs - fmax > 316kHz,即 fs > 326kHz —— 对 10kHz 信号,采样率要 30 倍以上!这就是为什么很多低成本方案直接上过采样:与其做高阶模拟滤波器,不如把采样率提上去,让数字滤波器干活。
三、过采样 + 数字滤波:把难度从模拟搬到数字
过采样率 OSR = fs / (2·fmax)。把 fs 提到 4~8 倍 fmax 后:
1. 抗混叠滤波器可以用一阶 RC 糊弄过去,过渡带要求大幅放宽;
2. 数字域做抽取滤波(CIC + 半带滤波器),等效砖墙特性,成本几乎为零;
3. 顺手赚信噪比:每 4 倍过采样,量化噪声功率分散,SNR 提升约 6dB(相当于多半个有效位)。
代价是数据量和功耗上升。对电池供电的低速采集(比如每秒采几次的温湿度),过采样 64 倍纯属浪费;对音频、振动这类 kHz 级信号,过采样几乎是标配。
四、一个混叠演示(Python,30 行)
import numpy as np
fs_bad, fs_ok = 2000, 8000 # 对 900Hz 有用信号 + 1300Hz 干扰
t_bad = np.arange(0, 0.05, 1/fs_bad)
t_ok = np.arange(0, 0.05, 1/fs_ok)
x = lambda t: np.sin(2*np.pi*900*t) + 0.5*np.sin(2*np.pi*1300*t)
y_bad, y_ok = x(t_bad), x(t_ok)
# fs=2kHz 时奈奎斯特频率 1000Hz,1300Hz 干扰折叠到 700Hz,
# 和 900Hz 有用信号混在一起,事后任何数字滤波都救不回来。
# fs=8kHz 时干扰老老实实待在 1300Hz,一阶数字低通就能切掉。
把这段跑一下,对 y_bad 做 FFT,你会看到 700Hz 处凭空多出一个峰——那就是混叠。记住这个教训:混叠一旦发生,信息永久丢失,后端算法再强也补不回来。
五、工程选型清单
1. 先定 fmax:有用信号带宽 + 明确写下来,别拍脑袋;
2. 看滤波器预算:只有一阶 RC?fs 至少取 8~10 倍 fmax;能做四阶有源?4 倍 fmax 左右够用;
3. 算数据量:fs × 位数 × 通道数,确认 MCU 的 DMA 和内存扛得住;
4. 留数字滤波余地:fs 高一点,抽取滤波后还能剩 2~4 倍余量给算法;
5. 最后回头验算:fs/2 - fmax 是不是大于滤波器阻带起点,是就闭环。
一句话总结:奈奎斯特给的是"不丢信息"的下限,工程选型看的是"滤波器做不做得到"的上限。拿不准时,把采样率往高了选、把滤波放到数字域做——这是绝大多数项目里最便宜的正确。
- 点赞
- 收藏
- 关注作者
评论(0)