共计 1759 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点:为什么我们要关心量化噪声?
在嵌入式系统中,ADC(模数转换器)就像系统的 ” 感官 ”,负责将现实世界的模拟信号(比如温度、压力)转换为数字信号。但这个过程并不完美,量化噪声就是其中最主要的误差来源之一。
-
量化噪声的本质 :当模拟信号被离散化时,由于 ADC 分辨率有限(比如 12 位),在转换过程中会引入 $\frac{1}{2}$LSB 的误差,这就是量化噪声。理论信噪比公式为 $SNR=6.02N+1.76$dB(N 为位数)
-
典型影响场景 :
- 高精度电子秤(微小重量变化被噪声淹没)
- 振动传感器信号采集(低频噪声影响特征提取)
- 音频 ADC(可闻的本底噪声)
三大降噪方案技术对比
| 方案 | 计算复杂度 | 硬件成本 | 最佳适用场景 |
|---|---|---|---|
| 过采样 | 低 | 无 | 静态 / 慢变信号 |
| 抖动注入 | 中 | 需 DAC | 周期性信号(如正弦波) |
| 数字滤波 | 高 | 需 CPU 资源 | 宽带信号(如音频) |
核心实现原理
1. 过采样技术
-
ENOB 提升公式 :每 4 倍过采样提升 1 位有效分辨率,数学表达为:
$$ENOB = \frac{SNR_{ 实际}-1.76}{6.02}$$ -
STM32 实现要点 :
- 配置 ADC 时钟分频器提高采样率
- 开启 DMA 循环模式避免数据丢失
- 后期处理时进行算术平均
// STM32 HAL 库配置示例
hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; // 提高采样时钟
hadc.Init.OverSampling.Ratio = ADC_OVERSAMPLING_RATIO_256; // 256 倍过采样
hadc.Init.OverSampling.RightBitShift = ADC_RIGHTBITSHIFT_8; // 右移 8 位 = 除以 256
HAL_ADCEx_OverSamplingStart(&hadc); // 启动过采样
2. 抖动注入
- 幅值选择黄金法则 :
- 理想抖动幅度 =0.5LSB~1LSB
- 可通过 PWM+DAC 实现伪随机噪声
// 伪随机数生成抖动(MISRA- C 合规)uint16_t dither_value = 0;
void generate_dither(void) {
static uint32_t lfsr = 0xACE1u; // 初始种子
lfsr = (lfsr >> 1) ^ (-(lfsr & 1u) & 0xB400u);
dither_value = (uint16_t)(lfsr & 0x0FFF); // 12 位随机数
}
3. FIR 数字滤波
- 阶数选择经验 :
- 每增加 32 阶,阻带衰减提升约 20dB
- 推荐使用 ARM CMSIS-DSP 库加速运算
#include "arm_math.h"
#define FILTER_TAPS 32
float32_t firStateF32[BLOCK_SIZE + FILTER_TAPS - 1];
float32_t firCoeffs32[FILTER_TAPS] = {/* 滤波器系数 */};
arm_fir_instance_f32 S;
void filter_init(void) {arm_fir_init_f32(&S, FILTER_TAPS, firCoeffs32, firStateF32, BLOCK_SIZE);
}
void process_adc_data(float32_t *input, float32_t *output) {arm_fir_f32(&S, input, output, BLOCK_SIZE);
}
实测数据对比

– 测试条件 :1kHz 正弦波输入,FS=100kSPS
– 噪声基底对比 :
– 原始 12 位 ADC:-72dB
– 256 倍过采样:-84dB
– 抖动 + 过采样:-88dB
避坑指南
- 缓冲区溢出预防 :
- 过采样时 DMA 缓冲区大小 = 采样点数×过采样率
-
使用双缓冲机制
-
直流偏移补偿 :
- 抖动注入前测量 ADC 零点
-
在数字域减去直流分量
-
实时性保障 :
- 选择群延迟小的 FIR 结构(如最小相位)
- 折半滤波器阶数时,截止频率需相应提高
延伸思考:多 ADC 并联方案
对于超高精度应用(如 24 位 Σ -Δ ADC),可考虑:
– 相位交错采样(采样时钟偏移)
– 数字域加权融合算法
– 注意时钟同步精度要求
实践心得
经过实际项目验证,在 12 位 ADC 上通过 ” 抖动注入 +64 倍过采样 +32 阶 FIR” 的组合方案,可以将有效分辨率提升到 14.5 位,而成本仅增加约 10% 的 CPU 负载。特别提醒:选择方案时要综合考虑信号带宽、系统实时性和硬件资源,没有放之四海而皆准的完美方案。
正文完
