钻石会员
主题
帖子
积分13782
阅读权限50
注册时间2010-5-7
最后登录1970-1-1
在线时间 小时
|
很多时候,我们在编程中需要用到滑动滤波,最简单的滑动滤波方式是将数组依次前移,最后一个元素更新为最新加入的数据,再求和求平均,代码如下:
static u16 Sum;
static u8 Arr[16];
static u8 i;
u8 Average;
for(i=0; i i<15; i++)
{
Arr[i+1] = Arr[i]; // 数组依次前移
}
Arr[15] = NewData; // 更新新数据
Sum = 0;
for(i=0; i<16; i++)
{
Sum += Arr[i]; // 累加
}
Average = Sum / 16; // 求平均
这种方式每次添加新数据都会将所有的成员移动一次,所有的成员累加,为了提高效率可以修改代码如下:
Sum -= Arr[i]; // 减去旧数据
Arr[i] = NewData; // 更新新数据
Sum += Arr[i]; // 新数据累加
Average = Sum / 16; //求平均
i ++;
if(i >= 16)
{
i = 0;
}
这样的话,每次更新数据前,先减去旧数据,再将旧数据更新为新数据,累加再求平均,
每次更新新数据,只需做一次加法,一次减法,一次除法和两次赋值操作就可以了,效率有明显提高,代码量也少很多。
|
|