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。其中,藍色爲濾波前的數據,紅色爲濾波後的數據。有圖中可以看出,濾波算法使原始信號變得平滑,但是帶來了滯後。