
十大滤波算法程序大全(版).doc
13页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 11unsigned char MiddlevalueFilter(){ unsigned char value_buf[N]; unsigned char i,j,k,temp; for(i=0;i
这种信号的特点是 有一种平均值,信号在某一数值范畴附近上下波动缺陷:对于测量速度较慢或规定数据计算较快的实时控制不合用/#define N 12char filter(){ unsigned int sum = 0; unsigned char i; for (i=0;i 对于偶尔浮现的脉冲性干扰,可消 除有其引起的采样值偏差对周期干扰有良好的克制作用, 平滑度高,适于高频振荡的系统 缺陷:测量速度慢*********************************************/#define N 12uchar filter(){ unsigned char i,j,k,l; unsigned char temp,sum=0,value; unsigned char value_buf[N],; for(i=0;i 对周期性干扰有良好的克制作用,平滑度高;试用于高频振荡 的系统 缺陷:测量速度慢*************************************************/char filter(char new_data,char queue[],char n){ char max,min; char sum; char i; queue[0]=new_data; max=queue[0]; min=queue[0]; sum=queue[0]; for(i=n-1;i>0;i--) { if(queue[i]>max) max=queue[i]; else if (queue[i] /#define A 10#define N 12unsigned char data[];unsigned char filter(data[]){ unsigned char i; unsigned char value,sum; data[N]=GetAD(); if(((data[N]-data[N-1])>A||((data[N-1]-data[N])>A)) data[N]=data[N-1]; //else data[N]=NewValue; for(i=0;i
