单片机ADC采样算法----中位值平均滤波法

发布者:Serendipity22最新更新时间:2020-03-30 来源: eefocus关键字:单片机  ADC  采样算法  中位值平均滤波法 手机看文章 扫描二维码
随时随地手机看文章

中位值平均滤波法滤波法就是通过连续采样N个数据,然后对数据从小到大排序,然后去掉最大值和最小值,对剩余的N-2个值计算算数平均值。也就是中位值滤波和算数平均滤波的结合。


下面看C代码的实现


#define N 12

 

unsigned int filter5( void )

{

    unsigned int count, i, j, temp;

    unsigned int value_buf[N];

    int  sum = 0;

    for( count = 0; count < N; count++ )

    {

        value_buf[count] =  ReadVol_CH2();

    }

    for( j = 0; j < N - 1; j++ )

    {

        for( i = 0; i < N - j - 1; i++ )

        {

            if( value_buf[i] > value_buf[i + 1] )

            {

                temp = value_buf[i];

                value_buf[i] = value_buf[i + 1];

                value_buf[i + 1] = temp;

            }

        }

    }

    for( count = 1; count < N - 1; count++ )

    {

        sum += value_buf[count];

    }

    return ( unsigned int )( sum / ( N - 2 ) );

}

}

N为每次采样的数据个数


void main( void )

{

    while( 1 )

    {

        val = ReadVol_CH2();            //读取AD采样值

        val1 =  filte5();

        printf( "A%drn", val );

        printf( "B%drn", val1 );

    }

}

主程序中循环读取AD口的采样值,并将采样值通过中位值平均滤波算法进行滤波,通过串口分别打印原始采样值和滤波后的值,并通过串口将数据打印来,并在串口波形软件上显示。

蓝色曲线为采样的原始数据波形图,橙色曲线为经过中位值滤波算法滤波后的波形图。通过两组曲线可以看出,经过中位值平均滤波算法后,可以有效的滤除系统中出现的脉冲干扰和毛刺,使得采样数据更加平滑。


但是中位值平均滤波算法需要额外开辟存储空间,用了存储采样的数据,同时要对采样的数据进行排序,计算速度会变慢,实时性较差,只适合在变化较慢的系统中应用。


关键字:单片机  ADC  采样算法  中位值平均滤波法 引用地址:单片机ADC采样算法----中位值平均滤波法

上一篇:单片机ADC采样算法----限幅平均滤波法
下一篇:单片机ADC采样算法----中位值滤波法

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved