共计 2007 个字符,预计需要花费 6 分钟才能阅读完成。
什么是量化噪声?
当模拟信号通过 ADC(模数转换器)转换为数字信号时,由于 ADC 的有限分辨率,无法完美表示连续的模拟信号,这种差异就称为 量化噪声。举个简单例子,假设我们用 3 位 ADC 测量 0 -1V 的电压,那么每个量化台阶大约是 0.125V(1V/8)。如果实际电压是 0.13V,会被量化为 0.125V,这个 0.005V 的误差就是量化噪声。

量化噪声的数学原理
量化噪声的功率谱密度(PSD)可以通过以下公式计算:
PSD = (q^2)/12 * (1/fs)
其中:
– q 是量化台阶大小(q = Vref/2^N,N 是 ADC 位数)
– fs 是采样频率
这个公式告诉我们,量化噪声均匀分布在 0 到 fs/ 2 的频带内。
过采样技术
常规采样时,信噪比(SNR)的计算公式为:
SNR = 6.02N + 1.76 dB
当我们采用过采样技术,即使用高于奈奎斯特频率的采样率时,SNR 可以得到提升:
SNR_improvement = 10log10(OSR)
其中 OSR(Over Sampling Ratio)是过采样率。比如 4 倍过采样可以带来 6dB 的 SNR 提升,相当于增加了 1 位有效分辨率。
STM32 实战代码
ADC 配置(基于 HAL 库)
// 初始化 ADC
ADC_HandleTypeDef hadc1;
void ADC_Init(void)
{
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B; // 12 位分辨率
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE; // 连续转换模式
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
HAL_ADC_Init(&hadc1);
// 配置 ADC 通道
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; // 较长采样时间减少噪声
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
FFT 噪声测量(基于 CMSIS-DSP)
#include "arm_math.h"
#define FFT_SIZE 1024
float32_t inputBuffer[FFT_SIZE];
float32_t outputBuffer[FFT_SIZE];
arm_rfft_fast_instance_f32 S;
void FFT_Analysis(void)
{
// 采集数据
for(int i=0; i<FFT_SIZE; i++) {HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
inputBuffer[i] = (float32_t)HAL_ADC_GetValue(&hadc1);
}
// 初始化 FFT
arm_rfft_fast_init_f32(&S, FFT_SIZE);
// 执行 FFT
arm_rfft_fast_f32(&S, inputBuffer, outputBuffer, 0);
// 计算幅度谱
arm_cmplx_mag_f32(outputBuffer, inputBuffer, FFT_SIZE/2);
// 此时 inputBuffer 中存储的就是幅度谱,可用于分析噪声
}
硬件设计避坑指南
- PCB 布局:
- 保持 ADC 模拟部分和数字部分分离
- 模拟地和数字地单点连接
-
避免接地环路,特别是高频信号路径
-
参考电压源:
- 使用低噪声 LDO 为 VREF 供电
- 添加适当的去耦电容(如 10μF 钽电容 +0.1μF 陶瓷电容)
-
考虑使用外部精密基准源(如 REF5025)替代内部基准
-
采样保持时间:
- 根据信号源阻抗选择合适的采样时间
- 高阻抗信号源需要更长的采样时间
思考与练习
- 如何使用软件校准补偿 ADC 的非线性误差?
- 在资源受限的 MCU 上,如何平衡过采样率和处理开销?
- 如何验证你测量的噪声确实是量化噪声而不是其他干扰?
推荐使用 Jupyter Notebook 复现文中的 FFT 分析,这样可以直观地观察噪声频谱分布。
总结
量化噪声是 ADC 固有特性,但通过过采样、优化硬件设计等技术可以有效改善。理解其数学原理有助于选择合适的优化方案。在实际应用中,需要综合考虑性能需求和资源限制,找到最佳平衡点。
正文完
