1、第4章 数据处理方法4.1 查表技术4.2 数字滤波技术4.3 量程自动转换和标度变换4.4 测量数据预处理技术第第4 4章章 数据处理方法数据处理方法第4章 数据处理方法在数据处理系统中,有的系统比较简单,被测参数只与一个变量有关,如温度测量系统中,温度与热电偶的热电势(mV)值成比例,且在一定范围内可近似为线性关系。对于这样的数据,处理起来比较容易,只要把热电势(mV)值经过放大器放大,再由A/D转换器转换成数字量即可送入计算机,然后通过软件编程,对其进行数字滤波及标度变换,便可得到与之相应的温度值。但是,有些参数相对比较复杂,有时需要几个变量,必须将它们经过一定的数学运算后才能得到被测参
2、数。如在流量测量系统中,根据流量计算公式(4-1)TPPQ第4章 数据处理方法与常规的模拟电路相比,微型计算机数据处理系统具有如下优点:(1)可用程序代替硬件电路,完成多种运算。(2)能自动修正误差。在测量系统中,被测参数常伴有多种误差,主要是传感器和模拟测量电路所造成的误差,如非线性误差、温度误差、零点漂移误差等。所有这些误差,在模拟系统中是很难消除的。而采用微型计算机以后,只要事先找出误差产生的原因,就可以用软件加以修正。对于随机误差,也可以根据其统计模型进行有效的修正。(3)能对被测参数进行较复杂的计算和处理。以流量测量系统为例,当测出温度T、压力P及差压信号P后,可按公式(4-1)计算
3、出流量,求出精确的流量值,因而提高了测量精度。第4章 数据处理方法(4)不仅能对被测参数进行测量和处理,而且还可以进行逻辑判断。如对传感器及仪表本身进行自检和故障监控,一旦发生故障,能及时报警。有些系统还可以根据故障情况,自动改变系统的结构,允许系统进行带“病”继续工作(称为容错技术)。(5)微型计算机数据处理系统不但精度高,而且稳定可靠,不受外界干扰。第4章 数据处理方法4.1.1 顺序查表法顺序查表法顺序查表法是针对无序排列表格的一种查询方法。因为无序表格中所有项的排列没有一定的规律,所以,只能按照顺序从第一项开始逐项寻找,直至找到所要查找的关键字为止。在MCS-51汇编语言程序设计主要用
4、CJNE比较指令,例如将要查找的关键字放在CHEACD单元中,查找所需的数据表格一般都放在程序存储器ROM中,因此,需要用 MOVC A,APC和 MOVC A,ADPTR指令传送数据。顺序查表法程序设计方法如下:4.1 4.1 查查 表表 技技 术术第4章 数据处理方法(1)表的起始地址送程序计数器PC或指针寄存器DPTR;(2)表格的长度放在某一寄存器中;(3)要查找的关键字放在某一存储单元中;(4)用CJNE A,direct,rel进行查找。第4章 数据处理方法【例例4-1】在以TAB为首地址的ROM单元中,有一长度为100字节的无序表格。设待查关键字放在KEYWORD单元,试用软件进
5、行查找。若找到,将关键字所在的内存单元地址存于R2R3寄存器中;未找到,将R2R3寄存器清零。由于待查找的表格是无序表格,所以只能逐单元地搜索。根据题意可画出程序流程图,如图4.1所示。顺序查表法虽然比较“笨”,但对于无序表格或较短表格而言,是一种比较常用的方法。第4章 数据处理方法图4.1 顺序查表法子程序流程图第4章 数据处理方法结合图4.1所示的流程图,编写出能够完成上述任务的MCS-51汇编程序,如下:ORG 8000H CHABIAO:MOV CHEACD,KEYWORD ;送关键字 MOV R4,#100 ;查找次数送R4 MOV A,#14 MOV DPTR,#TAB LOOP:
6、PUSH A MOVC A,A+PC ;取数据 CJNE A,CHEACD,UNFIND ;未找到,转UNFIND第4章 数据处理方法 MOV R2,DPH ;已找到,地址送R2R3 MOV R3,DPL DONE:RET UNFIND:POP A INC A ;求下一数据地址 INC DPTR DJNZ R4,LOOP ;R40,继续查找 MOV R2,#0 MOV R3,#0 TAB:DB ;无序表格 CHEACD EQU 20H KEYWOREEQU 21H第4章 数据处理方法4.1.2 计算查表法计算查表法在微型计算机数据处理系统中,使用的表一般都是线性表。它是若干个数据元素x1,x2
7、,xn的集合,各数据元素在表中的排列方法及所占用的存储器单元个数都是一样的。因此,要搜索的内容与表格的排列有一定的对应关系。对于这种表格,为了提高查表速度,可以放弃从头至尾逐一进行比较的办法。只要根据所给的元素xi,通过一定的计算,求出元素表所对应的数值的地址,然后将该地址单元的内容取出即可。这种有序表格要求各元素在表中排列的格式及所占用的空间必须一致,而且各元素是严格按顺序排列的。它适用于某些数值计算程序,如功能键地址转移程序以及数码转换程序等。第4章 数据处理方法【例例4-2】求函数y=x!(x=0,1,2,7)的值如果按照求阶乘运算,程序设计是很复杂的,必须做x次连乘。但是,如果将函数值
8、列成表格(如表4.1所示)会发现,每一个x值所对应的y值在表中地址可按下面的公式计算出来。y地址=函数表基地址+x2第4章 数据处理方法表表4.1 自变量自变量x,函数函数y及内存单元地址表及内存单元地址表第4章 数据处理方法设自变量元素x存放在YUANSU单元,表的基地址为TABLE,y值存放在寄存器R2R3中,以下给出求取y=x!的查表参考程序。ORG 8000H JIECHENG:MOV A,YUANSU;取xADD A,YUANSU;计算x2MOV R3,AADD A,#06H;计算偏移量XCH A,R3ADD A,#03H;计算偏移量MOVC A,A+PC;取第一个字节R3第4章 数
9、据处理方法MOVC A,A+PC;取第二个字节R2MOV R2,ARET YUANSUEQU 30H TABLEDB 00H,00H,01H,00HDB 02H,00H,06H,00HDB 18H,00H,78H,00HDB 0D0H,02H,0B0H,33H第4章 数据处理方法4.1.3 对分查表法对分查表法在前面介绍的两种查表方法中,顺序查表法速度比较慢,计算查表法虽然速度很快,但对表格的要求比较严格,因而都有一定的局限性。在实际应用中,很多表格都比较长,且难以用计算查表法进行查找,但它们一般都能满足从大到小或从小到大的排列顺序,如热电偶的热电势(mV)-测量温度()对照表,流量测量中的差
10、压与流量对照表等。对于这样的表格,可以采用对分查表法,这是一种快速而有效的方法。第4章 数据处理方法对分查表法的速度要比顺序查表法快很多倍。设一个线性表字节长度为n,若采用顺序查表法,平均查找次数m近似等于n/2次,而对分查表法的最多查找次数约为lb(n1)次。例如,当n=2048时,顺序查表法平均查找次数为1024次,而采用对分查表法最多只需查找9次即可。对分查表法的具体做法是:先取数组的中间值D=n/2项进行查找,与要搜索的x值进行比较,若相等,则查找到;若不等,则继续查找。对于从小到大的顺序来说,如果xn/2项,则下一次取n/2n之间的中值,即对3/4n项进行比较;若xn/2项,则取0n
11、/2之间的中值,即对n/4项进行比较。如此比较下去,则可逐次逼近要搜索的关键字,直至找到为止。第4章 数据处理方法综上所述,可以总结出对分查表法子程序的设计步骤,如下:(1)R2中存放元素表中下限元素的序号(R2=0),R3中存放元素表中上限元素的序号(R3=n)。(2)判断(R2)和(R3)的大小,若(R2)(R3),说明表已查完,但未查到,使标志位CF=0,查表程序结束。(3)计算中点元素号2324RRR第4章 数据处理方法(4)计算中点元素的地址,如下所示MIADR=表首地址+WR4其中,W为一个数据元素的字节数。(5)将关键字x与中点元素的值进行比较:若x(MIADR),选取高值的半个
12、表,此时R3不变,R2R4并转第(2)步;若x=(MIADR),则找到,使CF=1,并将该元素送到R1作为首地址的内部RAM中。根据上述步骤可画出对分查表法子程序流程图,如图4.2所示。第4章 数据处理方法图4.2 对分法查表程序流程图第4章 数据处理方法子程序入口条件:待查找的关键字已在R5中,数组字节长度W存于LONGTH单元,表基地址送DPTR,表存放在外部RAM中。出口条件:若找到,则CF=1,该元素放在以(R1)为首地址的内存单元中;若未找到,则CF=0。根据图4.2编写的子程序清单如下:ORG 8000H HAFTAB:MOV R2,#0;对分法查表子程序MOVX A,DPTR;预
13、置下限初值NC DPTR;表长送AMOV R6,DPH;表基地址送R6R7MOV R7,DPL第4章 数据处理方法 HAF0:DEC A;预置上限初值MOV R3,A HAF1:CJNE A,02H,$+3JC HAF3ADD A,R2;计算中心元素序号送R4CLR CRRC AMOV R4,AACALL MIADD;计算中心元素地址MOVX A,DPTR;取中心元素值,CJNE A,R5,HAF2;将给定值与中心元素值进行比 较,不等;转HAF2INC DPTR;x=给定值,则将其送到R1为首 地址的RAM;单元第4章 数据处理方法 MOV R2,AMOV A,R3AJMP HAF1HAF2
14、:CLR CAJMP DONEMIADR:MOV B,LONGTH;计算中点地址子程序MUL AB;MIADR=表首地址+WR4ADD A,R7MOV DPL,AMOV A,BADDC A,R6MOV DPH,ARET LDDTR1:MOV R1,#DATA;把找到的结果传送到以R1为 首地址的RAM单元第4章 数据处理方法 LOAD:MOVX A,DPTRMOV R1,AINC R1INC DPTRDJNZ LONGTH,LOADRET LONGTHEQU 40H DATAEQU 30H第4章 数据处理方法数字滤波器与模拟滤波器相比,具有如下优点:(1)无需增加任何硬件设备,只要在程序进入数
15、据处理和控制算法之前,附加一段数字滤波程序即可。(2)由于数字滤波器不需增加硬件设备,所以系统可靠性高,不存在阻抗匹配问题。(3)对于模拟滤波器,通常各通道是专用的,而对于数字滤波器来说,则可多通道共享,从而降低了成本。(4)可以对频率很低(如001Hz)的信号进行滤波,而模拟滤波器由于受电容容量的限制,频率不可能太低。4.2 4.2 数字滤波技术数字滤波技术第4章 数据处理方法(5)使用灵活、方便,可根据需要选择不同的滤波方法或改变滤波器的参数。因为数字滤波器具有上述优点,所以在计算机控制系统中得到广泛的应用。针对不同的噪声和采样信号具有不同的性能,为不同场合的应用提供了较广的选择空间。选择
16、这些方法时,必须了解电路中存在的主要噪声类型,包括以下几个方面:噪声是突发随机噪声,还是周期性噪声;噪声频率的高低;采样信号的类型是快变信号还是慢变信号;系统可供使用的资源等。第4章 数据处理方法4.2.1 程序判断滤波程序判断滤波1.限幅滤波限幅滤波限幅滤波的做法是把两次相邻的采样值相减,求出增量(以绝对值表示),然后与两次采样允许的最大差值(由被控对象的实际情况决定)Y进行比较,若小于或等于Y,则取本次采样值;若大于Y,则仍取上次采样值作为本次采样值,即:|Y(k)Y(k1)|Y,则Y(k)=Y(k),取本次采样值|Y(k)Y(k1)|Y,则Y(k)=Y(k1),取上次采样值 (4-2)第
17、4章 数据处理方法Y被称为门限值,是相邻两次采样值所允许的最大偏差,其大小取决于采样周期T及Y值的变化,其实现方法为:(1)根据经验判断,确定两次采样允许的最大偏差值(设为Y);(2)每次检测到新值时进行判断,如果本次采样值与上次采样值之差Y,则本次采样值有效;如果本次采样值与上次采样值之差Y,则本次采样值无效,用上次采样值代替本次采样值,同时将本次采样值保存,为下次滤波做准备。第4章 数据处理方法下面给出用C51编写的参考程序。/*A值可以根据实际情况调整,即Y value 为上次采样的有效值,new_value为当前采样值 滤波程序返回本次采样的有效值*/#define A 10 /设置两
18、次采样允许的最大偏差值 char value;/上次采样后的有效值变量 char filter()char new_value;/本次采样值变量 new_value=get_ad();/读入本次采样值 if(new_value-valueA)(value-new_valueA)/比较是否超出最大偏差值 return value;/如果超出,返回上次的有效值作为本次的有效值 return new_value;如果没有超出,返回本次的采样值作为本次的有效值 第4章 数据处理方法2.限速滤波限速滤波限幅滤波用两次采样值来决定采样结果,而限速滤波则最多可用3次采样值来决定采样结果。其方法是:当|Y(2
19、)Y(1)|Y时,不像限幅滤波那样,用 Y(1)作为本次采样值,而是再采样一次,取得 Y(3),然后根据|Y(3)Y(2)|与Y的大小关系来决定本次采样值。其具体判别式如下:第4章 数据处理方法设顺序采样时刻t1、t2、t3所采集的参数分别为Y(1)、Y(2)、Y(3),那么当|Y(2)Y(1)|Y时,则取Y(2)存入RAM当|Y(2)Y(1)|Y时,则不采用Y(2),但仍保留,继续采样取得Y(3)当|Y(3)Y(2)|Y时,则取Y(3)存入RAM当|Y(3)Y(2)|Y时,则取输入计算机2)2()3(YY第4章 数据处理方法限速滤波是一种折中的方法,既照顾了采样的实时性,又顾及了采样值变化的
20、连续性。但这种方法也有明显的缺点:(1)Y的确定不够灵活,必须根据现场的情况不断更换新值;(2)不能反应采样点数N3时各采样数值受干扰的情况。因此,它的应用受到一定的限制。实际使用时,一般用取代Y,这样可基本保持限速滤波的特性,虽然增加了一步运算,但灵活性有所提高。如图4.3所示给出了限速滤波程序流程图。2)2()3()1()2(YYYY第4章 数据处理方法图4.3 限速滤波程序流程图第4章 数据处理方法设Y(1)、Y(2)、Y(3)是3次采样值,分别存放在20H22H单元中,根据图4.3所示程序流程图,可写出限速滤波的汇编语言程序如下:ORG 8000H PRODT2:MOV A,20H;A
21、Y(1)CLR C;进位位清零SUBB A,21H;计算Y(1)Y(2)JNC NEXT1;Y(1)Y(2)0,则转NEXT1CPL AINC ANEXT1:MOV 23H,A;23H|Y(1)Y(2)|MOV A,21H;计算|Y(2)Y(3)|CLR CSUBB A,22HJNC NEXT2第4章 数据处理方法CPL AINC ANEXT2:MOV 24H,A;24H|Y(2)Y(3)|ADD A,23H;计算RRC AMOV XIANZHI,A;XIANZHIYMOV A,23HCJNE A,XIANZHI,DO1AJAMP DO2;|Y(1)Y(2)|=Y,则转DO2DO1:JC DO
22、2;|Y(1)Y(2)|Y,则转DO2MOV A,24H;A|Y(2)Y(3)|CJNE A,XIANZHI,DO4AJAMP DO5;|Y(2)Y(3)|=Y,则转DO52|)3()2(|)2()1(|YYYYY第4章 数据处理方法DO4:JC DO5;|Y(2)Y(3)|Y,取ADD A,22HRRC AAJAMP DO3DO2:MOV A,21H;|Y(1)Y(2)|Y,取Y(2)DO3:RET XIANZHIEQU 30H2)2()3(YYY第4章 数据处理方法4.2.2 中值滤波中值滤波所谓中值滤波是对某一参数连续采样n次(一般n取奇数),然后把n次的采样值从小到大(或从大到小)排队
23、,再取中间值作为本次采样值。中值滤波对于去掉偶然因素引起的波动或采样器不稳定造成的误差所引起的脉动干扰比较有效。其实现方法是:(1)连续采样N次(N取奇数);(2)把N次采样值按大小排列;(3)取中间值为本次有效值。这种方法能有效克服因偶然因素引起的波动干扰,对温度、液位变化缓慢的被控参数有良好的滤波效果;缺点是对流量、速度等快速变化的参数不宜使用。第4章 数据处理方法中值滤波程序设计的实质是:首先把N个采样值从小到大(或从大到小)进行排列,然后再取中间值。N个数据按大小顺序排列的具体做法是两两进行比较,设R0存放数据区首地址,先将(R0)与(R0+1)进行比较,若(R0)(R01),则不交换
24、存放位置,否则两数位置对换。继而再取(R01)与(R02)比较,判断方法同前,直到最大数沉底为止。然后再重新进行比较,把次大值放在N1位上如此做下去,则可将N个数从小到大顺序排列。设从8位A/D转换器输入的5次采样值存放在以SAMP为首地址的内存区域中,其采用中值滤波程序流程如图4.4所示。第4章 数据处理方法图4.4 中值滤波程序流程图第4章 数据处理方法根据图4.4所示可写出对应的汇编语言程序如下:ORG 8000H INTER:MOV R2,#04H;置外循环次数SORT:MOV A,R2;内循环次数送R3MOV R3,AMOV R0,#SAMP;采样数据存放首地址送R0LOOP:MOV
25、 A,R0;两数比较INC R0MOV R1,ACLR CSUBB A,R0第4章 数据处理方法MOV A,R1JC DONEMOV A,R0;(R0)(R0+1)DEC R0XCH A,R0INC R0MOV R0,ADONE:DJNZ R3,LOOP;R30,内循环继续进行DJNZ R2,SORP;R20,外循环继续进行INC R0MOV R0,ARETSAMPEQU 30H第4章 数据处理方法下面再给出用C51编写的中值滤波法参考程序。/*N值可根据实际情况调整 排序采用冒泡法*/#define N 11 /设置连续采样的次数 char filter()char value_bufN;/
26、缓存N次采样值的存储变量 char count,i,j,temp;/i,j是冒泡排序下标变量,count /是采样数据读入的下标变量temp是 /临时变量 for(count=0;countN;count+)/连续读入N个采样值 第4章 数据处理方法 value_bufcount=get_ad();delay();for(j=0;jN;j+)/冒泡排序,由小到大 for(i=0;ivalue_bufi+1)第4章 数据处理方法 temp=value_bufi;value_bufi=value_bufi+1;value_bufi+1=temp;return value_buf(N-1)/2;/将
27、排序后N个采样的中间值作为最 /后结果返回 第4章 数据处理方法4.2.3 算术平均值滤波算术平均值滤波连续取N个采样值进行算术平均值运算,作为本次滤波得到的有效值。其数字滤波公式为(4-3)由此可见,算术平均值滤波的实质就是把N个采样周期内的N次采样值相加,然后再把所得的和除以采样次数N,得到该周期的采样值。下面给出用C51编写的算术平均值滤波参考程序。NiiXNkY1)(1)(第4章 数据处理方法/*N为进行平均运算的每组采样值的数量,依据实际情况可以改变*/#define N 12 /设置每组参与平均运算的采样值个数char filter()int sum=0;/求和变量,用于存储采样值
28、的累加值 char count;/采样数据读入的下标变量 for(count=0;countN;count+)/连续读入N个采样值,并累加 sum+=get_ad()delay();return (char)(sum/N);/将累加值进行平均计算作为返回值第4章 数据处理方法4.2.4 加权平均值滤波加权平均值滤波式(4-3)中所示的算术平均值,对于N次以内所有的采样值来说,所占的比例是相同的,即滤波结果取每次采样值的1/N。但有时为了提高滤波效果,将各采样值取不同的比例,然后再相加,此方法称为加权平均值滤波法。一个n项加权平均式为(4-4)式(4-4)中C0,C1,C2,Cn1均为常数项,应
29、满足下列关系(4-5)101)(niniXCkY101niiC第4章 数据处理方法下面给出加权递推平均滤波法用C51编写的参考程序。/*coe数组为加权系数表,存在程序在存储区。*/#define N 12 /设置FIFO队列的长度 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;/采样数据读入的下标变量 char value_buf N;/缓存N个采样值的存储变量 int sum=0;/求和变量,用于存储采样
30、值的累加值 for(count=0;countN;count+)第4章 数据处理方法 value_buf count =get_ad();/读入采样值 delay();for(count=0;countN;count+)sum+=value_bufcount*coecount;/累加采样值和系数的乘积 return (char)(sum/sum_coe);/累加值与系数和相除作为返回结果 第4章 数据处理方法4.2.5 滑动平均值滤波滑动平均值滤波不管是算术平均值滤波,还是加权平均值滤波,都需连续采样N个数据,然后求算术平均值或加权平均值,这种方法适合于有脉动式干扰的场合。但由于必须采样N次,
31、需要时间较长,故检测速度慢。为了克服这一缺点,可采用滑动平均值滤波法,即先在RAM中建立一个数据缓冲区,依顺序存放N个采样数据,每次采集到一个新数据,就将最早采集的那个数据丢掉,然后求取包括新数据在内的N个数据的算术平均值或加权平均值。这样,每进行一次采样,就可计算出一个新的平均值,从而加快了数据处理的速度。第4章 数据处理方法滑动平均值滤波实现方法是:(1)连续取N个采样值看成一个队列,队列的长度固定为N;(2)每次采样到一个新数据放入队尾,并扔掉原来队首的一个数据(先进先出原则);(3)把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。第4章 数据处理方法下面给出滑动平均值滤波用C
32、51编写的参考程序。/*缓冲队列长度N可以依据实际情况的不同进行改变*/#define N 12 /设置FIFO队列的长度 char value_bufN;/FIFO队列变量 char i=0;/队列的下标变量 char filter()char count;int sum=0;value_bufi+=get_ad();if(i=N)i=0;for(count=0;countN;count+)sum+=value_bufcount;return (char)(sum/N);第4章 数据处理方法4.2.6 RC低通数字滤波低通数字滤波前面讲的几种滤波方法基本上属于静态滤波,主要适用于变化过程比较
33、快的参数,如压力、流量等。不过对于慢速随机变量则可采用短时间内连续采样求平均值的方法,不过其滤波效果往往不够理想。为了提高滤波效果,可以仿照模拟系统中的RC低通滤波器的方法,用数字形式实现低通滤波,如图4.5所示。第4章 数据处理方法图4.5 RC低通滤波器第4章 数据处理方法由图4.5不难写出模拟低通滤波器的传递函数,即(4-6)由公式(4-6)可以看出,RC低通滤波器就是一个一阶惯性环节。将式(4-6)离散后,可得Y(k)=(1)Y(k1)+X(k)(4-7)11)()()(ssXsYsG第4章 数据处理方法对于一个确定的采样系统而言,T为已知量,所以由,可得(4-8)当1时,ln(1)1
34、=所以式(4-8)可化简为(4-9)1)1ln(TTT或 第4章 数据处理方法 /*为加快程序处理速度假定基数为100,=0100*/#define a=50 /定义加权系数 Char value;/上一个采样值变量 Char filter()Char new_value;/本次采样值变量 New_value=get_ad();Return(100-a)*value+a*new_value;/返回本次滤波结果 第4章 数据处理方法4.2.7 复合数字滤波复合数字滤波为了进一步提高滤波效果,有时可以把两种或两种以上有不同滤波功能的数字滤波器组合起来,组成复合数字滤波器,或称多级数字滤波器。例如,
35、前面讲的算术平均值滤波或加权平均值滤波,都只能对周期性的脉冲采样值进行平滑加工,但对于随机的脉冲干扰(如电网的波动及变送器的临时故障等)则无法消除。然而中值滤波却可以解决这个问题。因此,可将二者结合起来,形成多层次滤波。即把采样值先按从大到小的顺序排列起来,然后将最大值与最小值去掉,再把余下的部分求取算术平均值。第4章 数据处理方法这种滤波方法的原理可由下式表示。若X(1)X(2)X(N),3N14,则有(4-10)此外,也可采用双重滤波的方法,即把采样值经过低通滤波后,再经过一次高通滤波,这样,结果更接近理想值,这实际上相当于多级RC滤波器。对于多级RC滤波,根据式(4-7)可知:第一级滤波
36、Y(k)=AY(k1)+BX(k)(4-11)12)(212)1()3()2()(NiiXNNNXXXkY第4章 数据处理方法再进行一次滤波,则Z(k)=AZ(k1)+BY(k)(4-12)式(4-12)中,Z(k)为数字滤波器的输出值;Z(k1)为上次数字滤波器的输出值。将式(4-11)代入式(4-12),得Z(k)=AZ(k1)+ABY(k1)+B2X(k)(4-13)将式(4-12)移项,并将k改为k1,则Z(k1)AZ(k2)=BY(k1)将BY(k1)代入式(4-13),得Z(k)=2AZ(k1)A2Z(k2)+B2X(k)(4-14)式(4-14)即为两级数字滤波公式,根据此式可设
37、计出一个采用n级数字滤波的一般原理图,如图4.6所示。第4章 数据处理方法图4.6 n级数字滤波的一般形式第4章 数据处理方法4.2.8 各种数字滤波性能的比较各种数字滤波性能的比较1.滤波效果滤波效果一般来说,对于变化比较慢的参数,如温度,可选用程序判断滤波及一阶滞后滤波方法。对那些变化比较快的脉冲参数,如压力、流量等,则可选择算术平均和加权平均滤波法,特别是加权平均滤波法。至于要求比较高的系统,需要用复合滤波法。在算术平均滤波和加权平均滤波中,其滤波效果与所选择的采样次数N有关,N越大,则滤波效果越好,但花费的时间也越长。高通及低通滤波程序是比较特殊的滤波程序,使用时一定要根据其特点选用。
38、第4章 数据处理方法2.滤波时间滤波时间在考虑滤波效果的前提下,应尽量采用执行时间比较短的程序,若计算机计算时间允许,可采用效果更好的复合滤波程序。注意:数字滤波在热工和化工过程的DDC系统中并非一定需要,需根据具体情况,通过分析、实验加以选用。如果数字滤波应用不当(例如,可能将待控制的偏差值滤掉),反而会降低控制效果,甚至失控,因此在使用中必须给予注意。第4章 数据处理方法4.3.1 量程自动转换量程自动转换1.集成集成PGA集成PGA电路的种类很多,下边以PGA102为例说明这种电路的原理及应用,其他与此类似。PGA102是一种高速、数控增益可编程放大器,由脚和脚的电平来选择增益为1,10
39、或100。每种增益均有独立的输入端,通过一个多路开关进行选择。PGA102的内部结构,如图4.7所示,对应增益选择如表4.2所示。4.3 4.3 量程自动转换和标度变换量程自动转换和标度变换第4章 数据处理方法图4.7 PGA内部结构图说明:逻辑0:0 VV0.8 V 逻辑1:2 VV+VCC 逻辑电压是相对引脚的第4章 数据处理方法表表4.2 PGA102增益控制表增益控制表第4章 数据处理方法2.组合型组合型PGA 组合型PGA由运算放大器、仪器放大器或隔离型放大器,再加一些附加电路组合而成。图4.8所示为采用多路开关CD4051和由普通运算放大器组成的可编程增益运算放大器。图4.8中A1
40、、A2、A3组成差动式放大器,A4为电压跟随器,其输入端取自共模输入端,输入端接到A1、A2放大器的电源地端。A1、A2的电源电压浮动幅度将与VCM相同,从而减弱了共模干扰的影响。实验证明,这种电路与基本电路相比,其共模抑制比至少提高20 dB40 dB。第4章 数据处理方法图4.8 采用多路开关的可编程增益运算放大器第4章 数据处理方法采用CD4051作为模拟开关,通过一个4D锁存器与CPU总线相连,改变输入到CD4051选择输入端A、B、C的值,即可使R0R7这8个电阻中的一个接通,阻值大小可根据放大倍数的要求,由公式AV=1+2R8/Ri来求得,从而可得到不同的放大倍数。当CD4051所
41、有开关都断开时,相当于Ri=,此时放大器的放大倍数AV=1。图4.9所示为由增益可编程放大器PGA102及仪器放大器INA102组成的增益可编程仪用放大器,图4.9中V为输入保护二极管,可保证INA102两输入端电位不会超过12 V和0.7 V,应采用漏电小的二极管,如FD300,以减小温度漂移。这里INA102接成增益为1的放大器,通过PGA102的引脚、的逻辑电平控制可获得1、10、100的增益。第4章 数据处理方法图4.9 增益可编程仪用放大器第4章 数据处理方法利用可编程增益放大器能实现量程自动转换,特别是当被测参数动态范围比较宽时,使用PGA的优越性更为显著。例如在数字电压表中,其测
42、量动态范围可从几微伏到几百伏,对于这样大的动态范围,要想提高测量精度,必须进行量程转换。以前多用手动进行转换,现在,在智能化数字电压表中,采用可编程增益放大器和微型机即能很容易实现量程自动转换。其原理如图4.10所示。第4章 数据处理方法图4.10 利用PGA实现量程自动转换的数字电压表原理第4章 数据处理方法图4.10中PGA的增益有1、10、100三挡,A/D转换器为位双积分式A/D转换器,可画出用软件实现量程自动转换的流程图,如图4.11所示。214第4章 数据处理方法图4.11 量程自动转换程序流程图第4章 数据处理方法4.3.2 线性参数标度变换线性参数标度变换线性参数标度变换是最常
43、用的标度变换方法,其前提条件是被测参数值与A/D转换结果为线性关系。线性标度变换的公式为 (4-15)00m00m)(ANNNNAAAxx第4章 数据处理方法式(4-15)为线性标度变换的通用公式,其中Am、A0、Nm,N0对于某一固定的被测参数来说都是常数,不同的参数有不同的值。为了使程序设计简单,一般把一次测量仪表的下限A0所对应的A/D转换值置为0,也即N0=0。这样式(4-15)就简化为(4-16)在很多测量系统中,仪表下限值A0=0,此时对应的N0=0,式进(4-16)一步简化为(4-17)0m0m)(ANNAAAxxmmNNAAxx第4章 数据处理方法【例例4-3】某压力测量仪表的
44、量程为400 Pa1200 Pa,采用8位A/D转换器,设某采样周期计算机中经采样及数字滤波后的数字量为0ABH,求此时的压力值。解:根据题意,已知A0=400 Pa,Am=1200 Pa,Nx=0ABH=171D,Nm=0FFH=255D,N0=0,所以采用公式(4-16),则Pa936400255171)4001200()(0m0mANNAAAxx第4章 数据处理方法所谓计算机标度变换程序就是根据上述公式编写的自动计算程序,所以可分别把上述3种情况设计成不同的子程序,以便用户调用。设计时根据需要可用定点运算,也可采用浮点运算。为了编程把上述3个公式分别写成如下形式:Ax1=a1Nx+b1(
45、4-18)其中,;。Ax2=a2Nx+A0(4-19)0m0m1NNAAa00m0m01NNNAAAb第4章 数据处理方法其中,Ax3=a3Nx(4-20)其中,这样就可根据式(4-18)、式(4-19)、式(4-20)求出不同情况时被测参数的标度变换值。设经A/D转换及数字滤波后的采样值Nx为3字节浮点数,存放在以CAIYANG为首地址的RAM单元,常数a1和a2也已转换成3字节浮点数,并分别存放在以COST1和COST2为首地址的RAM单元,其标度变换程序如下:m0m2NAAamm3NAa 第4章 数据处理方法ORG 8000H ;标度变换程序1(线性参数)SCACOA:MOV R1,#C
46、AIYANG;Nx浮点数存放首地址R1MOV R0,#COST1 ;a1浮点数存放首地址R0ACALL FMUL;a1NxR4(阶)R2R3ACALL FSTR ;R4(阶)R2R3R1指向的3个RAM单元MOV R0,#COST2 ;R0指向b1所在的3个RAM单元ACALL FADD ;计算Ax=a1Nx+b1R4(阶)R2R3ACALL FSTR ;AxR1指向的3个RAM单元MOV A,R1MOV R0,AMOV R1,¥BCD第4章 数据处理方法ACALL FBTD ;将Ax转换成BCD码,并放在以 ;BCD为首地址的RAM单元RETCAIYANGEQU 20HCOST1EQU 23
47、HCOST2EQU 26HBCDEQU 29H第4章 数据处理方法4.3.3 非线性参数标度变换非线性参数标度变换1.公式变化法公式变化法例如,在流量测量中,当液体的流量与被测液体流过节流装置前后产生的压力差的平方根成正比时,流量与压差的关系为(4-21)此时测量流量时的标度变换公式为(4-22)PKQ00m00mQNNNNQQQxx第4章 数据处理方法对于流量仪表,一般下限Q0为0,所以,式(4-22)可简化为(4-23)若取流量表下限对应的数字量N0为0,更可进一步简化公式为(4-24)0m0mNNNNQQxxmmNNQQxx第4章 数据处理方法与线性刻度标度变换公式一样,由于Qm、Q0、
48、Nm、N0都是常数,所以式(4-22)、式(4-23)、式(4-24)又可分别记做(4-25)式中,(4-26)0011QNNKQxx0mm1NNQK022NNKQxx第4章 数据处理方法式中,(4-27)式中,0mm2NNQKxxNKQ3mm3NQK 第4章 数据处理方法2.其他标度变换法其他标度变换法许多非线性传感器并不像上面讲的流量传感器那样,可以写出一个简单的公式;或者虽然能够写出公式,但计算相当困难。这时可采用多项式插值法,也可用线性插值法或查表法进行标度变换。关于这些方法的详细内容,请参阅本章4.4节。第4章 数据处理方法4.4.1 线性插值算法线性插值算法用计算机处理非线性函数应
49、用最多的方法是线性插值法。线性插值法是代数插值法中最简单的形式。假定变量y和自变量x的关系如图4.12所示。4.4 4.4 测量数据预处理技术测量数据预处理技术第4章 数据处理方法图4.12 线性插值法示意图第4章 数据处理方法已知y在点x0和x1的对应值分别为y0和y1,现用直线似代替弧线,从而可得直线方程g(x)=ax+b(4-28)根据插值条件,应满足(4-29)解方程组(4-29),可求出直线方程g(x)的参数a和b。由此,可求出该直线方程的表达式为ABbaxybaxy1100第4章 数据处理方法(4-30)式中,,称为直线方程g(x)的斜率。或(4-31)00000101)()()(
50、yxxkyxxxxyyxg0101xxyyk10010110)(xxxxyxxxxyxg第4章 数据处理方法4.4.2 分段插值算法程序的设计方法分段插值算法程序的设计方法分段插值法的基本思想是被逼近的函数(或测量结果)根据变化情况分成几段,为了提高精度及缩短运算时间,各段可根据精度要求采取不同的逼近公式。最常用的是线性插值和抛物线插值。在这种情况下,分段插值的分段点的选取可按实际曲线的情况灵活决定。关于抛物线插值算法,读者可参阅其他资料。第4章 数据处理方法分段插值法程序设计步骤如下:(1)用实验法测量出传感器的输出变化曲线,y=f(x)(或各插值节点的值(xi、yi),i=0、1、2,n)