濾波算法(一)—— 平均值濾波算法

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。其中,藍色爲濾波前的數據,紅色爲濾波後的數據。可見,平均值濾波對數據進行了很大程度的平滑,但是,數據存在滯後。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章