1、算法介绍        

       平均值滤波算法是比较常用,也比较简单的滤波算法。在滤波时,将N个周期的采样值计算平均值,算法非常简单。当N取值较大时,滤波后的信号比较平滑,但是灵敏度差;相反N取值较小时,滤波平滑效果差,但灵敏度好。

优点:算法简单,对周期性干扰有良好的抑制作用,平滑度高,适用于高频振动的系统。

缺点:对异常信号的抑制作用差,无法消除脉冲干扰的影响。

2、实现代码

        下面的代码是平均值滤波的示例代码。

float data[10];

float averageFilter(float in_data)
{
	float sum = 0;
	for(int i=0; i<9; i++)
	{
		data[i]=data[i+1];
		sum = sum + data[i];
	}
	data[9] = in_data;
	sum = sum + data[9];
	
	return(sum/10);

}

在代码中,data[]为全局变量,它用来记录10个周期的采样值,averageFilter()为滤波函数,它的输入为新采集到的数据,函数中,首先将data[]中的数据进行移位,并将新采集到的数据保存到data[]中,同时计算data[]中10个数据的和,最后返回10个数据和的平均值。

3、示例

        下面我们通过一个示例来体会平均值滤波的作用,滤波对象为车速信号,滤波效果如下图所示。图中,横轴为时间,单位:秒,纵轴为速度,单位km/h。其中,蓝色为滤波前的数据,红色为滤波后的数据。可见,平均值滤波对数据进行了很大程度的平滑,但是,数据存在滞后。

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐