1、算法介紹
平均值濾波算法是比較常用,也比較簡單的濾波算法。在濾波時,將N個週期的採樣值計算平均值,算法非常簡單。當N取值較大時,濾波後的信號比較平滑,但是靈敏度差;相反N取值較小時,濾波平滑效果差,但靈敏度好。
優點:算法簡單,對週期性干擾有良好的抑制作用,平滑度高,適用於高頻振動的系統。
缺點:對異常信號的抑制作用差,無法消除脈衝干擾的影響。
2、實現代碼
下面的代碼是平均值濾波的示例代碼。
float data[10];
float averageFilter(float in_data)
{
float sum = 0;
for(int i=0; i<9; i++)
{
data[i]=data[i+1];
sum = sum + data[i];
}
data[9] = in_data;
sum = sum + data[9];
return(sum/10);
}
在代碼中,data[]爲全局變量,它用來記錄10個週期的採樣值,averageFilter()爲濾波函數,它的輸入爲新採集到的數據,函數中,首先將data[]中的數據進行移位,並將新採集到的數據保存到data[]中,同時計算data[]中10個數據的和,最後返回10個數據和的平均值。
3、示例
下面我們通過一個示例來體會平均值濾波的作用,濾波對象爲車速信號,濾波效果如下圖所示。圖中,橫軸爲時間,單位:秒,縱軸爲速度,單位km/h。其中,藍色爲濾波前的數據,紅色爲濾波後的數據。可見,平均值濾波對數據進行了很大程度的平滑,但是,數據存在滯後。