4. 模数转换与采样理论:奈奎斯特定理、ADC选型、过采样与抽取技术

模数转换,说白了就是把连续的模拟信号变成离散的数字信号。这是数字信号处理的第一步,也是最容易出问题的一步。我见过太多项目,算法写得天花乱坠,结果ADC选型或者采样率没搞对,整个系统直接废掉。今天咱们就把这块硬骨头啃下来。

4.1 奈奎斯特定理:采样的底线

奈奎斯特定理其实就一句话:采样频率必须大于信号最高频率的两倍。用公式表达就是:

fs > 2 * fmax

其中 fs 是采样率,fmax 是信号中的最高频率分量。为什么是两倍?因为采样本质上是用离散的点去“还原”连续波形。如果采样率不够,就会出现混叠——高频信号伪装成低频信号混进来,你根本分不清真假。

核心要点:

  • 理论下限是 fs = 2 * fmax,但工程上我一般取 3~5 倍
  • 抗混叠滤波器必须在ADC之前,这是硬性要求
  • 采样率越高,数据量越大,实时处理压力也越大

我在做心电监护仪的时候遇到过一个问题:心电信号的带宽只有 0.05~100Hz,按理说 200Hz 采样就够了。但实际测出来波形总有毛刺,后来发现是肌电干扰(EMG)的高频分量混进来了。从那以后,我所有设计都会在ADC前端加一个二阶以上的抗混叠低通滤波器,截止频率设在信号带宽的 1.5 倍左右。

4.2 ADC选型:参数与权衡

ADC选型是门学问。参数表上密密麻麻的数字,真正关键的其实就几个:

参数 含义 医疗场景建议
分辨率(bit) 量化台阶数,2^N 个等级 心电/脑电:16~24bit;血氧:12~16bit
采样率(SPS) 每秒采样次数 心电:250~1000;脑电:200~500;脉搏波:100~500
信噪比(SNR) 信号与噪声的功率比 医疗级要求 > 80dB
有效位数(ENOB) 实际能达到的位数,比标称低 ENOB 比分辨率重要得多
输入范围 ADC能处理的电压范围 通常 0~Vref 或 ±Vref

我个人的习惯是:先看 ENOB,再看采样率,最后看功耗。很多芯片标称 24bit,实际 ENOB 只有 18bit,中间的差距就是噪声和失真。你想想看,花了大价钱买高分辨率ADC,结果有效位数还不如一个中端货,多冤。

选型小技巧:

医疗信号通常很微弱(心电只有 0.5~4mV),所以ADC前级必须搭配仪表放大器。我常用的方案是:仪表放大器 + 二阶低通滤波器 + 差分ADC,这样能最大程度抑制共模干扰。

4.3 过采样与抽取技术

过采样,就是用远高于奈奎斯特频率的采样率去采集信号。为什么要这么做?因为过采样可以把量化噪声分散到更宽的频带里,然后通过数字滤波把带外噪声滤掉,再用抽取降低数据率。这样做的效果是:等效分辨率提高了。

公式很简单:

每过采样4倍,ENOB 增加 1bit

也就是说,如果你想要从 12bit 提升到 16bit,需要过采样 4^4 = 256 倍。代价是数据量暴涨,但好处是不用换硬件ADC。

注意:

过采样不是万能的。它只能改善量化噪声,对模拟域的噪声(电源纹波、热噪声、1/f 噪声)无能为力。我曾经在一个项目中试图用 256 倍过采样来弥补ADC的不足,结果发现噪声底纹丝不动——因为那是模拟前端的噪声,不是量化噪声。

抽取技术是和过采样配套的。过采样之后数据量太大,必须降下来。抽取分两步:

  1. 数字低通滤波:滤除过采样引入的高频噪声
  2. 降采样:每隔 M 个点取一个,数据率降到目标值

抽取滤波器常用 CIC(级联积分梳状)滤波器,结构简单,适合硬件实现。我一般在 FPGA 上用 CIC 做第一级抽取,再用 FIR 做第二级精细滤波,这样效率和精度都能兼顾。

4.4 知识体系总览

下面这张图把本章的核心逻辑串起来了。从模拟信号到数字信号,每一步都有坑,每一步都有对策。

模数转换与采样理论知识体系 模拟信号输入 抗混叠低通滤波器 ADC 采样量化 奈奎斯特采样 过采样 + 抽取 数字信号输出 核心原则:采样率 > 2×信号最高频率 | 过采样4倍提升1bit ENOB | 抽取前必须数字滤波

4.5 实战中的避坑指南

做医疗嵌入式系统,ADC这块有几个坑我踩过,写出来给大家参考:

  • 抗混叠滤波器不能省:我曾经为了省一个运放,把二阶滤波器改成一阶,结果心电波形上出现了 50Hz 工频的镜像频率,怎么滤都滤不掉。最后老老实实加回二阶。
  • 参考电压要干净:ADC的 Vref 如果带纹波,会直接调制到输出信号上。我习惯用独立的精密参考源(比如 ADR43x 系列),不共用电源轨。
  • 采样时钟抖动:时钟抖动会降低 SNR,尤其是高频信号。我用晶振 + 锁相环(PLL)给ADC提供时钟,不用MCU内部RC振荡器。
  • PCB布局:模拟地和数字地要分开,ADC下面不要走数字信号线。我见过一个项目,ADC输出数据线从芯片底下穿过,结果串扰导致 ENOB 掉了 2bit。

我的经验:

做医疗设备,ADC选型时多留 20%~30% 的余量。比如心电信号最高 100Hz,采样率不要卡 200Hz,我一般取 500Hz 或 1kHz。这样后续做数字滤波、去基线漂移、QRS检测时,数据质量会好很多。

好了,模数转换这块就聊到这儿。记住三个关键词:奈奎斯特、ENOB、过采样。搞懂了这三个,ADC选型和采样策略就不会出大问题。