1. 程式人生 > >技術積累 — 加權平均值濾波演算法

技術積累 — 加權平均值濾波演算法

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 XX  作       者:ZHS(文化人)

 XX  聯絡方式:文章末尾Chat快問

 XX  要說的話:作者水平有限,難免有不足之處,懇請指正!

 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

寫在前面:樓主最近接觸到資料濾波的處理,在網上搜集了很多相關演算法,現根據自己的理解整理出兩種簡單易用的。

演算法整理:

        1、滑動平均值濾波演算法:

              程式碼實現:

char value_buff[N];         //N相當於選定一個視窗大小,對視窗資料做平均!
char i=0;
char filter()
{
    char count;
    int sum=0;
    value_buff[i++]=get_data();
    if(i==N)
        i=0;              	//當資料大於陣列長度,替換資料組的一個數據  相當於環形佇列更新,先進先出!
	for(count=0;count<N;count++)
       sum=value_buff[count];
	return (char)(sum/N);
}

              參考自這篇博文

        2、加權平均值濾波演算法:

        在計算機網路中,TCP協議棧對於網路擁塞控制,使用的就是這種演算法。

        具體的描述是:

               C : 新的取樣值;

               N : 取樣次數(N可以是常數,只要 S 的量程足夠,N可以任意調整);

               新的平均值S = (舊的平均值S * (N - 1)+ C)/ N,對於第一次的取樣值可以直接賦值給平均值S;

        程式碼實現可以寫成:

if(first)
{
	S = C;			//第一次的取樣值直接賦給平均值
}
S = (S * (N - 1) + C)/N;