Σ∆ 数字滤波

发布于:2025-06-09 ⋅ 阅读:(22) ⋅ 点赞:(0)

ΣΔ(Sigma-Delta,中文常译为“Σ-Δ”或“Σ-Δ调制”)数字滤波,是基于ΣΔ调制器(Sigma-Delta Modulator)原理发展出来的一种数字信号处理技术,广泛应用于高精度ADC(模数转换器)或DAC(数模转换器)中。它结合了噪声整形过采样的思想,能在较低成本下实现高分辨率的信号转换。


一、ΣΔ调制简介

基本原理:
  • Σ(积分器):累加输入信号,使其频谱中的低频部分放大;

  • Δ(差分器):取当前信号与量化后的信号差值形成负反馈;

  • 量化器:通常是1-bit或低位数ADC;

  • 噪声整形:量化误差被推移到高频部分。

特点:
  • 把量化噪声从低频“推”到高频;

  • 高频噪声在后续可以通过低通滤波器有效滤除;

  • 特别适用于音频、传感器、仪器采集等高精度信号处理。


二、ΣΔ 数字滤波常用结构

ΣΔ调制器之后,必须接数字低通滤波器,起到:

  • 把有用信号频段保留下来;

  • 滤除高频的量化噪声;

  • 实现抽取(降采样)操作。

常见的数字滤波结构:
  1. CIC滤波器(Cascaded Integrator-Comb)

    • 结构简单,仅由加法器和延迟单元组成;

    • 不需要乘法器,适合FPGA、DSP硬件实现;

    • 常用于ΣΔ调制器后的第一层滤波+降采样。

  2. FIR滤波器(有限冲击响应)

    • 精度高,可设计出理想响应;

    • 适用于进一步细化频率选择性;

    • 通常放在CIC滤波器之后作为“修正”滤波器。


三、ΣΔ数字滤波系统框图

模拟输入
   │
[ ΣΔ调制器 ] → 1-bit高速数据流
   │
[CIC滤波器] → 降采样 + 初级低通
   │
[FIR滤波器] → 滤除剩余高频噪声
   │
数字输出(低速、高分辨率)

四、应用场景

  • 音频采集与播放(如24-bit音频DAC)

  • 工业传感器(如压力、温度等)

  • 医疗设备(ECG、EEG 等信号采集)

  • 精密仪器(如示波器、数据采集卡)


🧠 示例目标:

模拟一个低频信号(如正弦波),经过一阶 ΣΔ 调制器,再经过一个简单的 CIC 滤波器和降采样,最后输出数字信号。


🧩 C 语言示例代码

#include <stdio.h>
#include <math.h>

#define PI 3.14159265358979323846
#define SAMPLE_RATE  100000   // 原始过采样率(100kHz)
#define DECIMATION   100      // 抽取比
#define OUTPUT_RATE  (SAMPLE_RATE / DECIMATION)
#define INPUT_FREQ   1000     // 输入信号频率

#define DURATION_SEC 1
#define TOTAL_SAMPLES (SAMPLE_RATE * DURATION_SEC)

// --- ΣΔ调制器状态变量 ---
double integrator = 0.0;
double quantizer_out = 0.0;

// --- CIC滤波器状态变量 ---
long cic_integrator = 0;
long cic_comb = 0;
long last_comb_input = 0;

// --- 一阶Sigma-Delta调制器 ---
int sigma_delta_modulate(double input)
{
    integrator += input - quantizer_out;
    quantizer_out = (integrator >= 0) ? 1.0 : -1.0;
    return (quantizer_out > 0) ? 1 : 0;  // 输出1或0
}

// --- 简单的CIC滤波器(积分器+微分器) ---
long cic_filter(int bit)
{
    // 积分器
    cic_integrator += (bit ? 1 : -1); // 1-bit输入转为±1

    // 每 DECIMATION 次,进行一次抽取 + 微分器
    static int count = 0;
    count++;
    if (count >= DECIMATION) {
        count = 0;
        long out = cic_integrator - last_comb_input;
        last_comb_input = cic_integrator;
        return out;
    }
    return 0x7FFFFFFF;  // 标志:不是有效输出
}

int main(void)
{
    for (int i = 0; i < TOTAL_SAMPLES; i++) {
        double t = (double)i / SAMPLE_RATE;
        double input_signal = 0.5 * sin(2 * PI * INPUT_FREQ * t);  // 模拟输入信号,振幅 -0.5~0.5

        int bit_out = sigma_delta_modulate(input_signal);

        long filtered = cic_filter(bit_out);
        if (filtered != 0x7FFFFFFF) {
            // 打印降采样后的输出
            printf("%ld\n", filtered);
        }
    }

    return 0;
}

🚀 输出说明:

  • 输出是模拟信号经过 ΣΔ 调制器后得到的 1-bit 比特流,再通过一个 积分-微分(CIC)滤波器,完成降采样低通滤波

  • 输出打印的是低频恢复的模拟量值(整数形式);

  • 可在 Python 或 Excel 中对其进行绘图,查看恢复的波形形状。


🛠 可改进方向(进阶):

  • 多阶 ΣΔ(比如二阶)调制器;

  • 更复杂的数字滤波器(如FIR);

  • 实时输入(ADC采样),配合DMA;

  • 输出与 DAC 连接,用于声音/控制应用。