ADC中的滤波算法

STM32的AD最大输入时钟不超过14MHZ,最高采样速度1us,可以采用DMA或者内部的基本定时器/高级定时器来触发,利用模拟看门狗监控所选择的的所有通道,如果超过模拟的 阀[fá] 值,将产生中断。

单次AD+DMA无意义,一般是通过DMA将AD高速采集的值进行缓冲,缓冲完毕进入DMA中断进行滤波后输出。http://blog.csdn.net/i792439187/article/details/8825397

采用比赛中的去掉最大最小求平均的方法

u16 ADC_Filter(u16 *Dbuff,u8 n)
{
    u8 i;
    u16 sum=0,aver=0,max=Dbuff[0],min=Dbuff[0];    
    for(i=0;i<n;i++)    
    {
        if(Dbuff[i]>max)
            max=Dbuff[i];
        if(Dbuff[i]<min)
            min=Dbuff[i];
        sum+=Dbuff[i];
    }
    aver=(sum-max-min)/n;
    return aver;
}

单片机用到的几种滤波算法

1 限幅滤波算法:2次的插值绝对值不大于规定值,否则放弃。用于处理变化较为缓慢的数据

2 中值滤波算法:采样N(通常为奇数)个值,然后从小到大排列,取中间值。适应于变化慢的数据,避免偶发脉动干扰。

3 算术平均算法:采样N(N一般取4、8、16、32之类的2的整数幂,以便在程序中用移位操作来代替除法)个值,求平均输出。

4中值算术平均:采样N(奇数)个值,去掉最大最小再求平均。

5加权平均:N个值乘以对应权值然后求和,权值之后=1,且各对应权值要反映值的趋势变化。

6 滑动平均算法:避免前面的输出一个值需要采样N次。用环形队列(或静态数组,当达到最大值时回到0)实现。

7低通滤波算法:本次滤波的输出值主要取决于上次滤波的输出值(注意不是上次的采样值,这和加权平均滤波是有本质区别的),它不能滤除高于1/2采样频率的干搅信号

 

posted on 2017-02-08 16:41  杰瑞鼠  阅读(1939)  评论(0编辑  收藏  举报