#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。