XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX 作 者:文化人
XX 联系方式:
XX 版权声明:原创文章,欢迎评论和转载~转载时能告诉我一声就最好了
XX 要说的话:作者水平有限,难免有不足之处,恳请指正!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
写在前面:楼主最近接触到数据滤波的处理,在网上搜集了很多相关算法,现根据自己的理解整理出两种简单易用的。
算法整理:
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;