ADC量化噪声解析:从原理到实践的新手指南

1次阅读
没有评论

共计 2007 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

什么是量化噪声?

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

ADC 量化噪声解析:从原理到实践的新手指南

量化噪声的数学原理

量化噪声的功率谱密度(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 中存储的就是幅度谱,可用于分析噪声
}

硬件设计避坑指南

  1. PCB 布局
  2. 保持 ADC 模拟部分和数字部分分离
  3. 模拟地和数字地单点连接
  4. 避免接地环路,特别是高频信号路径

  5. 参考电压源

  6. 使用低噪声 LDO 为 VREF 供电
  7. 添加适当的去耦电容(如 10μF 钽电容 +0.1μF 陶瓷电容)
  8. 考虑使用外部精密基准源(如 REF5025)替代内部基准

  9. 采样保持时间

  10. 根据信号源阻抗选择合适的采样时间
  11. 高阻抗信号源需要更长的采样时间

思考与练习

  1. 如何使用软件校准补偿 ADC 的非线性误差?
  2. 在资源受限的 MCU 上,如何平衡过采样率和处理开销?
  3. 如何验证你测量的噪声确实是量化噪声而不是其他干扰?

推荐使用 Jupyter Notebook 复现文中的 FFT 分析,这样可以直观地观察噪声频谱分布。

总结

量化噪声是 ADC 固有特性,但通过过采样、优化硬件设计等技术可以有效改善。理解其数学原理有助于选择合适的优化方案。在实际应用中,需要综合考虑性能需求和资源限制,找到最佳平衡点。

正文完
 0
评论(没有评论)