葉潤(rùn)武+胡潔+劉委+孫旭+高亞紅
摘 要:隨著車聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,海量數(shù)據(jù)傳輸和存儲(chǔ)成為關(guān)鍵問(wèn)題,普通壓縮算法壓縮效率難以滿足需要。根據(jù)LZW算法原理,結(jié)合車聯(lián)網(wǎng)系統(tǒng)中發(fā)動(dòng)機(jī)參數(shù)數(shù)據(jù)傳輸特點(diǎn),對(duì)LZW算法的字典初始化、字典查找方式、字典大小進(jìn)行改進(jìn),并應(yīng)用于車聯(lián)網(wǎng)系統(tǒng)?,F(xiàn)場(chǎng)測(cè)試結(jié)果表明,當(dāng)數(shù)據(jù)達(dá)到一定量后,改進(jìn)的LZW壓縮算法性能趨于穩(wěn)定,壓縮率較普通LZW壓縮算法提高了30%,滿足了發(fā)動(dòng)機(jī)系統(tǒng)數(shù)據(jù)壓縮的應(yīng)用需求。
關(guān)鍵詞:LZW算法;車聯(lián)網(wǎng);數(shù)據(jù)壓縮;字典編碼
DOIDOI:10.11907/rjdk.171195
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2017)007-0152-03
0 引言
隨著電子技術(shù)的不斷進(jìn)步,發(fā)動(dòng)機(jī)監(jiān)測(cè)技術(shù)已從簡(jiǎn)單控制發(fā)展到現(xiàn)代電子控制。為了減少線束、提高信號(hào)利用率、共享和傳輸大批量發(fā)動(dòng)機(jī)運(yùn)行狀態(tài)參數(shù),車聯(lián)網(wǎng)成為汽車電子化發(fā)展的重要環(huán)節(jié)[1]。為了準(zhǔn)確采集與分析發(fā)動(dòng)機(jī)運(yùn)行狀態(tài)參數(shù),需對(duì)發(fā)動(dòng)機(jī)運(yùn)行狀態(tài)參數(shù)實(shí)時(shí)采集,傳輸給上位機(jī)。由于采集頻率較高,龐大的數(shù)據(jù)量不僅給網(wǎng)絡(luò)傳輸帶來(lái)?yè)砣医o數(shù)據(jù)庫(kù)存儲(chǔ)帶來(lái)巨大壓力[2]。對(duì)此,除了優(yōu)化數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)外,數(shù)據(jù)壓縮尤為重要。LZW算法以其獨(dú)特的優(yōu)點(diǎn)廣泛應(yīng)用于數(shù)據(jù)壓縮領(lǐng)域。LZW算法可以有效利用字符出現(xiàn)次數(shù)的冗余度進(jìn)行壓縮,自適應(yīng)產(chǎn)生字典,對(duì)數(shù)據(jù)流中重復(fù)出現(xiàn)的字節(jié)和字串,LZW壓縮技術(shù)具有很高的壓縮比[3]。
1 發(fā)動(dòng)機(jī)參數(shù)采集系統(tǒng)組成
發(fā)動(dòng)機(jī)參數(shù)采集系統(tǒng)主要由兩大部分組成:①無(wú)線數(shù)據(jù)模塊(發(fā)動(dòng)機(jī)參數(shù)采集模塊),由主控制器芯片MC9S08DZ60組成數(shù)據(jù)采集單元。電子控制單元通過(guò)CAN總線采集ECU節(jié)點(diǎn)數(shù)據(jù),CAN模塊接口電路作為通信橋梁。根據(jù)TCP/IP協(xié)議,通過(guò)GPRS與上位機(jī)實(shí)現(xiàn)多機(jī)串口通信;②基于客戶/服務(wù)器(C/S)結(jié)構(gòu),以數(shù)據(jù)庫(kù)技術(shù)為核心,編寫數(shù)據(jù)采集管理系統(tǒng)并通過(guò)多線程技術(shù)開(kāi)發(fā)基于TCP協(xié)議的多客戶機(jī)/服務(wù)器通信程序[4],采用Web 技術(shù),開(kāi)發(fā)一個(gè)基于 B/S 模式的遠(yuǎn)程查詢和分析系統(tǒng)。本文主要研究第①部分,如圖1所示。
系統(tǒng)由無(wú)線數(shù)據(jù)模塊、服務(wù)器軟件和用戶終端3個(gè)模塊組成。本文研究的是無(wú)線數(shù)據(jù)模塊和數(shù)據(jù)壓縮。
1.1 無(wú)線數(shù)據(jù)模塊設(shè)計(jì)
無(wú)線數(shù)據(jù)模塊包含硬件和軟件兩部分。軟件按照分層架構(gòu),分為接口層和應(yīng)用層,接口設(shè)計(jì)成函數(shù)調(diào)用型底層軟件,應(yīng)用層實(shí)現(xiàn)通信與控制功能。對(duì)于不同的應(yīng)用對(duì)象和功能需求,可修改和添加功能以滿足需要。系統(tǒng)組成如圖2所示。
1.2 數(shù)據(jù)處理模塊設(shè)計(jì)
數(shù)據(jù)采集完后需要進(jìn)行一系列處理,使其更好地傳輸,主要包括數(shù)據(jù)分類、轉(zhuǎn)化。之后,為了方便傳輸,減少帶寬,緩解數(shù)據(jù)庫(kù)存儲(chǔ)壓力,對(duì)轉(zhuǎn)化后的數(shù)據(jù)進(jìn)行預(yù)處理和壓縮。上下位機(jī)的通信按照已經(jīng)定義好的通信協(xié)議進(jìn)行。
每幀數(shù)據(jù)中的ID號(hào)代表數(shù)據(jù)類型,首先根據(jù)ID對(duì)數(shù)據(jù)進(jìn)行分類,之后讀取參數(shù)值,流程如圖3所示。
2 數(shù)據(jù)壓縮
2.1 LZW編碼原理
LZW編碼器是一種貪婪分析算法,每次對(duì)字符的編碼都要順序檢查輸入的數(shù)據(jù)流,從字典中找出已經(jīng)出現(xiàn)過(guò)的最長(zhǎng)字符串,并輸出對(duì)應(yīng)的索引值[5]。LZW編碼算法實(shí)現(xiàn)步驟:①將字典中的0-255項(xiàng)初始化,當(dāng)前前綴P為空;②將字符流中第一個(gè)字符存入當(dāng)前字符串P中;③輸入下一個(gè)字符串x,然后判斷P+x是否在字典中。若是,P=P+x,若否,輸出代表當(dāng)前前綴P的碼字,并把字符串P+x添加到字典,再令P=x;④判斷當(dāng)前碼字流中是否還有碼字要編碼。若有,返回步驟②,若沒(méi)有,將當(dāng)前字符串的編碼輸出即可,程序結(jié)束。
2.2 數(shù)據(jù)預(yù)處理模塊
無(wú)線數(shù)據(jù)模塊采集完參數(shù)后,存入芯片的RAM區(qū),在進(jìn)行LZW壓縮前,需要對(duì)采集的參數(shù)作預(yù)處理,數(shù)據(jù)結(jié)構(gòu)如圖4所示。
無(wú)線數(shù)據(jù)模塊主要采集心跳信息、發(fā)動(dòng)機(jī)參數(shù)信息和GPS位置信息3種數(shù)據(jù),如圖5所示。
在通信協(xié)議中,定義了不同的端口號(hào)和標(biāo)識(shí)符對(duì)其進(jìn)行接收。這3種數(shù)據(jù)的端口號(hào)和標(biāo)識(shí)符是對(duì)應(yīng)的,處理步驟:①去掉端口號(hào)和標(biāo)識(shí)符,用m,n和h代替;②因?yàn)橄到y(tǒng)采集的發(fā)動(dòng)機(jī)參數(shù)有96種之多,為了方便后續(xù)字典查找,本系統(tǒng)對(duì)96種發(fā)動(dòng)機(jī)參數(shù)設(shè)置索引,參數(shù)索引值加入LZW編碼的前綴直接存儲(chǔ)在字典中[6]。
2.3 字典初始化改進(jìn)
在LZW算法中,首先按碼表初始化256個(gè)字符,這就是字典的初始項(xiàng),實(shí)際是用典型16位指針表示。數(shù)據(jù)壓縮算法的主要改進(jìn)思想是利用變字長(zhǎng)的碼字進(jìn)行編碼,通過(guò)編碼過(guò)程設(shè)置步驟號(hào)來(lái)改進(jìn)編碼的存儲(chǔ)字節(jié)數(shù)[5]。假設(shè)現(xiàn)在的位號(hào)為1,要輸出其編碼的位數(shù),其位數(shù)為整數(shù),壓縮過(guò)程和解碼過(guò)程一一對(duì)應(yīng),則可以通過(guò)步驟號(hào)來(lái)準(zhǔn)確判斷編碼位數(shù),從而得到正確的解碼。發(fā)動(dòng)機(jī)參數(shù)的內(nèi)容多為發(fā)動(dòng)機(jī)運(yùn)行狀態(tài)參數(shù)信息、故障代碼等,以十六進(jìn)制進(jìn)行存儲(chǔ)發(fā)送,發(fā)動(dòng)機(jī)參數(shù)為0,1,3,4,5,6,7,8,9,A,B,C,D,E,F(xiàn)這16種字符格式。首先初始化前16項(xiàng),初始化編碼位數(shù)采用8位,大大減少了編碼位數(shù),很大程度上提高了發(fā)動(dòng)機(jī)參數(shù)的壓縮效率和質(zhì)量[7]。
字典初始項(xiàng)只有19個(gè),除了十六進(jìn)制的0~F,還要將替代后的標(biāo)識(shí)符和端口號(hào)一起寫入字典,相對(duì)應(yīng)的索引值就是16,17,18,這樣大大減少了字典的初始項(xiàng)。
2.4 字典查找方式改進(jìn)
LZW算法的字典查找方式是順序查找,當(dāng)字典很大時(shí),查找速度大大降低。本系統(tǒng)中發(fā)動(dòng)機(jī)參數(shù)有96種之多,順序查找時(shí)間過(guò)長(zhǎng)。因此,對(duì)字典的查找方式進(jìn)行改進(jìn),改進(jìn)方式如下:在數(shù)據(jù)預(yù)處理模塊,對(duì)發(fā)動(dòng)機(jī)的96種參數(shù)加索引值,在LZW壓縮過(guò)程中,索引值作為L(zhǎng)ZW編碼前綴的一部分。這里分別引入二叉樹(shù)查找和哈希查找兩種方式,通過(guò)對(duì)比,得出當(dāng)數(shù)據(jù)量逐漸增大時(shí),哈希查找的速度明顯高于二叉樹(shù)查找,所以在字典的查找方式中,結(jié)合哈希查找,大大提高了數(shù)據(jù)的壓縮速度[8]。endprint
2.5 字典大小改進(jìn)
數(shù)據(jù)存儲(chǔ)在ROM區(qū),MC9S08DZ60芯片的ROM區(qū)大小是4K。發(fā)動(dòng)機(jī)運(yùn)行狀態(tài)參數(shù)具有多樣化和較高的采集頻率,隨著壓縮的不斷進(jìn)行,字典一定會(huì)溢出。為了防止字典溢出,在字典初始化時(shí)設(shè)置溢出標(biāo)識(shí)符T,在壓縮過(guò)程中,時(shí)刻檢測(cè)T值。當(dāng)T=1時(shí),代表字典溢出,這時(shí),自動(dòng)清空字典,重新開(kāi)始字典初始化。
3 系統(tǒng)實(shí)驗(yàn)
本文主要對(duì)無(wú)線數(shù)據(jù)模塊進(jìn)行測(cè)試。測(cè)試包括兩部分:①對(duì)無(wú)線數(shù)據(jù)模塊數(shù)據(jù)接收進(jìn)行測(cè)試,驗(yàn)證發(fā)動(dòng)機(jī)參數(shù)采集的正確性,以此作為本系統(tǒng)是否有效及可靠的依據(jù),為后面的數(shù)據(jù)壓縮提供數(shù)據(jù);②對(duì)數(shù)據(jù)壓縮模塊進(jìn)行測(cè)試,通過(guò)對(duì)改進(jìn)的LZW壓縮算法和普通LZW壓縮算法對(duì)比,驗(yàn)證算法的壓縮比。
發(fā)動(dòng)機(jī)主要參數(shù)如表1所示。
3.1 測(cè)試
發(fā)動(dòng)機(jī)參數(shù)采集準(zhǔn)確性測(cè)試,上位機(jī)數(shù)據(jù)接收界面如圖6所示。
通過(guò)和預(yù)設(shè)值對(duì)比,驗(yàn)證了發(fā)動(dòng)機(jī)參數(shù)采集系統(tǒng)的正確完整性。對(duì)100組發(fā)動(dòng)機(jī)參數(shù)的采集,誤差均在精度范圍內(nèi),證明發(fā)動(dòng)機(jī)采集系統(tǒng)安全可靠。
3.2 改進(jìn)的LZW壓縮算法對(duì)比實(shí)驗(yàn)
經(jīng)典的LZW壓縮算法壓縮率如表2所示。
改進(jìn)的LZW壓縮算法結(jié)果如表3所示。
通過(guò)對(duì)多組數(shù)據(jù)壓縮比計(jì)算,發(fā)現(xiàn)壓縮比越來(lái)越低,剛開(kāi)始?jí)嚎s比較高的原因是發(fā)動(dòng)機(jī)運(yùn)行狀態(tài)參數(shù)之間的相關(guān)性較低。隨著壓縮數(shù)據(jù)的逐漸增多,字典越來(lái)越適應(yīng)于數(shù)據(jù),壓縮率逐漸提高。
4 結(jié)語(yǔ)
發(fā)動(dòng)機(jī)采集實(shí)驗(yàn)表明系統(tǒng)具有正確性、完整性以及安全性。隨著數(shù)據(jù)量的不斷增大,壓縮效果越來(lái)越好,改進(jìn)的LZW壓縮算法壓縮率也越來(lái)越好。當(dāng)壓縮數(shù)據(jù)量達(dá)到380k時(shí),壓縮效率趨于穩(wěn)定,壓縮比優(yōu)于普通的LZW算法30%,大量節(jié)約了發(fā)動(dòng)機(jī)數(shù)據(jù)采集系統(tǒng)內(nèi)存,提高了壓縮效率與系統(tǒng)性能。
參考文獻(xiàn):
[1]趙楠. 航電數(shù)據(jù)壓縮及傳輸算法研究[D]. 西安:西安電子科技大學(xué), 2011.
[2]劉委.基于LZW算法的發(fā)動(dòng)機(jī)參數(shù)實(shí)時(shí)采集系統(tǒng)的實(shí)現(xiàn)[D].鎮(zhèn)江:江蘇大學(xué),2016.
[3]曾玲, 饒志宏. 幾種數(shù)據(jù)壓縮算法的比較[J]. 通信技術(shù), 2002(9):12-15.
[4]鄭翠芳. 幾種常用無(wú)損數(shù)據(jù)壓縮算法研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2011, 21(9):73-76.
[5]楊燕姣. 基于LZW算法的遙測(cè)數(shù)據(jù)實(shí)時(shí)采集壓縮系統(tǒng)的研究[D]. 太原:中北大學(xué), 2014.
[6]王軍選, 田小平, 曹紅梅. 信息論基礎(chǔ)與編碼[M]. 北京:人民郵電出版社, 2011.
[7]李小遐, 高楊. 一種基于字典的無(wú)損壓縮改進(jìn)算法研究[J]. 自動(dòng)化與儀器儀表, 2016(2):125-129..
[8]楊長(zhǎng)生, 宋廣華, 卓越. HLZ:一種采用混合字典的自適應(yīng)無(wú)損編碼算法[J]. 浙江大學(xué)學(xué)報(bào):工學(xué)版, 2002, 36(1):40-43.endprint