中值滤波在一维数据处理中的应用

中值滤波在一维数据处理中的应用


  滤波操作是单片机接受数据完之后的常用操作之一,中值滤波是用来处理椒盐噪声的常用操作。椒盐噪声即脉冲噪声,指数据接受到一个类似于脉冲一样的极大值或者极小值,例如在处理温度数据时,正常的温度数据都集中在14-30摄氏度。但有的时候会收到大于100摄氏度的极大值,滤除这种错误数据就可以采用中值滤波法来处理。
  中值滤波是一种常用的图像处理算法,但它也可以用在一维数据的滤波上。中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
  具体的操作方案为取最近获取的5次数据,取其中值,将其作为当前获取的数值输出。具体实现的c语言代码如下

		//中值滤波,缺陷:会晚两帧的数据时间,并且拐点峰股值会偏差两帧数据
		//temp为传感器获取到的数值,temp5是最近的五次数值temprank5是经过排序后的最近的5次数值
		for(i=4;i>0;i--)
			temp5[i]=temp5[i-1];
		temp5[0]=temp;
		for(i=0;i<5;i++)//将temp5传给temprank5
			temprank5[i]=temp5[i];
		for(i=0;i<5;i++)//对temprank5进行冒泡排序
		{
	        for (j = 0; j < 5 - 1 - i; j++)
		        if (temprank5[j] > temprank5[j + 1])
		        {
		            x =temprank5[j];
		            temprank5[j] = temprank5[j + 1];
		            temprank5[j + 1] = x;
		        }
		}
		ADCData=temprank5[2]+0.5;//四舍五入取整
		//中值滤波结束

你可能感兴趣的:(stm32,数据处理,中值滤波)