一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。
一阶低通滤波的算法公式为:
X(n) = get_ad();
Y(n) = αX(n) + (1-α)Y(n-1);
式中:α=滤波系数;X(n)=本次采样值;Y(n-1)=上次滤波输出值;Y(n)=本次滤波输出值。
一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,得到有效滤波值,使得输出对输入有反馈作用。
现在开一个10ms定时器
void timer_10ms{
X(n) = get_ad();
Y(n) = αX(n) + (1-α)Y(n-1);
if( fabs(Y(n)-X(n)) < 0.001 ){
TIMER_DISABLE();
}
}
通常a=0.9-0.999
一开始Y会非常小,之后会逐渐靠近X,最后关闭定时器,平滑滤波完成。
实际应用过程中,我们不断读取Y的值就可以得到平滑的数据了。