濾波算法(二)—— 中位值濾波算法

1、算法介紹

        中位值濾波算法的實現方法是採集N個週期的數據,去掉N個週期數據中的最大值和最小值,取剩下的數據的平均值。中位值濾波算法特別適用於會偶然出現異常值的系統。中位值濾波算法應用比較廣泛,比如用於一些比賽的評分,經常是去掉一個最高分去掉一個最低分,將其他評分取平均值作爲選手的最終得分。

優點:相比於平均值濾波算法,中位值濾波算法能夠有效濾除偶然的脈衝干擾。

缺點:與平均值濾波算法相同,中位值濾波算法也存在反應速度慢、滯後的問題。

2、實現代碼

        下面的代碼是中位值濾波的示例代碼。

float data[10];

float middleFilter(float in_data)
{
	float sum = 0;
	float temp[10];
	float change;
	int i,j;
	//記錄數據
	for(i=0; i<9; i++)
	{
		data[i]=data[i+1];
	}
	data[9] = in_data;
	//複製數據
	for(i=0; i<10; i++)
		temp[i] = data[i];
	//冒泡法排序
	for(i=1; i<10; i++)
		for(j=0; j<10-i; j++)
		{
			if(temp[i] > temp[i+1])
			{
				change = temp[i];
				temp[i] = temp[i+1];
				temp[i+1] = change;
			}
		}
	//求和
	for(i=1; i<9; i++)
		sum = sum + temp[i];
	//返回平均值
	return(sum/8);

}

        在上面的代碼中,分爲幾個步驟:

步驟1:讀取新數據,並更新數據數組;

步驟2:複製數據到臨時數組,以便保持原始數據的順序不變;

步驟3:對臨時數組進行排序;

步驟4:計算中位平均值。

3、示例

        下面我們通過一個示例來體會中位值濾波的作用,濾波對象爲車速信號,濾波效果如下圖所示。圖中,橫軸爲時間,單位:秒,縱軸爲速度,單位km/h。其中,藍色爲濾波前的數據,紅色爲濾波後的數據。有圖中可以看出,原始數據存在兩個異常值,可能是採集過程的數據干擾或數據處理時的異常等原因造成的。採用中位值濾波算法可以有效濾波這種異常值造成的影響。

相對於中位值濾波算法,平均值濾波算法則無法解決這個問題,如下圖所示,爲採用平均值濾波算法對相同的原始數據進行處理的效果,可以看到平均值濾波無法濾波異常值,而且異常值影響的時間比較長。

 

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