Σ∆ 数字滤波

ΣΔ(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 语言示例代码

cpp 复制代码
#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 连接,用于声音/控制应用。

相关推荐
Phoenixtree_DongZhao1 分钟前
[CVPR2026] 视觉 Mamba:RNN 与线性 Transformer 的统一视角
人工智能·rnn·transformer
Logic1013 分钟前
C语言/数据结构动态规划题解:字符串变回文的最少操作次数——最长回文子序列(LPS)
c语言·数据结构·算法·动态规划·时间复杂度·回文串·最长回文子序列
碧海银沙音频科技研究院5 分钟前
基于炬芯ATS3089X的ST LIS2DW12 三轴 MEMS 加速度传感器(G-Sensor)敲击按键功能实现
人工智能·嵌入式硬件
吴佳浩 Alben12 分钟前
一文讲透推理引擎性能指标:TTFT、TPOT、KV命中率、并发,到底对应 vLLM / SGLang 的哪个参数?
人工智能·python·语言模型·架构·ai编程·vllm·sglang
ting945200012 分钟前
Kilo Code for JetBrains 深度技术剖析:原生开源编程智能体内部实现与工程实践
人工智能·架构·开源
武子康15 分钟前
PUBACK 已到,灯还没亮:Agent 设备指令何时算完成?
人工智能·后端·agent
陈嘿萌17 分钟前
CVPR 2026 | 全新的五模态信息融合数据集,包括RGB、事件、热成像、4D 雷达与 LiDAR
人工智能·深度学习·计算机视觉·自动驾驶·学术研究与理论基础·点云雷达
guhunyihan20 分钟前
开源无代码平台的技术逻辑,恐象 AI 的架构思路解析
大数据·人工智能·开源
UIU11423 分钟前
P1115 最大子段和
c++·算法
垆边人似月.25 分钟前
华为题:零钱兑换
算法·华为