1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C语言实现的滑动平均滤波算法

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

时间:2023-05-10 08:21:56

相关推荐

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

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

因为在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;}elseif(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函数相比。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。