递推平均滤波法(又称滑动平均滤波法)
#define N 12
char value_buf[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buf[i++] = get_ad();
if ( i == N ) i = 0;
for ( count=0;count<N,count++)
sum = value_buf[count];//?????
return (char)(sum/N);
}
那个value_buf就付了一次值,如何求平均?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
- uint ad_filter(uchar channel)
- {
- /*递推平均滤波法(又称滑动平均滤波法)*/
- #define N 12 //滤波初始化
- uint value_buf[N];
- uchar count;
- uint sum=0;
- uchar i=0;
- for(count=0;count<N;count++)
- {
- value_buf[i++]=MessAD(channel);
- sum+=value_buf[count];
- }
- return (sum/N);
- }
复制代码那就给value_buf赋过一次值啊。。。
后面的判断是用在buffer不满是也能出有效数字, 因为我的系统滑动时间达到了3秒, 不能让这三秒不出数或者出无效数. 坏处当然是需要做除法,影响速度, 如果都视着满buffer处理, 直接移位即可
- oldDat = temp[iter];
- temp[iter] = readD;
- iter = ++iter%32;
- sum = sum + readD - oldDat;
- if (len<32)
- {
- len++;
- }
- readD = sum / len;
复制代码的确,我该之后的程序只是平均,没有滑动。。但是楼主位的程序看起来真的不对,原帖如下:
http://www.amobbs.com/forum.php? ... amp;highlight=ad%2B滤波
一周热门 更多>