算术平均值滤波
C语言十大滤波算法
十大滤波算法程序大全精心整理版转自网络11、限幅滤波法函数名称: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;ifNewValue-Value>A||Value-NewValue>A ReturnValue=Value;else ReturnValue=NewValue;returnReturnValue;}2、中位值滤波法/函数名称:MiddlevalueFilter-中位值滤波法优点:能有效克服因偶然因素引起的波动干扰;对温度、液位等变化缓慢的被测参数有良好的滤波效果缺点:对流量,速度等快速变化的参数不宜说明:1、调用函数GetAD,该函数用来取得当前值Delay,基本延时函数2、变量说明ArrDataBufferN:用来存放一次性采集的N组数据Temp:完成冒泡法试用的临时寄存器i,j,k:循环试用的参数值3、常量说明N:数组长度入口:出口:value_bufN-1/2,返回值,本次滤波结果/define N 11unsigned char MiddlevalueFilter {unsigned char value_bufN;unsigned char i,j,k,temp;fori=0;i<N;i++{value_bufi = get_ad;delay;}for j=0;j<N-1;j++{for k=0;k<N-j;k++{ifvalue_bufk>value_bufk+1{temp = value_bufk;value_bufk = value_bufk+1;value_bufk+1 = temp;}}}return value_bufN-1/2;}3、算术平均滤波法/说明:连续取N个采样值进行算术平均运算优点:试用于对一般具有随机干扰的信号进行滤波;这种信号的特点是有一个平均值,信号在某一数值范围附近上下波动;缺点:对于测量速度较慢或要求数据计算较快的实时控制不适用;/define N 12char filter{unsigned int sum = 0;unsigned char i;for i=0;i<N;i++{sum + = get_ad;delay;}returncharsum/N;}4、递推平均滤波法又称滑动平均滤波法/说明:把连续N个采样值看成一个队列,队列长度固定为N;每次采样到一个新数据放入队尾,并扔掉队首的一次数据;把队列中的N各数据进行平均运算,既获得新的滤波结果;优点:对周期性干扰有良好的抑制作用,平滑度高;试用于高频振荡的系统缺点:灵敏度低;对偶然出现的脉冲性干扰的抑制作用较差,不适于脉冲干扰较严重的场合/define N 12unsigned char value_bufN;unsigned char filter{unsigned char i;unsigned char value;int sum=0;value_bufi++ = get_ad; //采集到的数据放入最高位fori=0;i<N;i++{value_bufi=value_bufi+1; //所有数据左移,低位扔掉sum += value_bufi;}value = sum/N;returnvalue;}5、中位值平均滤波法又称防脉冲干扰平均滤波法/说明:采一组队列去掉最大值和最小值优点:融合了两种滤波的优点;对于偶然出现的脉冲性干扰,可消除有其引起的采样值偏差;对周期干扰有良好的抑制作用,平滑度高,适于高频振荡的系统;缺点:测量速度慢/define N 12uchar filter{unsigned char i,j,k,l;unsigned char temp,sum=0,value; unsigned char value_bufN,;fori=0;i<N;i++{value_bufi = get_ad;delay;}//采样值从小到大排列冒泡法forj=0;j<N-1;j++{fori=0;i<N-j;i++{ifvalue_bufi>value_bufi+1{temp = value_bufi;value_bufi = value_bufi+1;value_bufi+1 = temp;}}}fori=1;i<N-1;i++sum += value_bufi;value = sum/N-2;returnvalue;}6、递推中位值滤波法/优点:对于偶然出现的脉冲性干扰,可消除由其引起的采样值偏差; 对周期性干扰有良好的抑制作用,平滑度高;试用于高频振荡的系统缺点:测量速度慢/char filterchar new_data,char queue,char n {char max,min;char sum;char i;queue0=new_data;max=queue0;min=queue0;sum=queue0;fori=n-1;i>0;i--{ifqueuei>maxmax=queuei;else if queuei<minmin=queuei;sum=sum+queuei;queuei=queuei-1;}i=n-2;sum=sum-max-min+i/2; //说明:+i/2的目的是为了四舍五入sum=sum/i;returnsum;}7、限幅平均滤波法/优点:对于偶然出现的脉冲性干扰,可消除有其引起的采样值偏差; /define A 10define N 12unsigned char data;unsigned char filterdata{unsigned char i;unsigned char value,sum;dataN=GetAD;ifdataN-dataN-1>A||dataN-1-dataN>A dataN=dataN-1;//else dataN=NewValue;fori=0;i<N;i++{datai=datai+1;sum+=datai;}value=sum/N;returnvalue;}8、一阶滞后滤波法/函数名称:filter-一阶滞后滤波法说明:1、调用函数GetAD,该函数用来取得当前值Delay,基本延时函数2、变量说明Or_dataN:采集的数据Dr0_flag、Dr1_flag:前一次比较与当前比较的方向位 coeff:滤波系数F_count:滤波计数器3、常量说明N:数组长度Thre_value:比较门槛值入口:出口:/define Thre_value 10define N 50float Or_dataN;unsigned char Dr0_flag=0,Dr1_flag=0; void absfloat first,float second {float abs;iffirst>second{abs=first-second;Dr1_flag=0;}else{abs=second-first;Dr1_flag=1;}returnabs;}void filtervoid{uchar i=0,F_count=0,coeff=0;float Abs=;//确定一阶滤波系数fori=1;i<N;i++{Abs=absOr_datai-1,Or_datai;ifDr1_flag^Dr0_flag //前后数据变化方向一致{F_count++;ifAbs>=Thre_value{F_count++;F_count++;}ifF_count>=12F_count=12;coeff=20F_count;}else //去抖动coeff=5;//一阶滤波算法ifDr1_flag==0 //当前值小于前一个值Or_datai=Or_datai-1-coeffOr_datai-1-Or_datai/256;elseOr_datai=Or_datai-1+coeffOr_datai-Or_datai-1/256;F_count=0; //滤波计数器清零Dr0_flag=Dr1_flag;}}9、加权递推平均滤波法/coe:数组为加权系数表,存在程序存储区;sum_coe:加权系数和/define N 12const char code coeN = {1,2,3,4,5,6,7,8,9,10,11,12}; const char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12; unsigned char filter{unsigned char i;unsigned char value_bufN; int sum=0;for i=0;i<N;i++{value_bufi = get_ad;delay;}for i=0,i<N;i++{value_bufi=value_bufi+1; sum += value_buficoei; }sum/=sum_coe;value=sum/N;returnvalue;}10、消抖滤波法//define N 12unsigned char filter{unsigned char i=0;unsigned char new_value; new_value = get_ad;ifvalue =new_value;{i++;if i>N{i=0;value=new_value; }}else i=0;returnvalue;}。
算术平均滤波
算术平均滤波
算术平均滤波是一种常见的数字信号处理方法,它可以用于去除信号中的噪声,平滑信号,提高信号的质量。
算术平均滤波的原理是将一段时间内的信号值取平均值,然后用平均值代替原始信号值,从而达到平滑信号的目的。
算术平均滤波的应用非常广泛,例如在图像处理中,可以用算术平均滤波去除图像中的噪声,使图像更加清晰;在音频处理中,可以用算术平均滤波平滑音频信号,提高音质;在传感器信号处理中,可以用算术平均滤波去除传感器信号中的噪声,提高测量精度。
算术平均滤波的实现非常简单,只需要将一段时间内的信号值相加,然后除以信号的个数即可。
例如,假设我们要对一个长度为N的信号进行平均滤波,那么可以使用以下公式:
y[i] = (x[i] + x[i-1] + x[i-2] + ... + x[i-N+1]) / N
其中,y[i]表示滤波后的信号值,x[i]表示原始信号值,N表示滤波窗口的大小。
需要注意的是,算术平均滤波虽然可以平滑信号,但也会对信号的响应速度产生影响。
因为平均滤波会将信号的变化变得更加缓慢,所以在某些应用场景下,可能需要使用其他滤波方法。
算术平均滤波是一种简单有效的数字信号处理方法,可以用于去除
信号中的噪声,平滑信号,提高信号的质量。
在实际应用中,需要根据具体情况选择合适的滤波方法,以达到最佳的效果。
(整理)几种滤波的经典算法.
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];
}
8、加权递推平均滤波法
/* coe数组为加权系数表,存在程序存储区。*/
#define N 12
char code coe[N] = {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()
if ( i == N ) i = 0;
for ( count=0;count<N,COUNT++)
sum = value_buf[count];
return (char)(sum/N);
}
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
/*
*/
#define N 12
char filter()
{
char count,i,j;
delay();
}
return (char)(sum/N);
}
4、递推平均滤波法(又称滑动平均滤波法)
/*
*/
#define N 12
char value_buf[N];
数字滤波的算术平均法和加权平均法
F T: O R , AA 指向采样数据首地址 I 4 M V 0 # T ; L D M V M , B 指向加权系数表格首地址 O D # ; T A M V 2 # ; 累加和清零 O R, 。
万方数据
仪 表 技 术
年第 4 期
题, 例如, 地址冲突, 协议不符 , 以及超时等等。
/ Dv c dr d s* * i s o a a rs ec e n y d e / e
T s / T r t g I 二0 c d ‘ 1 , * o st ( O 1en ) / 0 i u en T s so s n e t i
Gi rr id r川 pF (b E o b m "r r ' r Bu 介rinI 0;/ Nleu th AC sn‘ b d = 、 ' ‘ u t ne SI g / c ’ at m e t r i u i h e c d i t e i pn(%。 n , e) / Pn t dve nfa.二 rt“ \ "Bfr; , rt ei i tc i / if in Dve ) / Tk t dve i * b l ec, ; 、 a h eco n / o( i 0 e i f e e
系统软件主要包括初始化、 系统 自检、/ A D转换 、 计算并显示。总流程框图如图6 所示。 ( 上接第 4 页) 1
M V 3 A O R , M V A, O B A D A, 2 D C R M V R , O 2A
R ,I 3; 累加8 7F T1 L 次 A ( 凡)8 ; 凡, /
常用的8种数字滤波算法
常用的8种数字滤波算法摘要:分析了采用数字滤波消除随机干扰的优点,详细论述了微机控制系统中常用的8种数字滤波算法,并讨论了各种数字滤波算法的适用范围。
关键词:数字滤波;控制系统;随机干扰;数字滤波算法1引言在微机控制系统的模拟输入信号中,一般均含有各种噪声和干扰,他们来自被测信号源本身、传感器、外界干扰等。
为了进行准确测量和控制,必须消除被测信号中的噪声和干扰。
噪声有2大类:一类为周期性的,其典型代表为50 Hz 的工频干扰,对于这类信号,采用积分时间等于20 ms整倍数的双积分A/D转换器,可有效地消除其影响;另一类为非周期的不规则随机信号,对于随机干扰,可以用数字滤波方法予以削弱或滤除。
所谓数字滤波,就是通过一定的计算或判断程序减少干扰信号在有用信号中的比重,因此他实际上是一个程序滤波。
数字滤波器克服了模拟滤波器的许多不足,他与模拟滤波器相比有以下优点:(1)数字滤波器是用软件实现的,不需要增加硬设备,因而可靠性高、稳定性好,不存在阻抗匹配问题。
(2)模拟滤波器通常是各通道专用,而数字滤波器则可多通道共享,从而降低了成本。
(3)数字滤波器可以对频率很低(如0.01 Hz)的信号进行滤波,而模拟滤波器由于受电容容量的限制,频率不可能太低。
(4)数字滤波器可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便、功能强的特点。
2 常用数字滤波算法数字滤波器是将一组输入数字序列进行一定的运算而转换成另一组输出数字序列的装置。
设数字滤波器的输入为X(n),输出为Y(n),则输入序列和输出序列之间的关系可用差分方程式表示为:其中:输入信号X(n)可以是模拟信号经采样和A/D变换后得到的数字序列,也可以是计算机的输出信号。
具有上述关系的数字滤波器的当前输出与现在的和过去的输入、过去的输出有关。
由这样的差分方程式组成的滤波器称为递归型数字滤波器。
如果将上述差分方程式中bK取0,则可得:说明输出只和现在的输入和过去的输入有关。
10种常用滤波方法
1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制那种周期性的干扰平滑度差2、中位值滤波法A、方法:连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值B、优点:能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C、缺点:对流量、速度等快速变化的参数不宜3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4B、优点:适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费RAM4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则) 把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4B、优点:对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C、缺点:灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2个数据的算术平均值N值的选取:3~14B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大.给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低B、优点:适用于有较大纯滞后时间常数的对象和采样周期较短的系统C、缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号不能迅速反应系统当前所受干扰的严重程度,滤波效果差9、消抖滤波法A、方法:设置一个滤波计数器将每次采样值与当前有效值比较:如果采样值=当前有效值,则计数器清零如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)如果计数器溢出,则将本次值替换当前有效值,并清计数器B、优点:对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动C、缺点:对于快速变化的参数不宜如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统10、限幅消抖滤波法A、方法:相当于“限幅滤波法”+“消抖滤波法”先限幅,后消抖B、优点:继承了“限幅”和“消抖”的优点改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统C、缺点:对于快速变化的参数不宜以下是我编的示例程序,如有不足之处还望各位同行指教假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波/* A值可根据实际情况调整value为有效值,new_value为当前采样值滤波程序返回有效的实际值*/#define A 10char 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 11char filter(){char value_buf[N];char count,i,j,temp;for ( count=0;count{value_buf[count] = get_ad();delay();}for (j=0;j{for (i=0;i{if ( value_buf[i]>value_buf[i+1] ){temp = value_buf[i];value_buf[i] = value_buf[i+1];value_buf[i+1] = temp;}}}return value_buf[(N-1)/2];}3、算术平均滤波法/**/#define N 12char filter(){int sum = 0;for ( count=0;count{sum + = get_ad();delay();}return (char)(sum/N);}4、递推平均滤波法(又称滑动平均滤波法)/**/#define N 12char value_buf[N];char i=0;char filter(){char count;int sum=0;value_buf[i++] = get_ad();if ( i == N ) i = 0;for ( count=0;countsum = value_buf[count];return (char)(sum/N);}5、中位值平均滤波法(又称防脉冲干扰平均滤波法) /**/#define N 12char filter(){char count,i,j;char value_buf[N];int sum=0;for (count=0;count{value_buf[count] = get_ad();delay();}for (j=0;j{for (i=0;i{if ( value_buf[i]>value_buf[i+1] ){temp = value_buf[i];value_buf[i] = value_buf[i+1];value_buf[i+1] = temp;}}}for(count=1;countsum += value[count];return (char)(sum/(N-2));}6、限幅平均滤波法/**/略参考子程序1、37、一阶滞后滤波法/* 为加快程序处理速度假定基数为100,a=0~100 */ #define a 50char value;char filter(){char new_value;new_value = get_ad();return (100-a)*value + a*new_value;}8、加权递推平均滤波法/* coe数组为加权系数表,存在程序存储区.*/#define N 12char code coe[N] = {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;char value_buf[N];int sum=0;for (count=0,count{value_buf[count] = get_ad();delay();}for (count=0,countsum += value_buf[count]*coe[count];return (char)(sum/sum_coe);}9、消抖滤波法#define N 12char filter(){char count=0;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。
几种经典的滤波算法
几种经典的滤波算法(转)1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制那种周期性的干扰平滑度差2、中位值滤波法A、方法:连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值B、优点:能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C、缺点:对流量、速度等快速变化的参数不宜3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4B、优点:适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费RAM4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则) 把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4B、优点:对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C、缺点:灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2个数据的算术平均值N值的选取:3~14B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。
10种常用滤波方法
1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制那种周期性的干扰平滑度差2、中位值滤波法A、方法:连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值B、优点:能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C、缺点:对流量、速度等快速变化的参数不宜3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4B、优点:适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费RAM4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则) 把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4B、优点:对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C、缺点:灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2个数据的算术平均值N值的选取:3~14B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大.给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低B、优点:适用于有较大纯滞后时间常数的对象和采样周期较短的系统C、缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号不能迅速反应系统当前所受干扰的严重程度,滤波效果差9、消抖滤波法A、方法:设置一个滤波计数器将每次采样值与当前有效值比较:如果采样值=当前有效值,则计数器清零如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)如果计数器溢出,则将本次值替换当前有效值,并清计数器B、优点:对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动C、缺点:对于快速变化的参数不宜如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统10、限幅消抖滤波法A、方法:相当于“限幅滤波法”+“消抖滤波法”先限幅,后消抖B、优点:继承了“限幅”和“消抖”的优点改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统C、缺点:对于快速变化的参数不宜以下是我编的示例程序,如有不足之处还望各位同行指教假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波/* A值可根据实际情况调整value为有效值,new_value为当前采样值滤波程序返回有效的实际值*/#define A 10char 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 11char filter(){char value_buf[N];char count,i,j,temp;for ( count=0;count{value_buf[count] = get_ad();delay();}for (j=0;j{for (i=0;i{if ( value_buf[i]>value_buf[i+1] ){temp = value_buf[i];value_buf[i] = value_buf[i+1];value_buf[i+1] = temp;}}}return value_buf[(N-1)/2];}3、算术平均滤波法/**/#define N 12char filter(){int sum = 0;for ( count=0;count{sum + = get_ad();delay();}return (char)(sum/N);}4、递推平均滤波法(又称滑动平均滤波法)/**/#define N 12char value_buf[N];char i=0;char filter(){char count;int sum=0;value_buf[i++] = get_ad();if ( i == N ) i = 0;for ( count=0;countsum = value_buf[count];return (char)(sum/N);}5、中位值平均滤波法(又称防脉冲干扰平均滤波法) /**/#define N 12char filter(){char count,i,j;char value_buf[N];int sum=0;for (count=0;count{value_buf[count] = get_ad();delay();}for (j=0;j{{if ( value_buf[i]>value_buf[i+1] ){temp = value_buf[i];value_buf[i] = value_buf[i+1];value_buf[i+1] = temp;}}}for(count=1;countsum += value[count];return (char)(sum/(N-2));}6、限幅平均滤波法/**/略参考子程序1、37、一阶滞后滤波法/* 为加快程序处理速度假定基数为100,a=0~100 */ #define a 50char value;char filter(){char new_value;new_value = get_ad();return (100-a)*value + a*new_value;}8、加权递推平均滤波法/* coe数组为加权系数表,存在程序存储区.*/#define N 12char code coe[N] = {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;char value_buf[N];for (count=0,count{value_buf[count] = get_ad();delay();}for (count=0,countsum += value_buf[count]*coe[count];return (char)(sum/sum_coe);}9、消抖滤波法#define N 12char filter(){char count=0;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。
智能仪表常用的软件抗干扰措施
智能仪表常用的软件抗干扰措施在实际应用中,干扰信号可能影响到智能仪表的CPU、程序计数器(PC)或RAM等,导致程序运行失常。
因此,在设计智能仪表时除了在硬件方面采取抗干扰措施外,必须考虑软件的抗干扰措施。
干扰对软件的影响有两个方面,即程序运行失常和数据受干扰而发生变化。
单片机系统受到干扰后,会使RAM、程序计数器或总线上的数字信号错乱,从而引发一系列不良后果。
CPU得到错误的数据,就会使运行操作出错,导致错误结果,并将错误一直传递下去,形成一系列错误。
如果CPU获得错误地址信息,会使程序失控,即便此后程序恢复到正常状态,但是已经造成不良后果,埋下隐患,最终导致后续程序出错。
同时,如果干扰改变RAM以及特殊功能寄存器的状态,可能导致数值误差,改变程序状态,引起误动作。
软件抗干扰的任务在于CPU抗干扰技术和输入输出的抗干扰技术两方面。
前者主要是防止因干扰造成的程序“跑飞”,后者主要是消除信号中的干扰以便提高系统准确度。
1、数字滤波技术随机干扰会使仪表产生随机误差。
随机误差是指在相同条件下测量某一量时,其大小符号作无规律变化的误差,但随机误差在多次测量中服从统计规律。
在硬件设计中可以模拟滤波器来削弱随机误差,但是它在低频、甚低频时实现较困难。
数字滤波可以完成模拟滤波的功能,而且与模拟滤波相比,它具有如下优势:数字滤波是用程序实现的,无须添加硬件,可靠性高,稳定性好,不存在阻抗匹配的问题,而且多个输入通道可以共用,从而降低系统硬件成本;可以根据需要选择不同的滤波方法或改变滤波器的参数,使用灵活方便;数字滤波器可以对频率很低的信号进行滤波,而模拟滤波由于受电容容量的限制,频率不能太低。
常用的数字滤波算法有程序判断滤波、中值滤波、算术平均值滤波、滑动平均值滤波、加权滑动平均滤波、一阶惯性滤波等。
(1)程序判断滤波经验说明,许多物理量的变化都需要一定时间,相邻两次采样值之间的变化有一定的限度。
程序判断滤波的方法,便是根据生产经验,确定出相邻两次采样信号之间可能出现的偏差ΔY。
均值滤波
均值滤波均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素点和其本身像素点。
再用模板中的全体像素的平均值来代替原来像素值。
均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。
线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其邻近的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度值g(x,y),即g(x,y)=1/m ∑f(x,y), m为该模板中包含当前像素在内的像素总个数。
均值滤波能够有效滤除图像中的加性噪声,但均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊。
均值滤波主要有算术均值滤波,几何均值滤波,谐波均值滤波以及逆谐波均值滤波,本文只对算术均值滤波,几何均值滤波和逆谐波均值滤波进行研究。
其中几何均值滤波器所达到的平滑度可以与算术均值滤波器相比,但在滤波过程中丢失更少的图象细节。
逆谐波均值滤波器更适合于处理脉冲噪声,但它有个缺点,就是必须要知道噪声是暗噪声还是亮噪声,以便于选择合适的滤波器阶数符号,如果阶数的符号选择错了可能会引起灾难性的后果。
1.1均值滤波的原理均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身)。
再用模板中的全体像素的平均值来代替原来像素值。
均值滤波也称为线性滤波,其采用的主要方法为领域平均法。
线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度值u(x,y),即 u(x,y)=1/m ∑f(x,y),m为该模板中包含当前像素在内的像素总个数。
算术平均值滤波
35
1. 线性参数的标度变换 线性标度变换时最常用的标度变换方式,
其前提条件是被测参数值与A/D转换结果为线 性关系。线性标度变换的公式为:
Ax
( Am
A0 )
Nx Nm
N0 N0
A0
式中A0为一次测量仪表的下限;
26
微机中表格表格的排列分为有序表和无序 表两种。有序表指在表内存放的数有一定的规 律(或按大小顺序;或按某种规律),无序表 指数据的存放是随意的(或某种函数是无序 的)。
根据表格的编排方法,查表的方法有3种:
➢ 顺序查表法 ➢ 计算查表法 ➢ 对分查表法
27
a.顺序查表法 顺序查表法用于无序表格的查找。因为无
4
可以逐次逼近待搜索的关键值所在位置,直至 找到。若搜索完毕而未找到需给出提示。
31
如果在应用中一些数据或函数能够满足从 大到小或从小到大的顺序排列,在这种情况下 可使用对分查表法。
显然对分查表其速度是很快的,它最多的 查找次数为lg2n-1。例如,若查长为2068字节, 对分查表最多只需要10次,而若采用顺序查表 法,其平均查找次数1024次。
微机控制系统中的软件设计,包括选择系统软 件及设计应用软件。
前者主要选择操作系统和算法语言, 后者是根据控制对象的要求编制应用程序。 若是有自己设计的单片机或是DSP系统,则不 仅要编写应用程序,而且要根据系统要求编制专 用的监控程序或系统程序。 对单片机而言,则大部分是监控程序。
1
所以,为控制,处理具体应用对象而编制的程序 就叫应用程序。
9
限幅滤波
限速滤波
设顺序采样时刻t1,t2,t3所采集的参数分别为 Y(1),Y(2),Y(3),那么
算术平均值滤波
基本思想: 每采样一个新值,即舍弃一个最早的采样 值,然后求平均值,作为本次的采样。
平均值滤波对周期脉动的干扰有较明确的 抑制,但对偶尔出现的脉动干扰信号,滤波效 果不理想,应采用——中值滤波
17
3.中值滤波 对被测参数采样n次(n≥3 ),再按大小 顺序排列,再取中间值作为本次采样值。 此法对防止脉冲干扰比较有效。 对缓慢变化的过程变量采用此法有良好的 效果,快速变化时要求采样点至少≥3,所以 不适合用去除脉动性干扰。
13
算术平均值滤波主要用于对压力、流量等
周期脉动参数的采样值进行平滑加工,但对脉
冲性干扰的平滑作用尚不理想。因而它不适用
于脉冲性干扰比较严重的场合。采样次数N的
选取,取决于系统对于参数平滑度和灵敏度的
要求。随着N值的增大,平滑度将提高,灵敏 度将降低。 所以要根据具体情况选取n,以便取得满 意的滤波效果。
R X(s) C Y(s)
数学表达式:
Y (k ) (1 ) Y (k 1) X (k )
T T Tf
20
一阶惯性滤波的基本意图是把本次采样值与
上次滤波器平均值进行加权平均,因此在转入的
过程中,任何快速的干扰均被滤除,仅保留缓慢
变化的信号,为此称之为“低通滤波”。
18
程序:n=3为例
N 小数X1→R0 大数X2→R1
输入采样值 X1,X2,X3
X1≥X2
Y 小数X2→R0 大数X1→R1
N N Y
X3≥R1
Y
X3≥R0
R1→SAMP(中值)
R0→SAMP
X3→SAMP
转其它程序
19
4.一阶惯性滤波 前面几种滤波方法基本上属于静态滤波,主要 适用于变化比较慢的参数,但对于快速随机变化的 参数,要用动态滤波方法,如:一阶惯性滤波。
【精品】滤波算法
// ReturnValue=—ReturnValue;// }returnReturnValue;}标题:用C语言实现数字滤波2008-05-0916:17:33在工业过程控制系统中,由于被控对象的环境比较恶劣,干扰源比较多,仪器、仪表采集的信息常会受到干扰,所以在模拟系统中,为了消除干扰,常采用RC滤波电路,而在由工业控制计算机组成的自动检测系统中,为了提高采样的可靠性,减少虚假信息的影响,常常采用数字滤波的方法。
数字滤波的方法有很多种,可以根据不同的测量参数进行选择。
下面给出几种常用的数字滤波方法的C语言函数,这些函数有一定的通用性,用TurboC2.0编制而成,在研华IPC-610/386机上均编译通过,适用于PC机及其兼容机。
1。
程序判数滤波采样的信号,如因常受到随机干扰传感器不稳定而引起严重失真时,可以采用此方法.方法是:根据生产经验确定两交采样允许的最大偏差△×,若先后两次采样的信号相减数值大于△×,表明输入的是干扰信号,应该去掉;用上次采样值作为本次采样值,若小于、等于△×表明没有受到干扰,本次采样值效.该方法适用于慢变化的物理参数的采样,如温度、物理位置等测量系统。
程序判断滤波的C程序函数如下:floatprogram_detect_filter(floatold_new_value[],floatX){floatsample_value;if(fabs(old_new_value[1]_old_new_value[0])〉X)sample_value=old_new_value[0];elsesample_value=old_new_value[1];retrun(sample_value);}函数调用需一个一维的两个元素的数组(old_new_value[2],用于存放上次采样值(old_new_value[0],)和本次采样值(old_new_value[1],),函数中sample_value表示有效采样值,X表示根据根据经验确定的两次采样允许的最大偏差△×。
滤波算法
滤波算法在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。
1.限幅滤波算法该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。
A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。
算法的程序代码如下:#defineA //允许的最大差值char data;//上一次的数据char filter(){chardata_new; //新数据变量data_new=get_data(); //获得新数据变量if((data_new-data)>A||(data-data_new>A))return data;elsereturndata_new;}说明:限幅滤波法主要用于处理变化较为缓慢的数据,如温度、物体的位置等。
使用时,关键要选取合适的门限制A。
通常这可由经验数据获得,必要时可通过实验得到。
2.中值滤波算法该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。
算法的程序代码如下:#define N11 //定义获得的数据个数char filter(){charvalue_buff[N]; //定义存储数据的数组char count,i,j,temp;for(count=0;count<N;count++){value_buf[count]=get_data();delay(); //如果采集数据比较慢,那么就需要延时或中断}for(j=0;j<N-1;j++){for(value_buff[i]>value_buff[i+1]{temp=value_buff[i];value_buff[i]=value_buff[i+1];value_buff[i+1]=temp;}}returnvalue_buff[(N-1)/2];}说明:中值滤波比较适用于去掉由偶然因素引起的波动和采样器不稳定而引起的脉动干扰。
编程实现算术平均值滤波算法_概述及解释说明
编程实现算术平均值滤波算法概述及解释说明1. 引言:1.1 概述本文旨在介绍编程实现算术平均值滤波算法的原理、实现步骤、特点以及相应的编程实现。
算术平均值滤波算法是一种常用的信号处理方法,通过计算数据序列中一定数量的数据点的平均值来获得更加平滑和稳定的信号。
该算法具有简单易懂、易于实现等优势,因此被广泛应用于各个领域,如图像处理、噪声消除等。
1.2 文章结构本文主要分为五个部分:引言、算术平均值滤波算法、编程实现、实验结果与分析以及结论与展望。
其中,在引言部分,将对文章内容进行简要概述并介绍文章的整体结构;在算术平均值滤波算法部分,将详细解释该算法的原理、实现步骤和特点;随后,在编程实现部分,将讨论选择合适的编程语言和环境,并说明数据输入与处理方法以及提供代码实现示例;在接下来的实验结果与分析部分,将准备数据集并选择评估指标,展示和对比实验结果,并进行讨论和解释说明;最后,在结论与展望部分,将总结文章的主要观点和结果,并提出创新性和局限性分析以及未来的研究方向。
1.3 目的本文的目的是通过对算术平均值滤波算法的详细介绍和编程实现来帮助读者更好地理解该算法,并能够在实际应用中灵活运用。
同时,通过实验结果与分析部分的展示,读者可以了解该算法在不同数据集上的效果,并对其优缺点进行评估,为进一步改进和发展提供参考。
最后,通过结论与展望部分的总结和讨论,读者可以得出对该算法的整体认识并了解潜在研究方向。
2. 算术平均值滤波算法2.1 算法原理算术平均值滤波算法是一种常用的数字信号处理技术。
其原理是通过计算数据序列中一段连续样本的算术平均值来抑制噪声,从而达到信号平滑和去噪的目的。
具体来说,对于给定的输入序列,算术平均值滤波算法将每个样本与相邻样本的平均值进行比较,并将这个平均值作为输出结果。
通过不断地移动窗口并对窗口内数据进行求平均操作,可以得到整个数据序列的平滑化结果。
2.2 实现步骤实现算术平均值滤波算法可以按照以下步骤进行:1. 定义一个窗口大小N,确定需要计算平均值的连续样本数。
几种常用的滤波方法
几种常用的滤波方法几种软件滤波算法的原理和比较第1种方法:限幅滤波法(又称程序判断滤波法)A方法:根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效,如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。
B优点:能有效克服因偶然因素引起的脉冲干扰。
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=4~12;温度,N=1~4。
B优点:对周期性干扰有良好的抑制作用,平滑度高,适用于高频振荡的系统。
C缺点:灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差,不易消除由于脉冲干扰所引起的采样值偏差,不适用于脉冲干扰比较严重的场合,比较浪费RAM。
第5种方法:中位值平均滤波法(又称防脉冲干扰平均滤波法)A方法:相当于“中位值滤波法” “算术平均滤波法”,连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。
算术平均滤波
算术平均滤波
一种简单而有效的滤波算法——算术平均滤波
任何信号处理系统中,滤波是有效的信号修饰方法之一。
信号处理系统中,滤波器对信号中的噪声(同一信号中的不具有信息性的异常值)进行平滑消除或减弱,使信号中的有效信息较清晰地体现出来。
现有的滤波方法包括:最大值滤波、最小值滤波、中值滤波、均值滤波等。
本文将介绍一种简单而有效的滤波算法——算术平均滤波。
它可以实现波形信号的平滑,同时又能保留信号中的有效信息。
算术平均滤波(Arithmetic Averaging Filter)是通过将一个连续的特定长度的信号波形中的每一个数据点与它前后的数据点的算术平均值,以抵消噪声或其他影响信号的干扰效果,使信号的平滑程度更高。
算术平均滤波可以分为移动平均法和非移动平均法。
移动平均法指的是,对于一个连续特定长度的信号波形,例如有 N 个数据点,每个数据点以其前后的 N-1 个数据点为窗口进行统计平均,使其达到平滑处理的目的。
非移动平均法指的是,对于有 N 个数据点的连续特定长度的信号波形,使用一个 N 的大小的临时缓冲存储池,把所有以 N 为周期采集的信号数据依次存入缓冲存储池中,当缓冲存储池满时,便可以使用其中的 N 个数据点的平均值来作为最终结果,以实现信号的平滑处理。
算术平均滤波可以大幅度地减少信号中的噪声,但是在处理的时候也会破坏信号的某些特征,有可能会使信号的峰值和谷值发生一定的变化。
另外,非移动平均法的计算量较大,所以在某些应用中不宜采用,而移动平均法的计算量较小,它适用于实时处理系统,比如系统调整控制,同时它也是对非结构性信号的有效处理工具。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3. 对频率很低(如0.01HZ以下)的信号也
可滤波,克服了模拟滤波器的缺陷。
4. 改变滤波方法式滤波器参数只需修改程
序,方便,灵活。
9
1.程序限幅滤波 经验说明,许多物理量的变化都需要一 定的时间,相邻两次采样值之间的变化有一 定的限度。 当采样信号由于随机干扰,如大功率用 电设备的启动或停止,造成电流的尖峰干扰 或错误检测,以及变送器不稳定而引起的严 重失真等现象时,可采用程序判断法进行滤 波。程序判断滤波根据滤波方法的不同,可 分为限幅滤波和限速滤波两种。
27
微机中表格表格的排列分为有序表和无序 表两种。有序表指在表内存放的数有一定的规 律(或按大小顺序;或按某种规律),无序表 指数据的存放是随意的(或某种函数是无序 的)。 根据表格的编排方法,查表的方法有3种: 顺序查表法 计算查表法 对分查表法
28
a.顺序查表法
顺序查表法用于无序表格的查找。因为无
第七章 应用程序设计
本章要点 数据处理程序 控制算法的程序设计
1
微机控制系统中的软件设计,包括选择系统 软件及设计应用软件。
前者主要选择操作系统和算法语言,
后者是根据控制对象的要求编制应用程序。
若是有自己设计的单片机或是DSP系统,则不
仅要编写应用程序,而且要根据系统要求编制专
用的监控程序或系统程序。
26
1. 计算法 如果被测参数和转换的电信号之间有明确 的数学表达式,且该表达式又便于计算,就应 发挥微机计算机较强的优势,将其表达式转换 为线性关系,再行计算。
2. 查表法
所谓查表法,就是把事先计算或测得的数 据按一定的顺序编制成表格,查表程序的任务 就是根据被测参数的值或者中间结果,查出最 终所需要的结果。
25
线性化处理程序
在工程实践中,把物理量转化为电信号的 传感器,大多带有一定的非线性特征,不便于 计算机处理。 有的很难找出明确的数学表达式,需根据 测量值采取一些特殊的方法进行处理,还有一 些参数,相互之间虽然有明确的数学表达式, 但计算起来相当麻烦,会占用较多的时间。 因此,找出某种既方便又能满足实际功能 要求的数据处理办法就是本节要解决的问题。
36
1. 线性参数的标度变换 线性标度变换时最常用的标度变换方式, 其前提条件是被测参数值与A/D转换结果为线 性关系。线性标度变换的公式为:
N x N0 Ax ( Am A0 ) A0 Nm N0 式中A0为一次测量仪表的下限; Am为一次测量仪表的上限; Ax为实际测量值(工程量); N 0为仪表下限所对应的数字量; N m为仪表上限所对应的数字量; N x为测量值所对应的数字量。
4.故障自诊断程序:
即通过一定的软件去检查控制系统中的相关
部件运转是否正常。已有各相关部件较成熟的自
检程序,可供参考或借鉴。
5.通用子程序:
如制表打印格式程序,服务子程序库等。 由于时间关系,重点介绍数据处理程序和控 制算法程序。
5
7.1 数据处理程序
6
滤波:
是将信号频谱中某些成分衰减或滤除。(滤 除可用硬件如RC滤波器,也可用软件如数字滤波)
若 X (1) X (2) X (3) X ( N ), 3 N 14 则
X (2) X (3) X ( N 1) Y (k )= N 2 1 N 1 X (i) 。 此外,也可采用双重滤波的方法,即把采样值经 过低通滤波后,再经过一次高通滤波,这样,结果更 接近理想值,这实际上相当于多级RC滤波。
长度为n的线性表(设该表从小到大排列),先
取n/2处的值与待搜索的关键字x进行比较,如 果x大于n/2项的内容,下一次取n/2~n的中间值, 即与 项的内容进行比较。否则取0~ n/2项的
3 n 项的内容进行比较。依次类推, 4 3 n 4
中间值,即与
可以逐次逼近待搜索的关键值所在位臵,直至
找到。若搜索完毕而未找到需给出提示。
14
流量信号,取n=10
压力信号,取n=5
温度等缓慢变化信号,取 n=2 算术平均滤波对每次采样给出了相同的加 权系数1/n。 实际应用场合需要加大新采样值在平均值 中的比重, 为此可采用: 加权平均值滤波法
15
(2)加权平均值滤波法
运算关系式为:
Y ( k ) Ci X (i)
合。
算术平均值滤波 加权平均值滤波法
12
(1)算术平均值滤波 算术平均值滤波是要寻找一个Y(k),使该
值与各采样值间误差的平方和为最小,
公式为:
1 n Y (k ) X (i) n i 1
可见,其实质是:把n个采样值相加,求其 平均值,作为时刻k的值。显然n越大,结果越 准确,但计算时间越长。
的关系只能通过一条曲线来表示,没有一个明
确的表达式或一个有序表格。此种场合,只能
够采用局部线性化对其进行处理。
折线法实际上是线性插值的算法。这种计
算程序的复杂程度和执行时间与折线的分段方
程有关。
34
若采用等距分段,可简化计算过程,但当 函数的曲率和斜率变化较大时,引入误差较大。 这可以通过细分,使之减小,但占用较多的内 存,而且计算量也大。若采用不等距分段,可
递推平均滤波或叫数据滑动平均滤波
基本思想: 每采样一个新值,即舍弃一个最早的采样 值,然后求平均值,作为本次的采样。
平均值滤波对周期脉动的干扰有较明确的 抑制,但对偶尔出现的脉动干扰信号,滤波效 果不理想,应采用——中值滤波
17
3.中值滤波 对被测参数采样n次(n≥3 ),再按大小 顺序排列,再取中间值作为本次采样值。 此法对防止脉冲干扰比较有效。 对缓慢变化的过程变量采用此法有良好的 效果,快速变化时要求采样点至少≥3,所以 不适合用去除脉动性干扰。
22
各种滤波性能的比较
1. 滤波效果 一般来说,对于变化比较慢的参数,如温 度,可选用程序判断滤波及一阶滞后滤波方法。
对那些变化比较快的脉冲参数,如压力,流量
等,则可选择算术平均和加权平均滤波法,特
别是加权平均滤波法。至于要求比较高的系统,
需要用复合滤波法。
23
在算术平均滤波和加权平均滤波中,其滤
波效果与所选择的采样次数N有关。N越大,则
滤波效果越好,但花费的时间也越长。高通及
低通滤波程序是比较特殊的滤波程序,使用时
一定要根据其特点选用。
2. 滤波时间 在考虑滤波效果的前提下,应尽量采用执 行时间比较短的程序,若计算机计算时间允许, 可采用效果更好的复合滤波程序。
24
注意: 数字滤波在热工和化工过程的DDC系统中 并非一定需要,需根据具体情况,经过分析, 实验加以选用。不适当的应用数字滤波(例如, 可能将待控制的偏差值滤掉),反而会降低控 制效果,甚至失控,因此必须给与注意。
18
程序:n=3为例
N 小数X1→R0 大数X2→R1
输入采样值 X1,X2,X3
X1≥X2
Y 小数X2→R0 大数X1→R1
N N Y
X3≥R1
Y
X3≥R0
R1→SAMP(中值)
R0→SAMP
X3→SAMP
转其它程序
19
4.一阶惯性滤波 前面几种滤波方法基本上属于静态滤波,主要 适用于变化比较慢的参数,但对于快速随机变化的 参数,要用动态滤波方法,如:一阶惯性滤波。
13
算术平均值滤波主要用于对压力、流量等
周期脉动参数的采样值进行平滑加工,但对脉
冲性干扰的平滑作用尚不理想。因而它不适用
于脉冲性干扰比较严重的场合。采样次数N的
选取,取决于系统对于参数平滑度和灵敏度的
要求。随着N值的增大,平滑度将提高,灵敏 度将降低。 所以要根据具体情况选取n,以便取得满 意的滤波效果。
基波 三次谐波
高次谐波对电机产生有害影响。脉冲,铁 损发热增加
7
数字滤波:
实质是程序滤波。通过一定的计算方法, 减少干扰在有用信号中的比重,使得输入计算 机待处理的信号量可能是我们所要求的信号。
程序限幅滤波
平均值滤波 中值滤波 一阶惯性滤波 复合数字滤波
8
数字滤波的优点:
1. 无需硬设备,各通道可公用,降低成本。 2. 各回路间不存在阻抗匹配等问题。故可 靠性高,稳定性好。
对单片机而言,则大部分是监控程序。
2
所以,为控制,处理具体应用对象而编制的程
序就叫应用程序。
在微机控制系统中,为使程序紧凑,更重要的,
为实时性强,常采用汇编语言编写。 应用程序一般包括5部分: 1.数据处理程序:
对计算机的输入输出数据进行处理或变换, 如数字滤波,线性化处理及工程量转换等。
3
2.过程监视程序:
10
限幅滤波
限速滤波
设顺序采样时刻t1,t2,t3所采集的参数分别为 Y(1),Y(2),Y(3),那么
显然,这类方法对滤除随机干扰特别有效,程 序也很简单。
11
2. 平均值滤波 平均值滤波主要对压力,流量等周期脉动
的采样值进行平滑加工,但对脉冲性干扰的平
滑不理想,它不适用于脉冲干扰比较严重的场
根据函数曲率变化使分段直线 尽量接近该段曲
线,使误差减小,但程序编制却比较麻烦。因
此,如何分段视具体情况而定。
35
标度变换程序设计
生产过程中各个参数都有不同的量纲和数值。 在计算机控制系统中所有这些物理参数经过变送 器转换成A/D转换器能接收的电信号,又经A/D转 换成一系列的数码。为了操作人员管理及生产过 程的需要,必须把这些数码转换成各种工程量单 位,使之便于显示,记录和打印。这种转换被称 为标度变换或工程量转换。 工程量转换有各种不同类型,它取决于被测 参数和测量传感器的类型,要根据实际情况进行 设计。
T为采样周期,一般事先确定好,Tf=RC为数