改良中位數無滯後濾波演算法

2021-07-24 16:27:45 字數 1447 閱讀 6053

各種濾波演算法介紹,見

其中中位數濾波演算法在對慢速,偶然因素引起的脈衝干擾的訊號濾波效果比較突出。

但是如果乙個訊號(下圖)既快速又有脈衝干擾,還希望濾波結果在沒有脈衝干擾時沒有滯後或滯後較小,那應該選哪種濾波演算法呢?很顯然,現有演算法都不能滿足要求。

首先,訊號中有脈衝干擾,一般情況下,直接用中位數濾波就可以,但是這是一相對比較快速的訊號,我們的系統要求滯後不能太多或者沒有滯後。這時有人會說,「濾波肯定會帶來滯後」,no,我的改良濾波演算法可以做到既不滯後,又能把脈衝干擾盡可能的消除。

int16 last_g_countervalue_l[30];

int16 last_g_countervalue_l_sort[30];

int16 g_countervalue_l_filter = 0;

int16 last_g_countervalue_l_filter[5];

void speedfeedbackfilter(void)

sort_int16queue(last_g_countervalue_l_sort,30);

templ=(last_g_countervalue_l_sort[14]+last_g_countervalue_l_sort[15])/2;

if(abs(g_countervalue_l-templ)>6)

}else

update_int16queue(last_g_countervalue_l_filter,5,g_countervalue_l_filter);

}

其中用到的子函式有:

update_int16queue,更新陣列,引數分別是陣列名,陣列長度,要插入的新資料。

void update_int16queue(int16 *str,int length,int16 new_data)

*str = new_data;

}

sort_int16queue,排序陣列。

void sort_int16queue(int16 *str,int length)

}}

計算連續若干場資料的中位數,和當前場比較,如果在一定範圍內,認為沒有脈衝干擾,濾波結果就是實際測量結果,如果超過一定範圍,認為發生了脈衝干擾,根據前幾場資料的斜率走向確定這場資料或者直接用算出來的中位數做為濾波結果。該演算法經過實際測試,效果良好。

因為最近重灌過系統,濾波結果的圖找不到了,如果你的資料也有這種脈衝干擾,不妨試試。

快速的資料中途會有連續若干個數突然急劇偏大或偏小,即所謂出現脈衝干擾,但概率較小。

BFPRT(中位數的中位數)演算法

又稱為 中位數的中位數演算法 該演算法由 blum floyd pratt rivest tarjan 在1973年提出,最壞時間複雜度為o n 最差的空間複雜度為o logn 演算法步驟 1 將 n 個元素劃分為 n 5 個組,每組 5 個元素,若有剩餘,捨去 2 使用排序方法找到 n 5 個組中...

演算法 中位數計算

中位數 median 1 定義 一組資料按從小到大 或從大到小 的順序依次排列,處在中間位置的乙個數 或最中間兩個資料的平均數,注意 和眾數不同,中位數不一定在這組資料中 注 當個數為基數時,取最中間位置的數 當個數為偶數時,取最中間兩個數的平均數。2 從小到大排序,可以先用氣泡排序,然後取中位數,...

BFPRT演算法(中位數之中位數)初窺 五

bfprt演算法的作者是5位真正的大牛 blum floyd pratt rivest tarjan 該演算法入選了在stackexchange上進行的當今世界十大經典演算法,而演算法的簡單和巧妙頗有我們需要借鑑學習之處。bfprt解決的問題十分經典,即從某n個元素的序列中選出第k大 第k小 的元素...