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
评论(没有评论)