当前位置: 首页 > ds >正文

Σ∆ 数字滤波

ΣΔ(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.5int 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 连接,用于声音/控制应用。

http://www.xdnf.cn/news/12997.html

相关文章:

  • Linux 用户层 和 内核层锁的实现
  • 嵌入式面试提纲
  • debian12拒绝海外ip连接
  • PyCharm和VS Code哪个更适合初学者
  • idea 启动jar程序并调试
  • 机器学习模型选择指南:从问题到解决方案
  • 华为开源自研AI框架昇思MindSpore应用案例:ICT实现图像修复
  • 前端现行架构浅析
  • 主流嵌入式Shell工具性能对比
  • Python计算字符串距离算法库textdistance详解与应用实战
  • Python_day48随机函数与广播机制
  • Framework开发之IMS逻辑浅析1--关键线程及作用
  • Spring AOP代理对象生成原理
  • 在Unity中Update和Fixedupdate有什么区别
  • 【读论文】OpenAI o3与o4系统模型技术报告解读
  • 数据源指的是哪里的数据,磁盘中还是内存中
  • 调试快捷键 pycharm vscode
  • 掌握Git核心:版本控制、分支管理与远程操作
  • 联邦学习与边缘计算结合
  • 一种停车场自动停车导航器的设计(论文+源码)
  • grpc和http的区别
  • 自动驾驶科普(百度Apollo)学习笔记
  • 【AI智能体】Dify 从部署到使用操作详解
  • 解决limit 1000000加载慢的问题
  • 【每天学点 Go 知识】Go 基础知识 + 基本数据类型快速入门
  • 【大模型RAG】Docker 一键部署 Milvus 完整攻略
  • 基于规则的自然语言处理
  • 基于多维视角的大模型提升认知医疗过程层次激励编程分析
  • 【数据结构】顺序表和链表详解(下)
  • 异步跟栈 webpack