首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文搞懂Σ-Δ型ADC内数字滤波器

一文搞懂Σ-Δ型ADC内数字滤波器

作者头像
云深无际
发布2025-07-24 09:34:17
发布2025-07-24 09:34:17
68600
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

这个ADC还没有写完,虽然评论区有说就看一个有效位数的,这也太粗糙了,内部这些关系我还是不想放过的,所以今天继续写。

在前面的文章中我大概说明白了内部的调制器(Mod1 / Mod2):

一阶调制器(Mod1)将量化噪声转移到高频,其噪声整形斜率为 20 dB/十倍频程

二阶调制器(Mod2)进一步增强整形斜率为 40 dB/十倍频程,低频段噪声抑制更强。

其次就是引入了 MASH 架构:通过多级组合实现高阶调制而不引入不稳定性。

那我接下来想写写和开发者们息息相关的滤波器的设计,这是非常有用的。

数字滤波器(Decimation Filter)

一般为 FIR 型结构,如 Sinc3 / Sinc5 / Sinc5+Sinc1

用于抽取(降低速率)和滤除高频量化噪声;滤波器阶数越高,旁瓣抑制越强,陷波频率位于 ODR 整数倍

随 ODR 变化,Sinc 滤波器的“包络宽度”和陷波点也跟着变化:

高 ODR → 宽带宽 → 高噪声

低 ODR → 窄带宽 → 强滤波 → 低噪声

带宽、噪声与分辨率权衡

文章明确指出了 Σ-Δ ADC 的经典权衡:

参数

提高效果

副作用

过采样率(OSR)

降低量化噪声,提升 ENOB

降低输出速率

滤波器阶数

更强量化噪声抑制

增加群延迟

ODR

提高输出速率

降低精度、增大噪声

我们在本科生的课本里面看到的是信号与系统的滤波器的内容在连续系统的频域分析部分:

随便一本书
随便一本书

随便一本书

但是我们最终的芯片里面使用的是数字滤波器,所以差别还是很大的。

其实这个里面的滤波器最早的出现是TI的产品里面:

看TI手册的伙伴应该是不陌生的
看TI手册的伙伴应该是不陌生的

看TI手册的伙伴应该是不陌生的

一开死的图
一开死的图

一开死的图

我当时最大的困惑就是这些个小山包一样的东西是什么?今天就吃透它!

本质上是:sinc 型滤波器:

“sinc型滤波器是具有 sin(x)/x 剖面的移动平均滤波器”

频率响应的幅度为:

对应 sinc(Mf/Fs) 形状,其中 M 是抽取率、T 是采样周期。

实际上,这类滤波器是在时域中用 移动平均器 实现,因而具备良好的低通特性。

“由一系列积分器、一个用作抽取率的开关和一系列微分器组成。”

这实际上描述的是典型的 CIC(Cascaded Integrator–Comb)滤波器结构,也称为 硬件上的 sinc 滤波器实现形式

积分器部分(位于高采样率侧) 每级为:

相当于无限累加器,起到低通滤波作用。

抽取器(Decimator):每隔 R 个样本输出一次,起到抽取作用,降低数据速率。

微分器部分(位于低采样率侧) 每级为:

实现相位对称差分,平衡积分器造成的相位延迟。

FIR 性质与线性相位

“它是一种有限脉冲响应(FIR)型滤波器。”

由于微分器输出对过去 M 个样本进行差分,整体响应是 有限支持的。

相比 IIR 滤波器(如Butterworth、Bessel),sinc 滤波器具有 严格线性相位(即不会失真时域波形形状)。

“对于输入的阶跃变化,它表现出已知且有限的线性相位响应。”

可以通过仿真观察到 sinc 滤波器对阶跃响应是平滑上升,随后达到稳态,没有明显振铃现象。

陷波位置

“深陷波发生在输出数据速率及其整数倍处,陷波内的信号会被衰减。”

频率响应中的零点(notches)发生在:

这些位置正是 sinc 函数的零点,也就是 CIC 滤波器天然的陷波点。

我们可以 利用这些陷波点来抑制特定干扰,比如:把 ODR 设置为 50 Hz / 60 Hz,就能抑制电网干扰;把 ODR 设置为射频干扰频率整数分数,也能衰减噪声。(下面会讲)

那什么是陷波点?

陷波点
陷波点

陷波点

我仿真了一下,就是一个山沟一样的东西
我仿真了一下,就是一个山沟一样的东西

我仿真了一下,就是一个山沟一样的东西

俺展示了 sinc⁵(CIC 类型)滤波器的高精度频率响应,清晰可见其陷波结构

  1. 深陷波点:出现在 f = n × 1/R(n 为整数),即输出数据速率 ODR 的倍数频率;图中以虚线标出 1×ODR, 2×ODR, 3×ODR 处的陷波;在这些频率附近,信号将被严重抑制,有效对抗固定频率干扰(如 50/60 Hz 工频)。
  2. 主瓣宽度:sinc5 的主瓣相对较窄,对目标带宽具有较好的选择性。
  3. 滚降速率:-100 dB/decade` 的陡峭包络;能有效抑制高频 Σ-Δ 量化噪声。

参数说明:

R = 64:抽取率,对应输出数据速率 ODR。

N = 5:滤波器阶数,决定陷波深度与滚降能力。

M = 1:微分器延迟设置(通常为1)。

原理:sinc 滤波器陷波机制

为什么出现陷波?

sinc 滤波器(如 CIC 或 sinc⁵)是由移动平均结构(积分器 + 微分器)构建的 FIR 滤波器;

其频率响应为:

在 处,分子为 0、分母非零,产生陷波(notch);

因此陷波频率为:

若调制器时钟 ,R = 64,则第一陷波频率为:

懂了吗?都是数学算出来的~

利用陷波抑制干扰频率

可用于抑制已知频率干扰(这是最大的用处)

电源干扰(工频噪声)常见于:

50 Hz / 100 Hz(欧系)

60 Hz / 120 Hz(美系)

若陷波频率正好对准这些干扰:滤波器将对该频率具有最大抑制能力(>100 dB);

例如设置:

滤波器在处为陷波

120db,和我写的一样吧~
120db,和我写的一样吧~

120db,和我写的一样吧~

一般这个功能做了,就会宣传,因为工业环境肯定是交流电啊!
一般这个功能做了,就会宣传,因为工业环境肯定是交流电啊!

一般这个功能做了,就会宣传,因为工业环境肯定是交流电啊!

工频干扰若未有效滤除,会降低 ADC 的有效位数(ENOB),表现为测量数据中高频波动或周期性误差。

上面的图里面:sinc5 提供主要衰减;sinc1 相当于在 sinc5 输出基础上进行平均,sinc5 + sinc1 增加了陷波深度,适合抗周期干扰

对于非周期噪声 ,可以直接高 ODR ,来降低陷波深度获取更宽带宽,使得响应更快。

那“凸起来”的是什么?(孺子可教)

我的头怎么尖尖的?
我的头怎么尖尖的?

我的头怎么尖尖的?

这些凸起其实是 sinc 滤波器主瓣后的一系列副瓣(lobes),它们是由 sinc 函数本身的数学特性决定的:

sinc(x) = sin(πx)/(πx),它在频域中具有主瓣 + 副瓣的结构;由于离散系统中抽取、平均等操作,会让频率响应变成 周期性结构;因此,在主瓣之后,每隔一定频率,会出现“副瓣”(不是完全平坦地滚降);而在副瓣间,刚好是 陷波点(notches),所以看起来就像“凸起”。

主瓣中心频率 = DC(0 Hz);主瓣越宽,带宽越宽,响应速度越快,但噪声越大;主瓣越窄,带宽越小,响应慢,但噪声抑制能力强。

我不知道有没有文章来说这个,相信可以给大家解惑,尤其在看数据手册的时候。

为什么会这样?背后的原理是:

sinc 滤波器是通过对输入信号做积分-抽取-微分得到的。这种操作实际上等价于:

在时域中执行了均值滑动窗口滤波(moving average),对应到频域上就是:频率响应为 sinc 函数:主瓣通,副瓣抑制,但抑制不彻底,因此有“凸起”副瓣。

这种结构决定了:

陷波点(响应为0):位于输出数据速率(ODR)及其整数倍处;

副瓣(凸起):位于陷波之间的频段,仍有部分频率能量“泄漏”;

滚降斜率:决定副瓣整体下降的速率,比如 sinc⁵ 是 −100 dB/decade。

如果使用 sinc⁵ 进行滤波,并设置抽取率 R = 64,那么:第一主瓣在 附近,截止频率在 ;陷波点出现在 , 如 1/64, 2/64, 3/64...;凸起就是副瓣,不是完全消失,而是低于主瓣很多的“余波”;越高阶的 sinc,副瓣越小,陷波越深,滚降越快。

仿真一下!

sinc 滤波器的频率响应特性
sinc 滤波器的频率响应特性

sinc 滤波器的频率响应特性

展示了不同阶数(sinc¹, sinc³, sinc⁵)与不同抽取率 (16, 32, 64)下 sinc 滤波器的频率响应特性:

主瓣:在低频处幅度最高(0 dB),保留有用信号。

副瓣(凸起):随着频率升高呈现周期性凸起,是量化噪声的“泄漏”点。

陷波点:每隔 出现一次陷波,副瓣之间幅度降至最低。

阶数越高:副瓣更低,滚降更陡峭(如 sinc⁵ > sinc³ > sinc¹),抗噪能力更强。

R 值越大:主瓣越窄,带宽更低,但滤波更强。

咱们自己整一个!sinc5的
咱们自己整一个!sinc5的

咱们自己整一个!sinc5的

sinc⁵ 滤波器的完整频率响应特征

主瓣 (Main Lobe):

位于 ;表示滤波器主要通过的带宽区域;主瓣越窄,系统抗噪能力越强,但响应越慢。

陷波点 (Notches):

出现在 ;此处响应为 −∞ dB,信号完全被抑制;可用于屏蔽固定频率的干扰源(如 50Hz / 60Hz)。

滚降斜率 (Roll-off):滤波器主瓣外部响应随频率快速下降; 的滚降为约 −100 dB/decade;表示其抑制高频量化噪声的能力极强。

接下来我们仿真一下ADC里面的滤波器:

就是这个结构
就是这个结构

就是这个结构

image-20250722165836158
image-20250722165836158

image-20250722165836158

蓝色 sinc⁵:具有非常陡峭的滚降(−100 dB/decade),主用于强抑制调制器高频量化噪声;主瓣较宽但深陷波清晰。

绿色 sinc¹:滚降非常缓慢(−20 dB/decade);类似于简单的移动平均,抗噪性差;但具有更快的响应(较短建立时间)。

红色 sinc⁵ + sinc¹:是 AD7175 所采用的组合结构;相当于在 sinc⁵ 的基础上再次低通平均;主瓣略微收窄,陷波更深,抗干扰更强;滤波器尾部额外产生一阶陷波(见红线下方尖点),利于抑制 50Hz/60Hz 工频干扰。

上面说的都是滤波器在频域里面的事情,但是我们习惯的是时域的事情,视角转回到时域:sinc 型数字滤波器(CIC滤波器)在时域中等效于“均值滑动窗口滤波(Moving Average Filter)”,本质上就是执行了如下操作:

设输入信号为 ,抽取率为 ,则 滤波器的输出为:

这就是一个 长度为 的滑动平均滤波器

在实际的 Σ-Δ ADC 中:

CIC 结构 = 多级积分器 + 一次抽取 + 多级微分器

在时域中:积分器 相当于不断累加;抽取器 以 倍速率丢弃样本;微分器 等效于滑动求差,复原平均窗口的边界。

对直流信号(或缓慢变化信号)保留良好;对高频噪声具有强抑制作用;主瓣保留信号,陷波压制量化噪声或干扰频率;如果阶数增加 → 滤波更强,但建立时间变长。

那就继续看看是什么样子的:

滑动平均滤波器(Moving Average)在时域中的卷积操作效果
滑动平均滤波器(Moving Average)在时域中的卷积操作效果

滑动平均滤波器(Moving Average)在时域中的卷积操作效果

蓝色曲线为原始信号,包含:一个低频成分(慢速正弦波),一个高频成分(快速振荡),添加了少量高频噪声

橙色曲线是经过长度为 的滑动平均滤波器处理后的输出:高频部分被明显抑制,低频成分得以保留,输出变得平滑(也意味着滤波器引入了建立时间)。

这就是 sinc 滤波器在时域的行为本质:对过去 个点取平均,相当于与一个矩形脉冲核进行卷积

把时域和频域一起呈现
把时域和频域一起呈现

把时域和频域一起呈现

滑动平均滤波器(Moving Average Filter)的频域响应,其本质上就是 sinc 滤波器的幅度响应

时域行为

频域行为

对过去 个样本做平均

与一个 sinc 函数相乘(频率响应)

矩形窗口卷积

对应于 sinc(x)(即 )

越长的窗口 → 越平滑

主瓣越窄,陷波点越密集

主瓣:中间凸起区域,表示信号保留带宽;

陷波点(nulls):频率响应为零的位置,信号会被完全抑制;在整数倍的 处出现(归一化频率)

滚降斜率:主瓣之后,幅度迅速下降,约 十倍频程

不同阶数的滤波器
不同阶数的滤波器

不同阶数的滤波器

不同阶数的滑动平均滤波器(Moving Average / Sinc)对时域信号的影响:

阶数

对应滤波器

频域意义

时域特性

一阶

sinc

滚降 -20 dB/dec

基本平滑,高频略削弱

二阶

sinc²

滚降 -40 dB/dec

中高频被强烈抑制

三阶

sinc³

滚降 -60 dB/dec

几乎完全抹去高频细节

原始信号(蓝):带有快速振荡和慢速趋势

一阶 MA(橙):初步平滑

二阶 MA(绿):大幅度抑制高频,低频响应延迟更明显

三阶 MA(红):趋近于“信号平均值”,响应最慢,但抑噪最强

继续放一个图里面看
继续放一个图里面看

继续放一个图里面看

主瓣(Main lobe):中心凸起区域,保留有用信号带宽。

陷波点(Notch frequencies):周期性出现的谷底,对应于 输出数据率 × 整数倍 的频率。

滚降斜率(Roll-off):越高阶的 sinc 滤波器,滚降越陡,对高频噪声抑制越强。

叠加工频干扰来仿真
叠加工频干扰来仿真

叠加工频干扰来仿真

叠加了50 Hz 和 60 Hz 电源干扰频率线,用于分析陷波对干扰信号的抑制能力。

那我们可以写一个仿真程序来自己找这个点:

代码语言:javascript
代码运行次数:0
运行
复制
# 自动扫描 ODR,使陷波点最接近 50Hz(假设陷波出现在 ODR 的整数倍处)

target_freq = 50  # 想要抑制的干扰频率
tolerance = 0.5   # 可接受误差 Hz

# 扫描 ODR 范围
odr_range = np.arange(51, 1001, 1)  # ODR: 51Hz ~ 1kHz(排除50本身)
matches = []

# 对每一个 ODR,检查其陷波点(n×ODR)是否接近 50Hz
for odr in odr_range:
    harmonics = target_freq / odr
    distance_to_integer = np.abs(harmonics - np.round(harmonics))
    if distance_to_integer < tolerance / odr:
        matches.append((odr, harmonics))

# 找到满足条件的最佳 ODR(距离最小)
best_match = min(matches, key=lambda x: abs(target_freq - round(x[1]) * x[0])) if matches else None

best_match

当输出数据率(ODR)设置为 100 Hz 时,sinc 滤波器的第一个陷波点刚好出现在 50 Hz 附近,这正是我们目标干扰频率.写程序看看结果:

ODR = 100 Hz 时,使用 sinc5 滤波器对含有 50 Hz 干扰信号的滤波与抽取效果
ODR = 100 Hz 时,使用 sinc5 滤波器对含有 50 Hz 干扰信号的滤波与抽取效果

ODR = 100 Hz 时,使用 sinc5 滤波器对含有 50 Hz 干扰信号的滤波与抽取效果

  1. 上图(时间域滤波前后对比): 蓝线:原始信号包含 5 Hz 有效信号 + 50 Hz 干扰分量。 橙线:sinc5 滤波后,高频 50 Hz 成分被强烈抑制,只剩下低频分量。
  2. 下图(抽取后信号): 绿色曲线为 经过滤波并以 100 Hz 输出数据率抽取后的信号;仅保留了 5 Hz 有效信号,50 Hz 噪声几乎不可见

sinc 滤波器在其 陷波点附近(此处为 100 Hz) 具有极强的抑制能力。当干扰频率(如 50 Hz)靠近陷波带时,即便不是整倍数,也会因滤波器主瓣滚降而被显著衰减。

应用 sinc5 滤波器前后在频域中的差异
应用 sinc5 滤波器前后在频域中的差异

应用 sinc5 滤波器前后在频域中的差异

蓝线(Original Spectrum):滤波前的频谱,显示出明显的:

5 Hz 峰值:目标有用信号;50 Hz 峰值:干扰成分显著。

橙线(After sinc5 Filtering):sinc5 滤波后频谱:5 Hz 信号仍然保留,仅轻微衰减;50 Hz 处的峰值已显著压制,抑制约达 30~40 dB。

红色虚线标记:干扰频率 50 Hz;绿色虚线标记:有效信号频率 5 Hz。(看着不清晰,不重要,意思一下啊)

本例中,ODR = 100 Hz,sinc5 的陷波结构对 50 Hz 具备很强的抑制效果。

现在就轻而易举的看懂了
现在就轻而易举的看懂了

现在就轻而易举的看懂了

能有几个人看到这里?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数字滤波器(Decimation Filter)
  • 带宽、噪声与分辨率权衡
  • 本质上是:sinc 型滤波器:
  • FIR 性质与线性相位
  • 陷波位置
  • 那什么是陷波点?
  • 参数说明:
  • 原理:sinc 滤波器陷波机制
    • 为什么出现陷波?
  • 利用陷波抑制干扰频率
    • 可用于抑制已知频率干扰(这是最大的用处)
  • 那“凸起来”的是什么?(孺子可教)
  • 为什么会这样?背后的原理是:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档