第5章数据处理
result= tab[offset ];
return result; }
/*查表*/
第5章 数据处理方法
5.1.3 对分查表法
在前面介绍的两种查表方法中,顺序查表法速度比较慢,
计算查表法虽然速度很快,但对表格的要求比较严格, 因
而都有一定的局限性。 在实际应用中,很多表格都比较长,且难以用计算查表
则取本次采样值;若大于ΔY ,则仍取上次采样值作为本次
采样值,即: |Y(k)-Y(k-1)|≤ΔY, 则Y(k)=Y(k),取本次采样值
|Y(k)-Y(k-1)|>ΔY, 则Y(k)=Y(k-1),取上次采样值
ΔY被称为门限值,是相邻两次采样值所允许的最大偏 差,其大小取决于采样周期T及Y值的变化。
查表法对于无序表格或较短表格而言,是一种比较常用的方法。
顺序查表法的步骤如下: (1)设定表格的起始地址。
(2)设定表格的长度。
(3)设定要搜索的关键字。 (4)从表格的第一项开始,比较表格数据和关键字,进行 数据搜索。
第5章 数据处理方法
顺序查表程序 设置标志位flag 读第一个数据 Y
是关键字否? N 取下一个数据 N 是否检索完? Y 取FFH作为返回值
根据|Y(3)-Y(2)|与ΔY的大小关系来决定本次采样值。限速
滤波的思想用控制算式可以表示为:
当Y 2 Y 1 Y 时, 则Y 2作为本次采样值 当Y 2 Y 1 Y 时, 保留Y 2, 继续采样取得Y 3 当Y 3 Y 2 Y 时, 则Y 3作为本次采样值 当Y 3 Y 2 Y 时, 则取Y 2 Y 3/ 2作为本次采样值
//比较是否超出最大偏差值
return value; //如果超出, 返回上次的有效值作为本次的有效值 else {value =new_value; return value;} //没有超出, 返回本次的采样值作
为本次的有效值
}
第5章 数据处理方法
2. 限速滤波 限幅滤波用两次采样值来决定采样结果,而限速滤波则 最多可用3次采样值来决定采样结果。 其方法是:当|Y(2)-Y(1)|>ΔY时,不像限幅滤波那样, 用 Y(1)作为本次采样值,而是再采样一次,取得 Y(3),然后
是 否 起点数据= 关键字否?? 否 对分数>关 键字否? 否 对分序号做起点 对分序号做终点 是
返
回
对分查表法程序流程图
第5章 数据处理方法
5.2 数字滤波技术
在工业过程控制系统中,被控对象所处的环境通常存 在着多种干扰源,使得控制系统的输入数据中均含有各种 频率的干扰信号。对于高频的干扰信号,可以通过模拟RC 滤波器进行滤除,而对于低频干扰信号,模拟RC滤波器的 滤波效果较差。为了准确地进行数据测量和控制,通常采 用数字滤波器对低频干扰信号进行滤波,以弥补RC滤波器 的不足。 数字滤波的实质是一种程序滤波,就是通过一定的计
杂。但若将函数值列制成表格就会发现,每一个x的值所对应的
y值在表中的地址可以按照下面的公式进行计算。 y地址=函数表的基地址 + x×2
第5章 数据处理方法
表5-1 自变量x,函数y及内存单元地址表 x 0 1 2 3 4 5 6 7 y 00H 00H 01H y地址 tab tab+1 tab+2
c=(Y2+Y3)>>1;
DY=(a+b)>>1; if(a<=DY){return Y2;}
else if(b<=DY){return Y3;}
else return c; }
说明:返回值同时也可作为Y1,以便下一次滤波计算使用。
第5章 数据处理方法
在keil中printf默认是 向串口中发送数据 的,所以如果要应 用该函数,必须先 初始化串口,否则 可能引起死机的情 况。
#include <math.h>
#define DY 10 char value; char filter() { char new_value; //本次采样值变量 new_value=get_ad();//读入本次采样值 //设置两次采样允许的最大偏差值 //上次采样后的有效值变量
if(cabs(new_value-value)>DY)
法进行查找,但它们一般都能满足从大到小或从小到大的排
列顺序,如热电偶的热电势(mV) -测量温度(℃) 对照表,流 量测量中的差压与流量对照表等。对于这样的表格,可以采
用对分查表法,这是一种快速而有效的方法。
第5章 数据处理方法
开 始
设置数据起点、终点
读检索关键字
检索项序号=
起点 终点 2
是
到检索范 围边界否? 否 取对分数据
第5章 数据处理方法
限幅滤波主要用于变化比较缓慢的参数,如温度、物理
位置等测量系统。具体应用时,关键的问题是最大允差ΔY的
选取,ΔY太大,各种干扰信号将“乘虚而入”,使系统误差 增大;ΔY太小,又会使某些有用信号被“拒之门外”,使计 算机采样效率变低。因此,门限值ΔY的选取是非常重要的。 通常可根据经验数据获得,必要时也可由实验得出。
第5章 数据处理方法
限幅滤波程序 求 |Y(k)-Y(k-1)|
|Y(k)-Y(k-1)|>|∆Y ? Y Y(k)=Y(k-1) N
返回滤波程序输出Y(k)
返回
限幅滤波程序流程图
第5章 数据处理方法
下面给出用C51编写的参考程序。
/* DY值可以根据实际情况调整, 即ΔY 是可以灵活调整的。value 为上次 采样的有效值, new_value为当前采样值滤波程序返回本次采样的有效值 */
多个被测量相关,而且相互之间存在不同的线性或非线性的
关系。 此外,输入的数字量除了有用的信号,还往往携带有被 控现场和过程通道中的各种干扰信号。因此,采样数据并不 能直接用于运算、显示和控制,还必须对其进行加工和处理。 本章主要介绍计算机控制系统中常用的几种数据处理方 法,包括查表技术、数字滤波、量程自动转换和标度变换以 及数据预处理技术。
取代ΔY,这样可
基本保持限速滤波的特性,虽然增加了一步运算,但灵活性有
所提高。
第5章 数据处理方法
限速滤波程序流程图
第5章 数据处理方法
C语言程序:
# include <math.h> unsigned char Y1,Y2,Y3,DY,a,b,c; unsigned char Filter() { a=cabs(Y1-Y2); b=cabs(Y2-Y3);
设置查找成功标志 取关键字在表中地址
返回
顺序查表法程序流程图
第5章 数据处理方法
【例5-1】在以Tab为首地址的ROM单元中,有一长度为100字节的无序表格。 设待查关键字放在keyword单元,试用软件进行查找。若找到则将关键字在表 中的位置返回;未找到则返回FFH。
程序如下: unsigned char code Tab[100]; bit flag=0; unsigned char keyword; unsigned char search() { unsigned char i; for(i=0;i<100;i++) { if(keyword==Tab[i]) { flag=1; break; } } if(flag= =0) {i=0xff;} return i;
格,查表程序的任务就是根据被测参数的量值或中间结果,查出最终所需
要的结果。查表法主要包括顺序查表法、计算查表法和对分查表法 。
第5章 数据处理方法
5.1.1 顺序查表法
顺序查表法是针对无序排列表格的一种查询方法。因为无
序表格中所有项的排列没有一定的规律,所以只能按照顺序从 第一项开始逐项寻找,直至找到所要查找的关键字为止。顺序
第5章 数据处理方法
常用数字滤波方法:
程序判断滤波
中值滤波 算术平均值滤波 加权平均值滤波 滑动平均值滤波
RC低通数字滤波
复合数字滤波
第5章 数据处理方法
5.2.1 程序判断滤波
1. 限幅滤波
限幅滤波的做法是把两次相邻的采样值相减,求出增量
(以绝对值表示),然后与两次采样允许的最大差值(由被 控对象的实际情况决定)ΔY进行比较,若小于或等于ΔY ,
第5章 数据处理方法
限速滤波是一种折中的方法,既照顾了采样的实时性,又
顾及了采样值变化的连续性。但这种方法也有明显的缺点: (1) ΔY的确定不够灵活,必须根据现场的情况不断更换新 值; (2) 不能反应采样点数N>3时各采样数值受干扰的情况。因 此,它的应用受到一定的限制。 实际使用时,一般用
Y (2) Y (1) Y (3) Y (2) 2
# include <reg51.h> int code tab[]={0x00, 0x01, 0x02, 0x06, 0x18, 0x78, 0x2d0 ,0x33b0}; /*定义函数表*/ int result; int search (int argument) { unsigned char offset; offset =2*argument; /*计算*/
00H
02H 00H 06H
tab+3
tab+4 tab+5 tab+6
00H
18H 00H 78H 00H
tab+7
tab+8 tab+9 tab+A tab+B
D0H
02H B0H 33H
tab+C
tab+D tab+E tab+F
第5章 数据处理方法