这个AD滤波算法是不是有问题啊?

2020-02-10 08:58发布

递推平均滤波法(又称滑动平均滤波法)
#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就付了一次值,如何求平均?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
R88
1楼-- · 2020-02-11 02:04
albert_w 发表于 2013-10-25 20:41
对不起, 只有平均没有滑动.... 顺手贴一个刚刚写的硬件测试代码吧

后面的判断是用在buffer不满是也能出有 ...

他这个滑动貌似是先进先出原则,看您的程序,貌似不是啊。。
asdmaill
2楼-- · 2020-02-11 04:36
 精彩回答 2  元偷偷看……
asdmaill
3楼-- · 2020-02-11 08:22
for(k=0;k<10;k++)//将待排序数据传入排序缓存
    {
        sort_buff[k] = Motor_U[k];
    }
    data_sort(sort_buff);  //调用数据排序程序
    Motor_V = (sort_buff[1]+sort_buff[2]+sort_buff[3]+sort_buff[4]+
               sort_buff[5]+sort_buff[6]+sort_buff[7]+sort_buff[8])>>3;  //计算母线电压


//----------------------------------------------------------------
//数据排序程序
//----------------------------------------------------------------
unsigned int data_sort(unsigned int sort_buff[10])
{
    unsigned int  swap_data;
    unsigned char j=0,k=0;

         for(k=0;k<=9;k++)             //数据排序
         {   
            for(j=k+1;j<10;j++)
            {
                if(sort_buff[k]>sort_buff[j])
               {
                 swap_data  = sort_buff[k];
                 sort_buff[k] = sort_buff[j];
                 sort_buff[j] = swap_data;
               }

            }
         }
    return sort_buff[10];  
}
asdmaill
4楼-- · 2020-02-11 10:36
干脆贴出来,滑动排序,去极值,然后取平均
albert_w
5楼-- · 2020-02-11 13:43
R88 发表于 2013-10-26 09:09
的确,我该之后的程序只是平均,没有滑动。。但是楼主位的程序看起来真的不对,原帖如下:
http://www.am ...

sum = value_buf[count];//?????弄成+=就对了
albert_w
6楼-- · 2020-02-11 19:17
R88 发表于 2013-10-26 09:09
的确,我该之后的程序只是平均,没有滑动。。但是楼主位的程序看起来真的不对,原帖如下:
http://www.am ...

我也是先进先出的, 看temp[iter], 在转圈. 缓冲区其实可以理解为32成员的环形. 刚被替换的位置iter要转一圈才再次轮到.
只是求和的时候偷懒了下, 利用上次的和,直接运算了两个元素. 坏处就是你要上带符号数了

一周热门 更多>