1、限幅滤波法
*函数名称:AmplitudeLimiterFilter()-限幅滤波法 理解:使用前提是已知采回来的数值应该在什么范围或精确值
2、中位值滤波法 /**************************************************** #define N 11 unsigned char MiddlevalueFilter() { 是不是需要的执行时间比较长 放在定时中断或者DMA中断都会影响12864的显示速度 就像在DMA 中断里加了一个printf语句
/********************************************************* #define N 12 char filter() for (i=0;i 、 最基本的一种滤波方式 应该也是最常用的 但其滤波效果很中
4、递推平均滤波法(又称滑动平均滤波法) /*************************************************** #define N 12 unsigned char value_buf[N]; unsigned char filter() value_buf[i++] = get_ad(); //采集到的数据放入最高位 5、中位值平均滤波法(又称防脉冲干扰平均滤波法) /******************************************** #define N 12 uchar filter() { for(i=0;i for(i=1;i value = sum/(N-2); 6、递推中位值滤波法 char filter(char new_data,char queue[],char n) queue[0]=new_data; for(i=n-1;i>0;i--) i=n-2; return(sum); 7、限幅平均滤波法 /************************************************ unsigned char data[]; data[N]=GetAD();
/**************************************************** #define Thre_value 10 float Or_data[N]; void abs(float first,float second) void filter(void) //确定一阶滤波系数
9、加权递推平均滤波法 A、方法: 是对递推平均滤波法的改进,即不同时刻的数据加以不同的权 通常是,越接近现时刻的数据,权取得越大。 给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低 B、优点: 适用于有较大纯滞后时间常数的对象 和采样周期较短的系统 C、缺点: 对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号 不能迅速反应系统当前所受干扰的严重程度,滤波效果差 /************************************************************ #define N 12 const char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12}; unsigned char filter() for (i=0;i for (i=0,i sum/=sum_coe;
10、消抖滤波法 A、方法: 设置一个滤波计数器 将每次采样值与当前有效值比较: 如果采样值=当前有效值,则计数器清零 如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出) 如果计数器溢出,则将本次值替换当前有效值,并清计数器 B、优点: 对于变化缓慢的被测参数有较好的滤波效果, 可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动 C、缺点: 对于快速变化的参数不宜 如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统
/************************************************ *************************************************/ unsigned char filter() |
11、限幅消抖滤波法
A、方法:
相当于“限幅滤波法”+“消抖滤波法”
先限幅,后消抖
B、优点:
继承了“限幅”和“消抖”的优点
改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统
C、缺点:
对于快速变化的参数不宜
参考子程序1、9
第11种方法:IIR 数字滤波器
A. 方法:
确定信号带宽, 滤之。
Y(n) = a1*Y(n-1) + a2*Y(n-2) + ... + ak*Y(n-k) + b0*X(n) + b1*X(n-1) + b2*X(n-2) + ... + bk*X(n-k)
B. 优点:高通,低通,带通,带阻任意。设计简单(用matlab)
C. 缺点:运算量大。
11、IIR滤波例子
int BandpassFilter4(int InputAD4)
{
int ReturnValue;
int ii;
RESLO=0;
RESHI=0;
MACS=*PdelIn;
OP2=1068; //FilterCoeff4[4];
MACS=*(PdelIn+1);
OP2=8; //FilterCoeff4[3];
MACS=*(PdelIn+2);
OP2=-2001;//FilterCoeff4[2];
MACS=*(PdelIn+3);
OP2=8; //FilterCoeff4[1];
MACS=InputAD4;
OP2=1068; //FilterCoeff4[0];
MACS=*PdelOu;
OP2=-7190;//FilterCoeff4[8];
MACS=*(PdelOu+1);
OP2=-1973; //FilterCoeff4[7];
MACS=*(PdelOu+2);
OP2=-19578;//FilterCoeff4[6];
MACS=*(PdelOu+3);
OP2=-3047; //FilterCoeff4[5];
*p=RESLO;
*(p+1)=RESHI;
mytestmul<<=2;
ReturnValue=*(p+1);
for (ii=0;ii<3;ii++)
{
DelayInput[ii]=DelayInput[ii+1];
DelayOutput[ii]=DelayOutput[ii+1];
}
DelayInput[3]=InputAD4;
DelayOutput[3]=ReturnValue;
// if (ReturnValue<0)
// {
// ReturnValue=-ReturnValue;
// }
return ReturnValue;
}