单片机ADC采样算法----加权递推平均滤波法

479 阅读1分钟

        加权递推平均滤波法是对递推平均滤波法的改进,即不同时刻的数据加以不同的权。通常是,越接近现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。

      下面直接看C代码的实现

define N 12

unsigned int  coe[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
unsigned int  sum_coe = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12;

unsigned int filter8( void )                    
{
    unsigned int count;
    unsigned int value_buf[N];
    unsigned long int  sum = 0;
    for( count = 0; count < N; count++ )
    {
        value_buf[count] =  ReadVol_CH2();
    }
    for( count = 0; count < N; count++ )
    {
        sum += value_buf[count] * coe[count];
    }
    return ( unsigned int )( sum / sum_coe );
}

void main( void )
{
    while( 1 )
    {
        val = ReadVol_CH2();        //读取AD采样值
        val1 =  filter8();
        printf( "A%d\r\n", val );
        printf( "B%d\r\n", val1 );
    }
}

主函数中实时采样AD端口的波形值,然后将采样值经过加权递推平均滤波法进行滤波,然后用串口输出原始采样值和滤波后的值,并在串口波形软件上显示采样的数据波形。

图中蓝色曲线为原始数据曲线,橙色曲线为经过滤波算法后的曲线。