DCS模拟量数据的分部压缩方法

2013-03-16 06:19刘海涛
电子测试 2013年12期
关键词:游程压缩算法尾数

李 焕,刘海涛

(1.应天职业技术学院机电工程系,江苏南京210046;2.南京工程学院电力工程系,江苏南京,210067;)

0 引言

与DCS接口中,串行通讯是常见的接口方式。为了提高通讯效率,需要对通讯的数据进行压缩处理。

DCS模拟量的压缩方法中,常用整数表示工程量,即将模拟量的按其量程线性化处理为两字节正整数(0~65535),应用时再转换为工程量。这种方法由于要维护模拟量的量程表,不便于通信;另一类常用的压缩方法是采用LZW等基于字典模型的压缩算法。模拟量数据是以单精度浮点数存放的,数据的冗余度很小,传统的压缩处理方法的压缩效果都不理想。

本文从模拟量在计算机中的表示方法入手,首先将模拟量预处理,再针对数据的不同部分采用不同的方法进行压缩,最后将压缩后数据组合起来。这样既充分考虑到了数据的特点,又充分利用了压缩方法的适应性。

1 模拟量的表示方法及特点

1.1 模拟量的表示方法

DCS模拟量用单精度浮点数表示,占用4个字节,可以精确到7位有效数字。按文献[3]标准(以下简称标准)表示。设一个浮点数R,可使用三元组{S,E,M}来表示:S为符号位,用1位表示。S=0表示R为正数,S=1表示R为负数;E为指数,用8bits表示。实际指数要经E-127计算后得到;M为尾数,用23bits表示。浮点数R为S×1.M E(1为隐含的一位尾数,不在M中表示)。

1.2 模拟量的特点

数据压缩需要信息有足够的冗余度。以标准表示的模拟量不利于压缩。即便差值很小的数据,在计算机中表示结果差别很大,如1234.5在计算机中用四字节表示为:68 154 80 0 ,而1234.6表示为:68 154 83 51,仅有符号位和指数位表示相同,尾数完全不同,这样就造成了压缩的难度。

现以200个模拟量数据为样本分析其特点。样本数据随机产生,其范围为[0.0,1000.0]。按照标准存储的数据从字符概率分布较平均,若用通用数据压缩方法压缩这些数据,得不到很好的效果。

虽然浮点数的信息冗余度很小,但若用其表示DCS模拟量,仍有以下特点:

(1)各工程量数值多数大于零,因此标准表示中,符号位S大多为零;

(2)各工程量的量程相差约为0.0001~10000倍,因此标准表示中,指数差值约为-4~4;

(3)从数据精度考虑,工程量一般保留5位有效数字即可。因此标准表示中,尾数部分有可压缩的信息。

2 模拟量的预处理

模拟量预处理的目的是为了产生更多的冗余信息,获得更好的压缩效果。通信时一般将模拟量按测点表以自然顺序排列。根据1.2节的分析可知,若将模拟量按其三元组顺序排列,即:N个模拟量数据,其自然排列顺序为{S1,E1,M1}、{S2,E2,M2}、…、{SN,EN,MN},共占用4N字节。压缩前将模拟量序列按字节重新排列为:S1S2…SNE1E2…ENM1M2…MN。因符号位S为1位,重新排列后将8个模拟量的符号位合并为1字节。故重新排列后N个模拟量共占用字节数为4N+N/8(+1)字节。(括号中+1字节表示N不是8的整数倍时总字节数+1)。

图1(a)为样本数据经重新排列后字节分布情况。可以看出数据已呈现明显的规律性:第一部分数据[1,25]为数据的符号,是样本数据的符号。样本数据均为正,因此由符号位构成的这部分数据全为零;第二部分数据[26,225]为N个样本数据的指数,根据1.2节分析可知,各数据的指数差值大约在-4~4之间,故有较大的压缩空间;最后一部分数据[226,825]为N个样本的尾数,呈随机分布。

第一次预处理是数据无损的。考虑到DCS模拟量精度要求有5位有效数字即可。根据信息理论,1位十进制数可以精确表示log210≈3.32位二进制数。单精度浮点数表示模拟量时,4位二进制约可表示1位十进制。因此,在精度满足DCS系统要求的情况下,可以减少一个字节尾数。第二次预处理将尾数的最低字节置零,进一步提高数据的冗余信息。图1(b)为第二次预处理后的字节分布情况。可以看出,相比第一次预处理,数据最后一部分[626,825]全为零,可以更好地被压缩。

3 压缩算法的选择

3.1 压缩算法选择原则

压缩算法要根据原始数据的特点以及对速度、性能的综合要求来选择。模拟量的压缩应用在数据通信中,对速度的要求较高。因此压缩算法不能过于复杂,运算量要小。

从预处理后的样本数据可以看出,每一部分数据的特点不同,因此选择压缩算法时应针对不同特点的数据采用不同的压缩算法来处理。第一部分数据(由符号位组成)为零(或绝大部分为零),可以采用游程编码(Run Length Encoding);第二部分数据(由指数组成)数值间相差不大,可用差分编码(Differential Encoding);第三部分数据(由部分尾数组成)随机性较大,压缩效果不明显,因此不进行压缩;第四部分数据(由最低字节尾数组成)均为零,可采用游程编码。

图1 预处理后字节分布Figure 1 The Bytes Distribution of Preprocessing

3.2 差分编码

差分编码又称相关编码。当源数据之间差值不大时,用数据间的差值代替源数据序列。较小的差值可以用较少的位数表示。本文用4位二进制表示一个差值。

源数据中序列E1E2…EN为数据的指数,其差值约在-4~4之间,用4位二进制表示此差值:最高位用来表示差值的符号,其余三位表示差值,-7保留。可表示的差值范围为-6~+7;若差值大于此范围,则不压缩,用原码输出。为了区分是差值输出还是原码输出,用保留的-7表示下一字节为原码输出。N字节源序列,若每一字节都可以用相邻差值来表示,其理想压缩比为1:(N/2+1)/ N=1:0.5+1/N。

图2 差分编码后字节分布Figure 2 The Bytes Distribution After Differential Encoding

图2为样本数据差分编码压缩后字节分布。可以看到,源数据中表示指数的部分已经被有效压缩。样本数据由825字节压缩到726字节,实际压缩率为88.0%。

3.3 游程编码

游程编码的思路是:若数据项d在源数据中连续出现n次(n称为重复因子),则在输出流中以nd代替n个重复项d。游程编码也可能出现压缩比大于1的情况。为了区分输出项是重复因子还是被压缩数据,规定当重复因子n≥3时,输出ddd(n-3);n<3时,输出n个d,即不压缩输出。另外重复因子3≤n≤255,若数据项d重复次数大于255,则要重新进行游程编码。设源数据长度为N,包含M次重复,每次重复平均长度L,则游程编码压缩比为1:(N-M×(L-4))/N。

样本数据经预处理后第一部分(由符号位组成)和第四部分(由最低位尾数组成)可以用游程编码。这部分数据可以获得很高的压缩比。第一部分理想压缩比为1:4/25=1:0.16;第四部分理想压缩比为1:4/200=1:0.015。

图3 游程编码后字节分布Figure 3 The Bytes Distribution After RLE

图3为经游程编码压缩后的数据分布图。由上一级差分编码压缩后的726字节压缩至510字节,实际压缩比为1:0.70。

4 结论

200个样本数据经预处理,对一部分数据进行差分编码、对另一部分数据进行游程编码,最终有510个字节。因此综合压缩比为1:510/800≈1:0.64,节省约36%的空间。由于样本数据的随机性,因此可以推广到一般情况。得到以下结论:

(1)分部压缩方法可以获得约1:0.64的压缩比;

(2)分部压缩方法为二级压缩算法构成。分别针对模拟量中不同信息类型的数据进行分部压缩;

(3)差分编码和游程编码的算法的复杂度低,其时间复杂度和空间复杂度均为O(n),故算法效率很高。

(4)压缩过程未涉及到数据的工程特性,因此算法可推广至工业过程控制领域,具有一定的实用价值。

[1] 徐慧.实时数据库中数据压缩算法的研究[D].浙江:浙江大学信息学院,2006

[2] 拓广忠,慕群.实时数据库原理及其压缩技术分析[J].华北电力技术.2004(6):17-20

[3] 中国电子技术标准化研究所,GB/T 17966-2000 微处理器系统的二进制浮点运算[S].北京:中国标准出版社,2000

[4] David Salomon,数据压缩原理与应用(第二版)[M].吴乐南,译.北京:电子工业出版社,2003

猜你喜欢
游程压缩算法尾数
“改写”与“省略”三不同
中国羽毛球组合郑思维/黄雅琼连续得失分规律研究
连续自然数及乘积的尾数和奇偶性的分析
基于参数识别的轨道电路监测数据压缩算法研究
2019年度下半年《启迪与智慧》上下半月刊、《幽默与笑话》上下半月刊、《拳击与格斗》上半月刊抽大奖中奖结果
改进型相对游程长度编码方法
GF(3)上两类广义自缩序列的伪随机性*
一种基于嵌入式实时操作系统Vxworks下的数据压缩技术
RPT方法在多元游程检验中的应用
有趣的九九乘法表