最近被这个工频干扰搞得身心俱疲,各种头大,MMP:

饼干盒子都用上了
因为现在使用的芯片没有内置的滤波器,还是怀念一下内置滤波器的 ADC;其实去年也写了不少滤波器的内容,但是功力不如今年啊!那这些内容就再拉出来溜溜,今天研究一个信号问题:

如图这是一个 ADC 的频率响应图
一眼数字滤波器(SINC),但是图是一拱一拱的;这是咋回事捏!

这个有点太理想了
看个随机点的(连续信号上叠加了密密麻麻的随机杂屑(白噪声),使用巴特沃斯低通滤波器或滑动平均滤波器最为有效)去除信号中的“高频随机白噪声。


它的响应是连续的
幅频曲线(蓝色实线):在 0Hz 到 10Hz(通带)之间极其平坦(接近 0 dB,表示信号无损通过);在 10Hz(截止频率)处准确穿过 -3 dB 点;超过 10Hz(阻带)后曲线急速下降,表明高频随机噪声被强烈衰减。
相频曲线(绿色点划线):随着频率升高,相位逐渐滞后。
比如随机点是指数据中偶尔出现的巨大跳变(如传感器失真、脉冲干扰),低通滤波器会让波形在跳变处产生拖尾;这时候应该使用中值滤波器(Median Filter),它对剔除这种孤立的随机脏点非常完美。

非常完美

但是捏~中值滤波器(Median Filter)属于非线性滤波器,在数学上没有固定的传递函数,因此无法像巴特沃斯滤波器那样用一条公式直接画出完美的理论频响曲线。
不过,我们可以通过实验法(输入不同频率的正弦波,观察输出的衰减)来近似模拟它的幅频响应。

简直是个天才
中值滤波器的频响曲线呈现梳状下落。它虽然也能抑制高频,但在高频段会有很多“旁瓣”(起伏);这也解释了为什么它最擅长剔除孤立的脏点,但如果要对波形进行精细的平滑润色,效果不如巴特沃斯等线性低通滤波器。
OKOK,hold on,这不是重点,我想说的是,模拟滤波器的频率响应是直观的,可以在 Bode 图里面看到频点上面的增益和相移,但是数字滤波器抽象的多。

这是鄙人的数字滤波器

以我浅薄的学识来看,我只知道石家庄的赵州桥
数字滤波器里面一个接一个的“桥拱”,本质上是移动平均滤波器的旁瓣。
形成原因可以用一句话概括:
sinc 滤波器在一个输出周期内对输入取平均;当窗口内恰好包含整数个正弦波周期时,正负部分完全抵消,形成零点;两个零点之间无法完全抵消,于是留下一个拱形旁瓣。

sinc1 在这段时间内,把调制器的高速样本求平均。
窗口内所有样本方向相同,平均后不衰减:

所以曲线从0 dB开始。

也就是梦开始的地方,也是延迟的来源




以:

为例,一个平均窗口里有1.5个周期。
其中一个完整周期可以抵消,但剩下半个周期无法抵消,所以平均值不为零。
频率从 增加到 时:在 处完全抵消;逐渐偏离整数周期,剩余量增大;在中间区域形成最大残余;接近 时又逐渐抵消;在 处再次变为零。
因此形成:

连续频段就呈现出一个接一个的桥拱。


红色部分就是在下降
真正的线性频率响应是这样的关系:
0:正; 1:负; 2:正; 3:负。



频率 | sinc1幅值 | sinc1衰减 |
|---|---|---|
0.212 | −13.46 dB | |
0.127 | −17.90 dB | |
0.091 | −20.82 dB |

库库降低

滤波器 | 衰减 |
|---|---|
sinc1 | −13.46 dB |
sinc3 | dB |
sinc5 | dB |
这正好对应图中第一个旁瓣:蓝色约 −13 dB;橙色约 −40 dB;绿色约 −67 dB。
零点位置没有变化,只是两个零点之间的残余越来越小。

当频率处于两个整数倍之间:相量不能构成闭合图形;会留下一个合成矢量;这个残余就是桥拱旁瓣。

因此:
桥拱越低,说明抽取前的带外信号和噪声越不容易混叠回目标带宽。
这些旁瓣来自一个根本原因:
sinc滤波器的时域系数是突然开始、突然结束的矩形窗口。
矩形窗口的傅里叶变换必然是 sinc,必然带有旁瓣。
如果把时域系数设计得更加平滑,例如使用复杂的高阶 FIR 系数,就可以:压低旁瓣;得到平坦通带;形成陡峭过渡带;得到很深的连续阻带。

这就很快了
在采样率高的 ADC 里面会放这个,场景一般是需要测量高达数十 kHz 的音频或机械振动信号,要求在截止频率前波形绝对不能失真(通带平坦度要求极高)。

我的 ADAQ7768-1 里面也有这个!
但代价是:系数数量增加;群延迟增大;阶跃建立时间增长,最终可以这样记忆:
整数个周期完全抵消,产生零点;非整数个周期不能完全抵消,产生桥拱旁瓣。
好的,我知道大家不爱学数学,也不爱学信号,那就看点图吧~
我会生成随机的一段数据,用数字滤波器和模拟滤波器分别模拟处理,看看频率响应的结果


浅蓝色是原始随机数据,可以看到大量高频噪声;模拟滤波和数字滤波后,波形都明显平滑。
两条滤波后曲线并不完全重合,因为:Butterworth与sinc3幅频响应不同;两者相位响应和群延迟不同;sinc3对600 Hz的衰减比Butterworth稍大。
这是两种滤波器最本质的区别。

模拟 Butterworth:响应连续、平滑;超过截止频率后单调下降;没有周期性零点;三阶滤波器最终趋近 dB/dec。

虚线是最终输出奈奎斯特频率1.6 kHz。虚线右边的信号如果没有被充分滤除,抽取后就会混叠到 kHz。

蓝色原始信号包含平坦的白噪声底,以及200 Hz、600 Hz、2.5 kHz、5 kHz和15 kHz单音。
模拟滤波后的橙线连续下降,没有深零点。
数字sinc3的绿线在:
附近形成非常深的陷波,正好重现了前面看到的“桥拱”。
直接抽取的蓝线产生明显混叠:

原始频率 | 3.2 kS/s采样后位置 |
|---|---|
200 Hz | 200 Hz |
600 Hz | 600 Hz |
2.5 kHz | 700 Hz |
5 kHz | 1.4 kHz |
15 kHz | 1 kHz |

输入频率 | 抽取后位置 | 模拟Butterworth | 数字sinc3 |
|---|---|---|---|
200 Hz | 200 Hz | 约0 dB | −0.17 dB |
600 Hz | 600 Hz | −0.71 dB | −1.52 dB |
2.5 kHz | 700 Hz | −29.70 dB | −35.23 dB |
5 kHz | 1.4 kHz | −47.75 dB | −41.86 dB |
15 kHz | 1 kHz | −76.38 dB | −73.97 dB |
这里可以看出一个重要现象:
sinc3并不是在所有带外频率都优于模拟Butterworth。
2.5 kHz靠近sinc3的第一个零点,因此sinc3抑制更强;5 kHz位于sinc3第一个旁瓣的拱顶附近,所以反而比模拟Butterworth少抑制约6 dB。
这就是数字sinc滤波器“零点很深,但零点之间又会拱起来”的实际影响。
处理方法 | 输出RMS |
|---|---|
不滤波直接抽取 | 1.015 |
模拟Butterworth | 0.818 |
数字sinc3 | 0.793 |
数字sinc3的RMS最低,但一部分原因是它对600 Hz有效信号也产生了1.52 dB衰减。因此:
输出RMS更低不一定代表测量更准确,还要检查目标信号是否也被滤波器衰减。
我倒是不敢说让所有人都懂数字滤波器,但是我是可以为用户提供信号链的独特见解。