常见的滤波算法
文章目录一、中位值滤波法二、算数平均滤波法三、递推平均滤波法滑动平均滤波 Moving Average Filter四、中位值平均滤波法五、一阶滞后滤波法六、低通滤波法一、中位值滤波法优点能有效克服因偶然因素引起的波动干扰对温度、液位等变化缓慢的被测参数有良好的滤波效果。缺点对流量速度等快速变化的参数不宜。#defineN11charfilter(void){charvalue_buf[N];chari,j,temp;for(i0;iN;i){value_buf[i]get_ad();delay();}for(j0;jN-1;j){for(i0;iN-j;i){if(value_buf[i]value_buf[i1]){tempvalue_buf[i];value_buf[i]value_buf[i1];value_buf[i1]temp;}}}returnvalue_buf[(N-1)/2];}二、算数平均滤波法说明连续取N个采样值进行算术平均运算。优点试用于对一般具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值信号在某一数值范围附近上下波动。缺点对于测量速度较慢或要求数据计算较快的实时控制不适用#defineN11charfilter(void){intsum0,i0;for(i0;iN;i){sumget_ad();delay();}return(char)(sum/N);}三、递推平均滤波法滑动平均滤波 Moving Average Filter说明把连续N个采样值看成一个队列队列长度固定为N每次采样到一个新数据放入队尾并扔掉队首的一次数据。把队列中的N各数据进行平均运算即获得新的滤波结果优点对周期性干扰有良好的抑制作用平滑度高 适用于高频振荡的系统。缺点灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不适于脉冲干扰较严重的场合 不适合用于开关电源电路。#defineN12charvalue_buf[N];chari0;charfilter(void){charcount0;intsum0;value_buf[i]get_ad();if(iN){i0;//先进先出}for(count0;countN;count){sumvalue_buf[count];}return(char)(sum/N);}四、中位值平均滤波法说明采一组队列去掉最大值和最小值优点融合了两种滤波的优点。对于偶然出现的脉冲性干扰可消除有其引起的采样值偏差。对周期干扰有良好的抑制作用平滑度高适于高频振荡的系统。缺点测量速度慢。#defineN12charfilter(void){chari0,j0,temp0;charvalue_buf[N];intsum0;for(i0;iN;i){value_buf[i]get_ad();delay();}for(j0;jN-1;j){for(i0;iN-j;i){if(value_buf[i]value_buf[i1]){tempvalue_buf[i];value_buf[i]value_buf[i1];value_buf[i1]temp;}}}for(i1;iN-1;i){sumvalue_buf[i];}return(char)(sum/(N-2));}五、一阶滞后滤波法优点对周期性干扰具有良好的抑制作用适用于波动频率较高的场合。缺点相位滞后灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率1/2的干扰信号。#defineA50charvalue0;charfilter(void){charnew_value0;new_valueget_ad();return(100-A)*valuea*new_value;}六、低通滤波法#defineA0.25charvalue;//value 为已有值charfilter(void){charnew_value0;new_valueget_ad();return(a*new_value(1-a)*value);}