十大滤波算法..doc
文本预览下载声明
十大滤波算法程序大全(精心整理版)1、限幅滤波法*函数名称:AmplitudeLimiterFilter()-限幅滤波法*优点:能有效克服因偶然因素引起的脉冲干扰*缺点:无法抑制那种周期性的干扰,且平滑度差*说明:? 1、调用函数???? GetAD(),该函数用来取得当前值? 2、变量说明???? Value:最近一次有效采样的值,该变量为全局变量???? NewValue:当前采样的值???? ReturnValue:返回值? 3、常量说明???? A:两次采样的最大误差值,该值需要使用者根据实际情况设置*入口:Value,上一次有效的采样值,在主程序里赋值*出口:ReturnValue,返回值,本次滤波结果****************************************************/#define? A?? 10unsigned char Valueunsigned char AmplitudeLimiterFilter(){?? unsigned char NewValue;?? unsigned char ReturnValue;?? NewValue=GatAD();?? if(((NewValue-Value)A))||((Value-NewValue)A)))?? ReturnValue=Value;?? else ReturnValue=NewValue;?? return(ReturnValue);}
2、中位值滤波法
/*****************************************************函数名称:MiddlevalueFilter()-中位值滤波法*优点:能有效克服因偶然因素引起的波动干扰;对温度、液?????? 位等变化缓慢的被测参数有良好的滤波效果*缺点:对流量,速度等快速变化的参数不宜*说明:? 1、调用函数???? GetAD(),该函数用来取得当前值???? Delay(),基本延时函数? 2、变量说明???? ArrDataBuffer[N]:用来存放一次性采集的N组数据???? Temp:完成冒泡法试用的临时寄存器???? i,j,k:循环试用的参数值? 3、常量说明???? N:数组长度*入口:*出口:value_buf[(N-1)/2],返回值,本次滤波结果*****************************************************/
#define N 11
unsigned char MiddlevalueFilter()
{? unsigned char value_buf[N];? unsigned char i,j,k,temp;? for(i=0;iN;i++)? {??? value_buf[i] = get_ad();??? delay();? }? for (j=0;jN-1;j++)? {?? for (k=0;kN-j;k++)?? {??? if(value_buf[k]value_buf[k+1])???? {?????? temp = value_buf[k];?????? value_buf[k] = value_buf[k+1];?????? value_buf[k+1] = temp;???? }?? }? }? return value_buf[(N-1)/2];}
3、算术平均滤波法
/*********************************************************说明:连续取N个采样值进行算术平均运算优点:试用于对一般具有随机干扰的信号进行滤波。这种信号的特点是????? 有一个平均值,信号在某一数值范围附近上下波动。缺点:对于测量速度较慢或要求数据计算较快的实时控制不适用。**********************************************************/
#define N 12
char filter(){? unsigned int sum = 0;? unsigned char i;
? for (i=0;iN;i++)? {??? sum + = get_ad();??? delay();? }? return(char)(sum/N);}
4、递推平均滤波法(又称滑动平均滤波法)
/***************************************************说明:把连续N个采样值看成一
显示全部