2022年种经典软件滤波的原理和实现.docx
精选学习资料 - - - - - - - - - 11 种经典软件滤波的原理和实现1、限幅滤波法 <又称程序判定滤波法) A、方法:依据体会判定,确定两次采样答应的最大偏差值 <设为 A)每次检测到新值时判定:假如本次值与上次值之差 <=A,就本次值有效假如本次值与上次值之差 B、优点:>A, 就本次值无效 , 舍弃本次值 , 用上次值代替本次值能有效克服因偶然因素引起的脉冲干扰 C、缺点 无法抑制那种周期性的干扰平滑度差2、中位值滤波法 A、方法:连续采样 N 次<N取奇数)把 N次采样值按大小排列 取中间值为本次有效值 B、优点:能有效克服因偶然因素引起的波动干扰 对温度、液位的变化缓慢的被测参数有良好的滤波成效 C、缺点:对流量、速度等快速变化的参数不宜3、算术平均滤波法 A、方法:连续取 N个采样值进行算术平均运算 N值较大时:信号平滑度较高,但灵敏度较低 N值较小时:信号平滑度较低,但灵敏度较高 N值的选取:一般流量,N=12;压力: N=4 B、优点:适用于对一般具有随机干扰的信号进行滤波 这样信号的特点是有一个平均值,信号在某一数值范畴邻近上下波动 C、缺点:对于测量速度较慢或要求数据运算速度较快的实时掌握不适用 比较铺张 RAM 4、递推平均滤波法 <又称滑动平均滤波法) A、方法:把连续取 N 个采样值看成一个队列 队列的长度固定为 N 每次采样到一个新数据放入队尾 , 并扔掉原先队首的一次数据 . 先进先出原就 > 把队列中的 N个数据进行算术平均运算 , 就可获得新的滤波结果N值的选取:流量,N=12;压力: N=4;液面, N=412;温度, N=14 1 / 9 名师归纳总结 - - - - - - -第 1 页,共 9 页精选学习资料 - - - - - - - - - B、优点:对周期性干扰有良好的抑制作用,平滑度高 适用于高频振荡的系统 C 、缺点:灵敏度低 对偶然显现的脉冲性干扰的抑制作用较差 不易排除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严峻的场合 比较铺张 RAM 5、中位值平均滤波法 <又称防脉冲干扰平均滤波法) A、方法:相当于“ 中位值滤波法”+“ 算术平均滤波法”连续采样 N个数据,去掉一个最大值和一个最小值 然后运算 N-2 个数据的算术平均值 N值的选取: 314 B、优点:融合了两种滤波法的优点 对于偶然显现的脉冲性干扰,可排除由于脉冲干扰所引起的采样值偏差 C、缺点:测量速度较慢,和算术平均滤波法一样 比较铺张 RAM 6、限幅平均滤波法 A、方法:相当于“ 限幅滤波法”+“ 递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理 B、优点:融合了两种滤波法的优点 对于偶然显现的脉冲性干扰,可排除由于脉冲干扰所引起的采样值偏差 C、缺点:比较铺张 RAM 7、一阶滞后滤波法 A、方法:取 a=01 本次滤波结果 =<1-a )*本次采样值 +a*上次滤波结果 B、优点:对周期性干扰具有良好的抑制作用 适用于波动频率较高的场合 C、缺点:相位滞后,灵敏度低滞后程度取决于 a 值大小2 / 9 名师归纳总结 - - - - - - -第 2 页,共 9 页精选学习资料 - - - - - - - - - 不能排除滤波频率高于采样频率的 1/2 的干扰信号8、加权递推平均滤波法 A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权 通常是,越接近现时刻的数据,权取得越大;赐予新采样值的权系数越大,就灵敏度越高,但信号平滑度越低 B、优点:适用于有较大纯滞后时间常数的对象 和采样周期较短的系统 C、缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号 不能快速反应系统当前所受干扰的严峻程度,滤波成效差9、消抖滤波法 A、方法:设置一个滤波计数器 将每次采样值与当前有效值比较:假如采样值当前有效值,就计数器清零 假如采样值 <>当前有效值,就计数器 +1,并判定计数器是否 >=上限 N溢出 > 假如计数器溢出 , 就将本次值替换当前有效值 , 并清计数器 B、优点:对于变化缓慢的被测参数有较好的滤波成效 , 可防止在临界值邻近掌握器的反复开 C、缺点:对于快速变化的参数不宜/ 关跳动或显示器上数值抖动假如在计数器溢出的那一次采样到的值恰好是干扰值 , 就会将干扰值当作有效值导入系统10、限幅消抖滤波法 A、方法:相当于“ 限幅滤波法”+“ 消抖滤波法”先限幅 , 后消抖 B、优点:继承了“ 限幅” 和“ 消抖” 的优点改进了“ 消抖滤波法” 中的某些缺陷 , 防止将干扰值导入系统 C、缺点:对于快速变化的参数不宜第 11 种方法: IIR 数字滤波器A. 方法:确定信号带宽,滤之;Yn> = a1*Yn-1> + a2*Yn-2> + . + ak*Yn-k> + b0*Xn> + b1*Xn-1> + b2*Xn-2> + . + bk*Xn-k> 3 / 9 名师归纳总结 - - - - - - -第 3 页,共 9 页精选学习资料 - - - - - - - - - B. 优点:高通,低通,带通,带阻任意;设计简洁 用 matlab )C. 缺点:运算量大;/- 软件滤波的 C 程序样例10 种软件滤波方法的示例程序假定从 8 位 AD中读取数据 <假如是更高位的AD可定义数据类型为int>,子程序为 get_ad> ;1、限副滤波/* A 值可依据实际情形调整滤波程序返回有效的实际值*/ value为有效值, new_value 为当前采样值#define A 10 char value;char filter> char new_value ;new_value = get_ad>;if new_value - value > A > | value - new_value > A > return value;return new_value; 2、中位值滤波法/* N 值可依据实际情形调整排序采纳冒泡法 */ #define N 11 char filter> char value_bufN;char count,i,j,temp;for count=0;count<N; count+> value_bufcount = get_ad>; delay>; 4 / 9 名师归纳总结 - - - - - - -第 4 页,共 9 页精选学习资料 - - - - - - - - - for j=0;j<N-1 ;j+> for i=0;i<N-j ; i+> if value_buf>value_bufi+1 > temp = value_buf; value_buf = value_bufi+1 value_bufi+1 = temp return value_bufN-1>/2; 3、算术平均滤波法 /* */ #define N 12 char filter> int sum = 0 ;for count=0;count<N; count+> ; sum + = get_ad> delay>; return char>sum/N>; 4、递推平均滤波法 <又称滑动平均滤波法)/* */ #define N 12 char value_bufN;char i=0;char filter> char count;int sum=0;5 / 9 名师归纳总结 - - - - - - -第 5 页,共 9 页精选学习资料 - - - - - - - - - value_bufi+ = get_ad>;if i = N > i = 0;for count=0;count<N,count+> ; sum = value_bufcount return char>sum/N>; 5、中位值平均滤波法 <又称防脉冲干扰平均滤波法)/* */ #define N 12 char filter> char count,i,j;char value_bufN;int sum=0;for count=0 ; count<N ;count+> value_bufcount = get_ad>; delay> for j=0;j<N-1 ;j+> for i=0;i<N-j ; i+> if value_buf>value_bufi+1 > temp = value_buf; value_buf = value_bufi+1 value_bufi+1 = temp forcount=1;count<N-1 ; count+> sum += valuecount;return char>sum/N-2>>; 6、限幅平均滤波法 /* */ 略 参考子程序 1、3 6 / 9 名师归纳总结 - - - - - - -第 6 页,共 9 页精选学习资料 - - - - - - - - - 7、一阶滞后滤波法/* 为加快程序处理速度假定基数为 100,a=0100 */ #define a 50 char value;char filter> char new_value ;new_value = get_ad>;return 100-a>*value + a*new_value; 8、加权递推平均滤波法/* coe数组为加权系数表,存在程序储备区;*/ #define N 12 char code coeN = 1,2,3,4,5,6,7,8,9,10,11,12;char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;char filter> char count;count+> char value_bufNint sum=0;for count=0,count<N value_bufcount = get_ad>; delay>; for count=0,count<N;count+> sum += value_bufcount*coecount;return char>sum/sum_coe>; 9、消抖滤波法#define N 12 char filter> char count=0;7 / 9 名师归纳总结 - - - - - - -第 7 页,共 9 页精选学习资料 - - - - - - - - - char new_value ;new_value = get_ad>;while value .=new_value>; count+ ; if count>=N> return new_value; delay>; new_value = get_ad>; return value; 10、限幅消抖滤波法/* */ 略 参考子程序 1、9 11、 IIR 滤波例子int BandpassFilter4int InputAD4> int ReturnValue ; int ii ; RESLO=0; RESHI=0; MACS=*PdelIn ; OP2=1068; /FilterCoeff44; MACS=*PdelIn+1> ; OP2=8;/FilterCoeff43; MACS=*PdelIn+2> ; OP2=-2001; /FilterCoeff42; MACS=*PdelIn+3> ; OP2=8;/FilterCoeff41; MACS=InputAD4; OP2=1068; /FilterCoeff40; MACS=*PdelOu; OP2=-7190; /FilterCoeff48; MACS=*PdelOu+1>; OP2=-1973; /FilterCoeff47; MACS=*PdelOu+2>; OP2=-19578 ;/FilterCoeff46; MACS=*PdelOu+3>; OP2=-3047; /FilterCoeff45; *p=RESLO;8 / 9 名师归纳总结 - - - - - - -第 8 页,共 9 页精选学习资料 - - - - - - - - - *p+1>=RESHI ; mytestmul<<=2 ; ReturnValue=*p+1>; for ii=0;ii<3 ; ii+> DelayInputii=DelayInputii+1;DelayOutputii=DelayOutputii+1; DelayInput3=InputAD4;DelayOutput3=ReturnValue;if ReturnValue<0> / / / ReturnValue=-ReturnValue;/ return ReturnValue; /- 9 / 9 名师归纳总结 - - - - - - -第 9 页,共 9 页