您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 基于FPGA的船舶气象仪数据压缩与存储
基于FPGA的船舶气象仪数据压缩与存储孙佳王东明(山东省海洋环境监测技术重点实验室,山东省科学院海洋仪器仪表研究所,山东青岛266001)摘要:介绍了高性能Virtex-4FX20FPGA芯片在船舶气象仪数据存储中的应用,根据船舶气象仪的数据特点,以Virtex-4FX20FPGA为核心控制器,结合LZW数据压缩算法,编写了数据压缩与存储的程序。对船舶气象仪的数据压缩与存储的仿真结果表明,该芯片可以对船舶气象仪的数据进行高速压缩与可靠存储。关键词:FPGA;LZW;数据压缩与存储CompressionandStorageofShipMeteorologicalInstrument’sDataBasedonFPGASunJiaWangDongming(ShandongProvincialKeyLaboratoryofOceanEnvironmentMonitoringTechnology,ShandongAcademyofSciencesInstituteofOceanographicInstrumentation,Qingdao266001,China)sAbstract:ThispaperintroducestheapplicationsofVirtex-4FX20FPGAinthestorageofShipMeteorologicalInstrument’sdata.AccordingtothecharacteristicsofShipMeteorologicalInstrument’sdata,usesVirtex-4FX20FPGAasthemaincontroller,combineswithLZWdatacompressionalgorithm,usesVHDLhardwaredescriptionlanguage,realizesthecompressionandindependentstorageofShipMeteorologicalInstrument’sdata.Accordingtotheresultofemulator,thechipcanrealizehighspeedcompressionandindependentstorage.KeyWords:FPGA;LZW;DataCompressionandStorage1引言船舶气象仪需要实时的、连续的测量风速、风向、温度、相对湿度和气压等气象参数,同时对测量到的数据进行实时的、连续的计算与存储,并向外发送传输,是舰船航海导航中必不可少的设备[1]。因此,船舶气象仪是一个多传感器的综合系统,不仅需要测量各种气象参数,通常还要融合计程仪等外部设备的信息,并进行大量的实时数据计算,数据采集量比较大,因此数据存储占用了大量的空间,对船舶气象仪的数据存储空间提出了较高的要求。本文针对船舶气象仪的数据格式,结合高性能FPGA芯片,对船舶气象仪的数据进行压缩存储。2船舶气象仪的数据格式船舶气象仪的数据传输协议:符合RS-422串行通信标准;有效数据位8位,起始位1位,奇偶校验位1位,停止位1位;数据更新时间为1s;数据传输波特率为4800bps。3压缩算法的选择压缩的理论基础是信息论,从信息的角度来看,压缩就是去除掉信息中的冗余,即去除掉确定的或可推知的信息,保留不确定的信息,也就是用一种更接近信息本质的描述来代替原有的冗余的描述,这个本质的东西就是信息量[2]。LZW压缩算法就是通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩。LZW压缩算法的基本原理是提取原始文本文件数据中的不同字符,基于这些字符创建一个字典,然后用字典中的字符的索引来替代原始文本文件数据中的相应字符,减少原始数据大小。LZW压缩算法能有效利用字符出现频率冗余度进行压缩,而且字典自适应生成。因此,设计中选择LZW压缩算作为船舶气象仪数据压缩程序设计的理论基础。4数据压缩算法的程序设计船舶气象仪数据压缩程序采用VHDL硬件描述语言编写,具有设计灵活、易于修改、独立于器件的设计等优点,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计的复杂性[3]。船舶气象仪数据压缩的程序设计流程图如图1所示。基金项目:国家高技术研究与发展计划(863)项目(2012AA091801)作者简介:孙佳(1983-),男,助理工程师,硕士,研究方向为海洋仪器仪表及自动控制;E-mail:sunjia0502@163.com初始化读字符新串是否在字典中?加入字典输出前缀码前缀=char字典是否已满?编码完成?结束前缀=新串地址否否否是是是图1程序设计流程图在程序设计中,选用256Bytes字典,将输入设为船舶气象仪数据位的1/2,即4位,输出为4位,“output”为是否有数据输出标志端口,若为“0”说明没有数据输出,若为“1”则有数据输出,这主要用于控制下一级的串并转换。为了加快查找速度,设计中将字典的数据结构设计为链表,分为16个链表,凡是后缀相同的字串都加到同一链表中。字典总共有256项内容,即ram(0)~ram(255),每一个ram(n)由ram1(n)和ram2(n)组成,ram1(n)用于存放字串前缀old的内容,ram2(n)用于存放链表下一元素的地址(即索引)。字典前16项内容为单字符,所以它们的前缀和索引是一样的,就没有必要存入ram1(n),它们的ram1(n)主要用于存放本链表的链尾地址,以方便判断查找是否到了链表尾端。查找过程就是先通过new1找到字串属于16个链表中的哪一个链表,然后使用指针f沿着链表一个一个查找下去,看old中的内容是否和ram1(n)相匹配,一直到链尾。查找后的操作部分也很重要,它决定了是输出最大匹配字符的索引还是将字串加入字典,部分程序代码如下:casesearchiswhen'1'=old=f;output=‘0’;when'0'=ram2(f)=i;ram1(i)=old;output='1';dout=conv_std_logic_vector(old,4);ram1(new1)=i;i=i+1;old=new1;whenothers=null;endcase;在上述程序中,若找到,即search=1,则把找到的索引号赋值给old;如果没找到,即search=0,则把字串加入到字典,即把新字串连接到链尾,当前索引i前移一个位置,并输出最长匹配串索引。整个程序是在一个进程中完成,每当敏感信号变化一次,进程内的语句就顺序执行一遍,这样周而复始,实现数据的流水压缩。5数据压缩仿真分析设计中选用Xilinx公司的Virtex-4FX20FPGA芯片为主控制器,综合软件为Xilinx公司的ISE9.1[4],仿真结果如图2所示。图2仿真结果经过仔细比对仿真结果发现,输出数据和LZW压缩算法应有的结果相吻合,从波形中可以计算压缩算法对这些仿真数据的压缩比。输入数据为60个,每个数据位长为4;输出数据为24个,每个数据位长为4;因此得出压缩比为(60×4)/(24×4)=2.5。LZW压缩算法是基于字典的压缩,字典是在压缩过程中逐步建立的,因此字典有一个适应过程,刚开始时的压缩效果并不明显,随着字典的增大,字典中字符串的增多,字符串匹配会变得容易,那样就会产生明显的压缩效果。在此处,由于仿真所用数据只有60个输入,即30字节的数据,因此压缩比只有2.5。如果输入数据足够多的话,压缩比可以达到比较理想的水平。6数据存储由于压缩之后的船舶气象仪数据是4位,写入SD卡时采用SPI模式,即串行传输模式,需要进行模式转换。在本文中采用FPGA中时钟的4分频作为转换器,结合压缩模块中的是否有数据输出标志“output”控制转换的进行。从转换器出来的数据是串行传输,可以直接写入SD卡。数据经过压缩后存储在SD卡中,到要用时需要解压,解压就是压缩的逆过程,其流程和压缩是一样的,就是在解压过程中逐步生成256个元素的字典,其数据结构和压缩过程完全一样,主要的区别就是压缩过程是在输入流中的数据形成新串,并加入字典,而解压过程是解压后的数据即输出数据形成新串。其实这在本质上也是没有区别的,因为压缩数据的输入流也就是船舶气象仪采集的原始数据也就是解压后得到的数据。因此,形成的字典和数据结构完全一样,故在此不再重复。7结论对船舶气象仪的数据压缩与存储的仿真结果表明,通过VHDL硬件描述语言,采用LZW压缩算法可以快速实现船舶气象仪的数据压缩,并对压缩后的数据进行可靠存储,提高了船舶气象仪的数据存储空间的利用率,这对于船舶气象仪的数据存取的便捷性具有重要的现实意义。参考文献[1]刘涛,漆随平,王洋等.船舶气象仪电磁兼容性试验及分析[J].机械管理开发,2010:37-38[2]吴乐南编著.数据压缩第二版[M].电子工业出版社,2005:1-30[3]张昌凡,龙永红,彭涛.可编程逻辑器件及VHDL设计技术[M].华南理工大学出版社,2002:77-86[4]王诚,薛小刚,钟信潮编著.FPGA/CPLD设计工具:XilinxISE使用详解[M].人民邮电出版社,2005:150-155
本文标题:基于FPGA的船舶气象仪数据压缩与存储
链接地址:https://www.777doc.com/doc-2569718 .html