数字滤波--递推平均滤波

#define  RM_BUF_LEN                         10  /*递推数组的长度*/
uint16_t RM_Filter_Buf[RM_BUF_LEN];             /*保存数据的递推数组*/ 

uint16_t 
ADCx_Recursive_Mean_Filter(uint16_t get_adc)
{
	uint16_t sum = 0;
	uint8_t i;

	for(i = 0; i < RM_BUF_LEN - 1; i++) {
		RM_Filter_Buf[i] = RM_Filter_Buf[i+1];                /*数组中所有数据左移一位 第一个数据扔掉*/
		sum += RM_Filter_Buf[i];                              /*计算递推数组中处最后一个前面所有数据的和*/
	}

	RM_Filter_Buf[RM_BUF_LEN - 1] = get_adc;                  /*最后一位是新采集的数据*/

	sum += RM_Filter_Buf[RM_BUF_LEN - 1];                     /*计算递推数组所有数据的和*/

	sum = sum / RM_BUF_LEN;

	return sum;	
}

1、名称:
    递推平均滤波法(滑动平均滤波法)
2、方法:
    把连续取得的N个采样值看成一个队列,队列的长度固定为N,
    每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则),
    把队列中的N个数据进行算术平均运算,获得新的滤波结果。
3、优点:
    对周期性干扰有良好的抑制作用,平滑度高;
    适用于高频振荡的系统。
4、缺点:
    灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差;
    不易消除由于脉冲干扰所引起的采样值偏差;
    不适用于脉冲干扰比较严重的场合;
    比较浪费RAM。

猜你喜欢

转载自blog.csdn.net/tyustli/article/details/86518424