叶润武+胡洁+刘委+孙旭+高亚红
摘 要:随着车联网技术的不断发展,海量数据传输和存储成为关键问题,普通压缩算法压缩效率难以满足需要。根据LZW算法原理,结合车联网系统中发动机参数数据传输特点,对LZW算法的字典初始化、字典查找方式、字典大小进行改进,并应用于车联网系统。现场测试结果表明,当数据达到一定量后,改进的LZW压缩算法性能趋于稳定,压缩率较普通LZW压缩算法提高了30%,满足了发动机系统数据压缩的应用需求。
关键词:LZW算法;车联网;数据压缩;字典编码
DOIDOI:10.11907/rjdk.171195
中图分类号:TP319
文献标识码:A 文章编号:1672-7800(2017)007-0152-03
0 引言
随着电子技术的不断进步,发动机监测技术已从简单控制发展到现代电子控制。为了减少线束、提高信号利用率、共享和传输大批量发动机运行状态参数,车联网成为汽车电子化发展的重要环节[1]。为了准确采集与分析发动机运行状态参数,需对发动机运行状态参数实时采集,传输给上位机。由于采集频率较高,庞大的数据量不仅给网络传输带来拥塞,而且给数据库存储带来巨大压力[2]。对此,除了优化数据库的存储结构外,数据压缩尤为重要。LZW算法以其独特的优点广泛应用于数据压缩领域。LZW算法可以有效利用字符出现次数的冗余度进行压缩,自适应产生字典,对数据流中重复出现的字节和字串,LZW压缩技术具有很高的压缩比[3]。
1 发动机参数采集系统组成
发动机参数采集系统主要由两大部分组成:①无线数据模块(发动机参数采集模块),由主控制器芯片MC9S08DZ60组成数据采集单元。电子控制单元通过CAN总线采集ECU节点数据,CAN模块接口电路作为通信桥梁。根据TCP/IP协议,通过GPRS与上位机实现多机串口通信;②基于客户/服务器(C/S)结构,以数据库技术为核心,编写数据采集管理系统并通过多线程技术开发基于TCP协议的多客户机/服务器通信程序[4],采用Web 技术,开发一个基于 B/S 模式的远程查询和分析系统。本文主要研究第①部分,如图1所示。
系统由无线数据模块、服务器软件和用户终端3个模块组成。本文研究的是无线数据模块和数据压缩。
1.1 无线数据模块设计
无线数据模块包含硬件和软件两部分。软件按照分层架构,分为接口层和应用层,接口设计成函数调用型底层软件,应用层实现通信与控制功能。对于不同的应用对象和功能需求,可修改和添加功能以满足需要。系统组成如图2所示。
1.2 数据处理模块设计
数据采集完后需要进行一系列处理,使其更好地传输,主要包括数据分类、转化。之后,为了方便传输,减少带宽,缓解数据库存储压力,对转化后的数据进行预处理和压缩。上下位机的通信按照已经定义好的通信协议进行。
每帧数据中的ID号代表数据类型,首先根据ID对数据进行分类,之后读取参数值,流程如图3所示。
2 数据压缩
2.1 LZW编码原理
LZW编码器是一种贪婪分析算法,每次对字符的编码都要顺序检查输入的数据流,从字典中找出已经出现过的最长字符串,并输出对应的索引值[5]。LZW编码算法实现步骤:①将字典中的0-255项初始化,当前前缀P为空;②将字符流中第一个字符存入当前字符串P中;③输入下一个字符串x,然后判断P+x是否在字典中。若是,P=P+x,若否,输出代表当前前缀P的码字,并把字符串P+x添加到字典,再令P=x;④判断当前码字流中是否还有码字要编码。若有,返回步骤②,若没有,将当前字符串的编码输出即可,程序结束。
2.2 数据预处理模块
无线数据模块采集完参数后,存入芯片的RAM区,在进行LZW压缩前,需要对采集的参数作预处理,数据结构如图4所示。
无线数据模块主要采集心跳信息、发动机参数信息和GPS位置信息3种数据,如图5所示。
在通信协议中,定义了不同的端口号和标识符对其进行接收。这3种数据的端口号和标识符是对应的,处理步骤:①去掉端口号和标识符,用m,n和h代替;②因为系统采集的发动机参数有96种之多,为了方便后续字典查找,本系統对96种发动机参数设置索引,参数索引值加入LZW编码的前缀直接存储在字典中[6]。
2.3 字典初始化改进
在LZW算法中,首先按码表初始化256个字符,这就是字典的初始项,实际是用典型16位指针表示。数据压缩算法的主要改进思想是利用变字长的码字进行编码,通过编码过程设置步骤号来改进编码的存储字节数[5]。假设现在的位号为1,要输出其编码的位数,其位数为整数,压缩过程和解码过程一一对应,则可以通过步骤号来准确判断编码位数,从而得到正确的解码。发动机参数的内容多为发动机运行状态参数信息、故障代码等,以十六进制进行存储发送,发动机参数为0,1,3,4,5,6,7,8,9,A,B,C,D,E,F这16种字符格式。首先初始化前16项,初始化编码位数采用8位,大大减少了编码位数,很大程度上提高了发动机参数的压缩效率和质量[7]。
字典初始项只有19个,除了十六进制的0~F,还要将替代后的标识符和端口号一起写入字典,相对应的索引值就是16,17,18,这样大大减少了字典的初始项。
2.4 字典查找方式改进
LZW算法的字典查找方式是顺序查找,当字典很大时,查找速度大大降低。本系统中发动机参数有96种之多,顺序查找时间过长。因此,对字典的查找方式进行改进,改进方式如下:在数据预处理模块,对发动机的96种参数加索引值,在LZW压缩过程中,索引值作为LZW编码前缀的一部分。这里分别引入二叉树查找和哈希查找两种方式,通过对比,得出当数据量逐渐增大时,哈希查找的速度明显高于二叉树查找,所以在字典的查找方式中,结合哈希查找,大大提高了数据的压缩速度[8]。endprint
2.5 字典大小改进
数据存储在ROM区,MC9S08DZ60芯片的ROM区大小是4K。发动机运行状态参数具有多样化和较高的采集频率,随着压缩的不断进行,字典一定会溢出。为了防止字典溢出,在字典初始化時设置溢出标识符T,在压缩过程中,时刻检测T值。当T=1时,代表字典溢出,这时,自动清空字典,重新开始字典初始化。
3 系统实验
本文主要对无线数据模块进行测试。测试包括两部分:①对无线数据模块数据接收进行测试,验证发动机参数采集的正确性,以此作为本系统是否有效及可靠的依据,为后面的数据压缩提供数据;②对数据压缩模块进行测试,通过对改进的LZW压缩算法和普通LZW压缩算法对比,验证算法的压缩比。
发动机主要参数如表1所示。
3.1 测试
发动机参数采集准确性测试,上位机数据接收界面如图6所示。
通过和预设值对比,验证了发动机参数采集系统的正确完整性。对100组发动机参数的采集,误差均在精度范围内,证明发动机采集系统安全可靠。
3.2 改进的LZW压缩算法对比实验
经典的LZW压缩算法压缩率如表2所示。
改进的LZW压缩算法结果如表3所示。
通过对多组数据压缩比计算,发现压缩比越来越低,刚开始压缩比较高的原因是发动机运行状态参数之间的相关性较低。随着压缩数据的逐渐增多,字典越来越适应于数据,压缩率逐渐提高。
4 结语
发动机采集实验表明系统具有正确性、完整性以及安全性。随着数据量的不断增大,压缩效果越来越好,改进的LZW压缩算法压缩率也越来越好。当压缩数据量达到380k时,压缩效率趋于稳定,压缩比优于普通的LZW算法30%,大量节约了发动机数据采集系统内存,提高了压缩效率与系统性能。
参考文献:
[1]赵楠. 航电数据压缩及传输算法研究[D]. 西安:西安电子科技大学, 2011.
[2]刘委.基于LZW算法的发动机参数实时采集系统的实现[D].镇江:江苏大学,2016.
[3]曾玲, 饶志宏. 几种数据压缩算法的比较[J]. 通信技术, 2002(9):12-15.
[4]郑翠芳. 几种常用无损数据压缩算法研究[J]. 计算机技术与发展, 2011, 21(9):73-76.
[5]杨燕姣. 基于LZW算法的遥测数据实时采集压缩系统的研究[D]. 太原:中北大学, 2014.
[6]王军选, 田小平, 曹红梅. 信息论基础与编码[M]. 北京:人民邮电出版社, 2011.
[7]李小遐, 高杨. 一种基于字典的无损压缩改进算法研究[J]. 自动化与仪器仪表, 2016(2):125-129..
[8]杨长生, 宋广华, 卓越. HLZ:一种采用混合字典的自适应无损编码算法[J]. 浙江大学学报:工学版, 2002, 36(1):40-43.endprint