1、算法介绍
一阶滤波算法是比较常用的滤波算法,它的滤波结果=a*本次采样值+(1-a)*上次滤波结果,其中,a为0~1之间的数。一阶滤波相当于是将新的采样值与上次的滤波结果计算一个加权平均值。a的取值决定了算法的灵敏度,a越大,新采集的值占的权重越大,算法越灵敏,但平顺性差;相反,a越小,新采集的值占的权重越小,灵敏度差,但平顺性好。
优点:对周期干扰有良好的抑制作用,适用于波动频率比较高的场合,它不用记录历史数据。
缺点:滞后、灵敏度低。
2、实现代码
下面的代码是一阶滤波的示例代码。
float final=0;
float a=0.25;
float firstOrderFilter(float in_data)
{
final = a*in_data + (1-a)*final;
return(final);
}
代码实现比较简单,与算法介绍中一致,在这里,a取值为0.25。
3、示例
下面我们通过一个示例来体会一阶滤波的作用,滤波对象为车速信号,滤波效果如下图所示。图中,横轴为时间,单位:秒,纵轴为速度,单位km/h。其中,蓝色为滤波前的数据,红色为滤波后的数据。有图中可以看出,滤波算法使原始信号变得平滑,但是带来了滞后。