越有魅力的事物,往往存在一种“反差”,即其存在两个相互关联的特性,但是各自表现得十分不同
————小白
一阶滞后滤波又称作RC低通滤波、一阶滤波、一阶惯性滤波、一阶低通滤波等,下文统一称为一阶滞后滤波。
01 - 一阶滞后滤波算法简介
嵌入式中的ADC数字滤波算法有很多,搜索一下会有常用的10种算法,一阶滞后滤波是其中一种,也是大名鼎鼎的一种,在这10种算法中,虽然一直有人评论其各有优缺点,各有使用场合,但是如果在条件十分受限的实际嵌入式项目中让我选择一种,即使知道或不知道数据源的特性,我都会毫不犹豫地选择一阶滞后滤波算法,数学算法公式为:
Y n = α X n + ( 1 − α ) Y n − 1 (1) Y_{n} = α X_{n} + (1 - α) Y_{n-1} \tag{1} Yn=αXn+(1−α)Yn−1(1)
式中: Y n Y_{n} Yn是本次滤波输出值, α α α是滤波系数, X n X_{n} Xn是本次采样, Y n − 1 Y_{n-1} Yn−1是上一次滤波输出。
公式十分简单,只有乘、加的操作并且只有一条计算公式,没有额外的数据计算。
02 - 硬件低通滤波器
下图为一阶滞后滤波所对应的硬件低通滤波器等效电路,其中:
Input
相当于于 X n X_{n} Xn:作为信号源的输入Output
相当于 Y n Y_{n} Yn:作为目标信号的输出电阻
相当于 α α α:作为滤波系统,设计实验测试阶段可调电容
相当于 Y n − 1 Y_{n-1} Yn−1:用于储存上一次的输出值
如果在原理图中看到类似的结构,可以认为添加了硬件低通滤波器,此等效电路算是比较简单的一种,还有比较复杂的需要有三极管等电子元件。
03 - 稳定滤波的原理
滤波的目标是过滤掉数据的各种干扰,得到期望的稳定值,使得系统收敛。下面用坐标轴对公式作一个解释, x x x轴作为时间Time, y y y轴作为AD值Value,AD采集过程中我们能够得到一段采集的数据输入输出记录:
就 x x x轴某一个时刻 T T T而言,我们只能得到当前时刻 T T T的输入值Input
和前面时刻的 ( T − 1 , T − 2 , … … 1 ) (T-1,T-2,……1) (T−1,T−2,……1)输出值Output
,我们把当前时刻得到的输入值记为 X n X_{n} Xn,紧挨着的上一个时刻的输出值记为 Y n − 1 Y_{n-1} Yn−1。滤波的目标是得到一个稳定值,何为稳定?什么样的值是稳定的?在不同时刻是否不同?根据一阶滞后滤波算法,如果要回答这些问题,无论如何我们只能假设在上一个时刻的输出值 Y n − 1 Y_{n-1} Yn−1是稳定值。
因为除开第一个数据,所有数据都有前驱,当前值的滤波与前驱有关,那么随着时间的推移,所有的数据历史会形成一个链条,相邻的项是有联系的,因此只要某个时刻的值发生了变化,那么后面的值都会随之变化,如果我们限定了这些变化的敏感度(与α有关),比如降低敏感度,那么在一个有限的波形内由于变化不敏感,就会过滤掉波动的数据,得到一个认为是收敛的值
根据假设,因为 Y n − 1 Y_{n-1} Yn−1是稳定值,所以 X n X_{n} Xn与它存在一个误差 e e e,也就是:
X n = Y n − 1 + e (2) X_{n} = Y_{n-1} + e \tag{2} Xn=Yn−1+e(2)
其中 e e e可正可负,我们代入公式(1)得到:
Y n = α X n + ( 1 − α ) Y n − 1 = α ( Y n − 1 + e ) + ( 1 − α ) Y n − 1