C语言实现的滑动平均滤波算法

来源:互联网 发布:淘宝大学 老师 编辑:程序博客网 时间:2024/06/01 20:02

    最近采集压力传感器的电压信号,采集到的数据波动挺大的,所以采用滤波的方法进行处理一下。

    因为在matlab中依靠matlab的画图函数很容易看到滤波后的数据图像,进而验证滤波效果。

    所以首先将采集到的原始数据保存到TXT文档里面,然后导入到matlab中,在matlab中对数据进行滤波。

    在matlab中采用了三种滤波方法:1、滑动平均滤波 2、中值滤波 3、卡尔曼滤波

    在对比了三种滤波之后的图像之后,选择了第一种滑动平均滤波的方法。在matlab中有专门的函数:smooth(变量),但是我们要用C语言实现这个功能。

    我依据滑动平均滤波的原理进行了程序编写,对于数据开始部分和结尾部分做了一些改变,得到的滤波效果还不错,与matlab的滤波效果差异很小。

    话不多说,上代码:

#define size 6000//数组大小#define N 12//滑动平均滤波计算平均值时所取的点数/*上面两句在使用下面这个函数的时候加到程序的开头*/void Smooth(float data[]){    Sum1=0;    for(int j=0;j<size;j++)    {        if(j<N/2)        {            for(int k=0;k<N;k++)            {                Sum1+=data[j+k];            }            data[j]=Sum1/N;        }        else            if(j<size -N/2)            {                for(int k=0;k<N/2;k++)                {                    Sum1+=(data[j+k]+data[j-k]);                }                data[j]=Sum1/N;            }            else            {                for(int k=0;k<size-j;k++)                {                    Sum1+=data[j+k];                }                for(int k=0;k<(N-size+j);k++)                {                    Sum1+=data[j-k];                }                data[j]=Sum1/N;            }        Sum1=0;    }}

 

    这是我根据我写的滑动平均算法做了点改动,下面看看滤波效果图



 蓝色的线是原始数据图像,红色的线是滤波之后的数据图像


    这张图中红色的是原始数据图像,绿色的线是matlab自带的smooth函数滤波之后的图像,蓝色的线是我自己用C语言写的滤波算法滤波之后的数据图像,都是滤波20次。

    可以看出这个移动平均滤波算法能够达到要求,并且可以和matlab中的smooth函数相比。

    就讲到这里吧,如果有问题可以在评论区留言,希望能够对大家有用,谢谢大家观看。

原创粉丝点击