技術積累 — 加權平均值濾波演算法
阿新 • • 發佈:2019-02-07
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;