如何理解 Sigma-Delta ADC 中的“抽取”和“滤波”?
前言
上回我们讲到了 Sigma-Delta ADC 的前半部分,即,Sigma-Delta 调制器将模拟信号变成了高速 1-bit 码流,并且做了量化噪声的整形。
今天我们继续讲 Sigma-Delta ADC 的后半部分,即,数字滤波器,它起到两个作用:
- 第一,将高速 1-bit 码流,输出为低速、高分辨率的数据,如 12 至 24 bit ,这个过程称为 “抽取(Decimation)”。
- 第二,噪声整形之后,量化噪声更集中在高频区域,要去除这部分噪声,这个过程称为 “滤波(Filter)”。
本篇内容综合了 ST、TI、ADI 的公开资料,按惯例声明一下:我的解释不一定是对的,还可能存在错误,有时我自己也不知道在说什么。所以仅供参考,欢迎讨论。
简单的“抽取”
“抽取” 的意思是指:由每 N 个输入,生成 1 个输出。
这可能会让人想起一种简单的办法 —— 滑动平均(Moving Average),它的示意图如下。只是对于 Sigma-Delta ADC 来说,它的输入是 0b 或 1b 的 1-bit 码流:
在 DSP 中,我们用冲击响应(Impulse Response)及频谱表示窗口函数。对于 Moving Average 来说是这样的:
注意看:Moving Average 的冲击响应是一组脉冲,时域上呈现为矩形波形。而其频谱看上去起起伏伏的,这种波形是 Sinc 函数,数学上用 Sinc(x) = Sin(x)/x 表示。
我们无意深入 DSP 的理论,只需要知道这种窗口函数称为 “Sinc Filter”, 可以作为 Sigma-Delta ADC 中简单而实用的数字滤波器。
下面让我们来了解一下 Sinc Filter 在 ADC 中的工作性质。
Sinc 滤波器的时域特性
Sinc Filter 有 2 个参数可以调节:
- Filter Length:指参与 Moving Average 的样本数量,即,窗口的长度。对于 1-bit 码流的输入,越长的窗口,能转换成更高的分辨率,同时,输出数据的速率也会降低。
- Filter Order:指滤波器的阶数,Moving Average 可以应用于已经平均过的数据,每再次应用,就增加 1 阶,也称为“级联”(Cascading) 。
一般来说,滤波器阶数的区别,可以从其频谱中看出。不过 ST 的应用笔记 AN4990 (见参考资料[2])中举了一个时域的例子,看出更高阶的 Sinc Filter 能做到更精准的输出。我觉得讲的蛮好的,摘录如下。
ST AN4990 例子:有 3 个窗口长度为 10 的 Sinc Filter,阶数分别是 1 阶、2 阶、3 阶。分别测试两种 1-bit 码流作为输入的情况:
- 第 1 种码流:由完全等间距的脉冲构成,脉冲正好发生在窗口长度上,也就是时间轴横坐标 10、20、30 的位置。
- 第 2 种码流:也是由若干个脉冲组成,但脉冲发生在时间轴横坐标 10、19、29 的位置。这是为了模拟密度更高的码流。你记得吗?Sigma-Delta 调制器就是基于 PDM (脉冲密度调制)的原理。
先来看对于第 1 种码流,三种阶数滤波器的输出情况:
ST 文中,输出数据就发生在每个窗口长度的位置。可以看到:
- 1 阶 Sinc 在横坐标10、20、30 的位置,输出都是 1(图中绿色虚线)。
- 2 阶 Sinc 在横坐标 20、30 的位置是 1(图中粉色虚线)
- 3 阶 Sinc 在横坐标 30 的位置才是 1(图中粉色实线),这个合理,因为滤波算法执行了 3 次。
注意,此时这个输出的 “1” 已经是十进制数值。
再来看对于第 2 种密度更高的码流,三种阶数滤波器的输出情况:
可以看到:
- 1 阶 Sinc 在横坐标10、20、30 的位置仍然都是 1,这是不对的,因为第 2 种码流的密度更高,理应代表更大的模拟输入信号。
- 2 阶 Sinc 在横坐标 20 的位置比第 1 种码流的数值更大,但在横坐标 30 的位置又恢复到了 1。
- 3阶 Sinc 在横坐标 30 的位置输出 1.08,这才是合理的。
总之,虽然是同样的 OSR (Over-Sampling Ratio)和分辨率,3 阶 Sinc 输出更平滑、更精确,代价是 A/D 输出的延迟(Latency)更长。
Sinc 滤波器的频域特性
让我们来看一下 Sinc Filter 的频域特性。
在 TI 的应用笔记 SBAA230A (见参考资料[3])中,给出了整形后量化噪声 与 Sinc Filter 频谱(增益/衰减用绝对值和dB表示,无相位信息)的对比图示如下:
看点如下:
- 量化噪声为红线, Sinc Filter 频谱为黑线。
- Sinc Filter 的通带:衰减很快,在非常低的频率增益就开始下降,马上就达到了 -20dB,因为通带窄,所以只适合低频信号的量测。
- Sinc Filter 的阻带:往高频区域有下降趋势,并且有周期性陷波(Notch),出现的位置是在倍数的输出数据速率(Data Rate)上。
如果你觉得这个 Sinc Filter 勉强是个低通滤波器,可以滤除整形后的量化噪声的话,但图中其实是一个 5 阶 Sinc。
我们再来看一下 1 阶、3 阶、5 阶 Sinc,它们的频谱对比如下:
可以看到:1 阶 Sinc 的阻带衰减非常差,5 阶 Sinc 好很多,代价是 5 阶 的通带也更窄,而且有很长的 Latency 。所以,为了折衷,3 阶 Sinc 用的比较多。
硬件实现 —— CIC 滤波器
既然 Sinc Filter 在频谱上与理想低通滤波器差距很大,为什么还能得到广泛使用?
原因就是它实现起来非常简单。
从 Moving Average 的算法来看,构建一个硬件框图如下:
这是一个 4 窗口长度的 Moving Average 示例,窗口内的样本经过移位(1/4),最多 3 次 Delay,最后进行相加。
为简单起见,上图画的是一个 4 输入 的加法器,但这不太现实,因为加法器通常是 2 输入的。后来,人们发明了一种 Integrator Comb 的硬件结构,用的就是 2 输入的加减法,能够等效完成上述 Moving Average:
如果把这种结构级联起来,就形成了高阶的 Sinc Filter,由其硬件特性,也称为 Cascaded Integrator Comb Filter(级联-积分器-梳状滤波器),即 CIC Filter,网上有很多它的 FPGA 代码。
整个实现过程没有用到乘法器,所以是一个非常大的成本优势,意味着它将占用更少的 Die Size 和消耗更少的电量。
这就是为什么在低速 Sigma-Delta ADC 中总能看到 Sinc Filter 或 CIC Filter 的身影:
比如,图中 ADS124X 提供 3 阶 Sinc Filter,ADS126X 提供 5 阶 Sinc Filter。
希望未来看 datasheet 时,对这部分概念能驾轻就熟。
总结
本文从抽取(Decimation)讲到 Moving Average,再由 Moving Average 讲到 Sinc Filter,其硬件实现叫做 CIC Filter。
根据 Sinc Filter 频谱通带窄、硬件成本低的特点,通常用于从数十到几千 Hz 的低频输入,对应如温度、压力、人体生理等缓慢变化的传感器应用。
参考资料
- https://en.wikipedia.org/wiki/Sinc_filter
- https://www.st.com/resource/en/application_note/an4990-getting-started-with-sigmadelta-digital-interface-on-applicable-stm32-microcontrollers-stmicroelectronics.pdf
- https://www.ti.com/lit/an/sbaa230a/sbaa230a.pdf
- https://tomverbeure.github.io/2020/09/30/Moving-Average-and-CIC-Filters.html
- https://www.ti.com.cn/zh-cn/data-converters/adc-circuit/precision-adcs/overview.html
欢迎关注我的微信公众号“疯狂的运放”
,及时收到最新的推文。