裴東興,任武林
(中北大學(xué)儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,山西太原030051)
存儲(chǔ)測(cè)試系統(tǒng)是為完成特殊環(huán)境下測(cè)試而設(shè)計(jì)的電子物理系統(tǒng),它可在高溫、高壓、強(qiáng)沖擊振動(dòng)、高過載等惡劣環(huán)境下自動(dòng)完成被測(cè)信息的實(shí)時(shí)采集與存儲(chǔ)記憶[1]。在某些星載、彈載測(cè)試系統(tǒng)中,測(cè)試環(huán)境惡劣、測(cè)試時(shí)間長(zhǎng),所需記錄的數(shù)據(jù)量較大。但測(cè)試裝置受到體積的限制,要在現(xiàn)有存儲(chǔ)容量基礎(chǔ)上獲取更多的信息,就需要進(jìn)行相關(guān)的數(shù)據(jù)處理。數(shù)據(jù)壓縮是減少數(shù)據(jù)量的有效手段之一。數(shù)據(jù)壓縮通常分為有損壓縮和無(wú)損壓縮兩大類。為準(zhǔn)確恢復(fù)出原始數(shù)據(jù)并結(jié)合測(cè)試數(shù)據(jù)的特點(diǎn),本文選用游程(RLE)和LZW兩種無(wú)損壓縮算法對(duì)數(shù)據(jù)進(jìn)行組合壓縮。
存儲(chǔ)測(cè)試系統(tǒng)作為一種信息采集系統(tǒng),目的是向使用者傳遞信息。由于A/D轉(zhuǎn)換的位數(shù)是有限的,所以信息采集系統(tǒng)只能產(chǎn)生有限的數(shù)據(jù),可以把數(shù)據(jù)采集系統(tǒng)看作是一種離散信源。根據(jù)香農(nóng)信息論[2],某離散消息xi所攜帶的信息量:
式中,p(xi)為該消息的發(fā)生概率。對(duì)于數(shù)據(jù)文件來(lái)說(shuō),所包含的每個(gè)數(shù)字就是一個(gè)攜帶信息的消息,可以計(jì)算每個(gè)數(shù)據(jù)文件包含的信息量。如果N個(gè)符號(hào)的離散消息源的各個(gè)符號(hào)間是統(tǒng)計(jì)獨(dú)立的,則這個(gè)消息源的平均信息量為:
平均信息量也稱為信息熵,是在采用無(wú)損壓縮時(shí)所能達(dá)到的壓縮的最小極限。
實(shí)際上,消息序列的符號(hào)間往往還存在著一定的統(tǒng)計(jì)相關(guān)性[3],這將使得消息序列攜帶的信息量減少。例如,對(duì)一個(gè)標(biāo)準(zhǔn)余弦函數(shù)進(jìn)行數(shù)據(jù)采集,不論采樣的數(shù)據(jù)量有多大,只需要知道這個(gè)函數(shù)的幅度、頻率和起始相位就可以精確地表示這一數(shù)據(jù)。這在具體數(shù)據(jù)中就表現(xiàn)為重復(fù)出現(xiàn)的數(shù)據(jù)串,消除這些重復(fù)串,降低數(shù)據(jù)中的統(tǒng)計(jì)相關(guān)性,也是數(shù)據(jù)壓縮算法一般遵循的準(zhǔn)則。實(shí)際的壓縮器在設(shè)計(jì)上往往不是單獨(dú)采用統(tǒng)計(jì)式或字典式壓縮法,一般將幾種算法結(jié)合起來(lái),以達(dá)到高效率的壓縮比。
在對(duì)多組實(shí)測(cè)的數(shù)據(jù)進(jìn)行分析后,可以看出測(cè)試數(shù)據(jù)有一些典型的特征。圖1是一典型的石油井下壓力測(cè)試數(shù)據(jù),由圖可以看出,測(cè)試數(shù)據(jù)一般都具有以下特征:
(1)測(cè)試數(shù)據(jù)幅值比較連續(xù),相鄰數(shù)據(jù)差值較小,具有很強(qiáng)的統(tǒng)計(jì)相關(guān)性。
(2)大部分?jǐn)?shù)據(jù)波動(dòng)不大,只有少部分?jǐn)?shù)據(jù)變化輻度較大。
圖1 石油井下壓力測(cè)試數(shù)據(jù)
針對(duì)上述的測(cè)試數(shù)據(jù)(12 bit的AD轉(zhuǎn)換器)大部分波動(dòng)很小(高4位數(shù)據(jù)基本保持不變),這樣的大量重復(fù)數(shù)據(jù)非常適合游程壓縮。對(duì)于低8 bit數(shù)據(jù),雖然相鄰時(shí)刻的值不可能完全相同,但其值會(huì)在測(cè)試過程中多次出現(xiàn)。無(wú)損數(shù)據(jù)壓縮中,LZW是基于字典模型的一種壓縮算法,具有自適應(yīng)的特點(diǎn),非常適合這種數(shù)據(jù)的壓縮。表1是兩種算法組合與單獨(dú)使用LZW算法的對(duì)比。從表1中可以看出,采用這兩種算法結(jié)合的方式對(duì)數(shù)據(jù)進(jìn)行組合壓縮可以獲得較好的壓縮效果。
游程編碼(RLE)是一種相對(duì)比較簡(jiǎn)單的數(shù)據(jù)壓縮技術(shù),容易以硬件實(shí)現(xiàn)壓縮。實(shí)現(xiàn)游程編碼分為定長(zhǎng)游程編碼和變長(zhǎng)游程編碼兩種。本文采用8 bit定長(zhǎng)游程編碼,編碼流程如下:
(1)初始化計(jì)數(shù)器cnt=1,輸入首字節(jié)P;
(2)判斷文件是否結(jié)束。若結(jié)束,輸出P和cnt,壓縮完成;若沒有結(jié)束,輸入次字節(jié)C,如果P=C且cnt<255,cnt=cnt+1,則重復(fù)步驟(2);如果P≠C,則輸出P和cnt,重復(fù)步驟(1)。直到壓縮完成。
LZW算法是一種面向通用數(shù)據(jù)的即時(shí)、高效、簡(jiǎn)單,易于實(shí)現(xiàn)的一種無(wú)損數(shù)據(jù)壓縮算法,不依賴于任何數(shù)據(jù)格式,具有很大的應(yīng)用范圍,且是基于字典模型的算法實(shí)現(xiàn)的關(guān)鍵在于字典的建立和查找。LZW算法的粗略描述如下[4]:
由算法描述可見,LZW算法邏輯過程簡(jiǎn)單,能夠得到較快的壓縮速度,易于硬件壓縮。
表1 壓縮效果對(duì)比
Cyclone II是Altera 公司推出的新一代低成本系列FPGA器件[5],本設(shè)計(jì)選用Cyclone II系列的EP2C5T144I8芯片來(lái)實(shí)現(xiàn)數(shù)據(jù)的組合壓縮。EP2C5T144I8芯片具有4 608個(gè)LE(邏輯單元)、26個(gè)M4 K的RAM、13個(gè)嵌入式乘法器、2個(gè)PLL(鎖相環(huán))和158個(gè)用戶I/O引腳。系統(tǒng)的整體框圖如圖2所示。傳感器采集到信號(hào)后,經(jīng)過模擬適配電路進(jìn)行濾波、放大后進(jìn)入AD轉(zhuǎn)換器,由AD轉(zhuǎn)換器轉(zhuǎn)換輸出12 bit的數(shù)據(jù)流輸入到FPGA進(jìn)行壓縮。高4 bit數(shù)據(jù)進(jìn)行游程壓縮,低8 bit數(shù)據(jù)進(jìn)行LZW壓縮,最后將壓縮后的輸出數(shù)據(jù)流存儲(chǔ)到外部存儲(chǔ)器中。采集完成后,通過USB專用接口電路將壓縮后的數(shù)據(jù)從外部存儲(chǔ)器中讀入計(jì)算機(jī)保存下來(lái),然后用專用軟件對(duì)壓縮后的數(shù)據(jù)進(jìn)行解壓,還原出原始采集到的數(shù)據(jù)以便進(jìn)一步進(jìn)行分析處理。
系統(tǒng)的設(shè)計(jì)核心是壓縮算法實(shí)現(xiàn)。由于游程壓縮實(shí)現(xiàn)簡(jiǎn)單,下面重點(diǎn)討論LZW算法的實(shí)現(xiàn)。用FPGA實(shí)現(xiàn)LZW算法要解決以下幾個(gè)問題[6]:
圖2 系統(tǒng)整體框圖
(1)壓縮過程中字典的緩存。因?yàn)樗袛?shù)據(jù)處理和傳輸工作都是由FPGA完成,字典的緩存必須使用FPGA內(nèi)部有限RAM資源。(2)字典的建立與更新。字典的建立使用FPGA片內(nèi)資源來(lái)完成,大容量字典雖然會(huì)提高壓縮比,但必須考慮到FPGA內(nèi)部的資源量。因此選用9 bit的定長(zhǎng)編碼方式對(duì)數(shù)據(jù)進(jìn)行處理。(3)壓縮后輸出數(shù)據(jù)流的傳輸和存儲(chǔ)。由于壓縮后是9 bit的數(shù)據(jù)流,不利于數(shù)據(jù)的存儲(chǔ)。因此需將9 bit的數(shù)據(jù)流轉(zhuǎn)換成8 bit的數(shù)據(jù)流進(jìn)行傳輸和存儲(chǔ)。FPGA設(shè)計(jì)過程中模塊劃分非常重要,好的模塊劃分能夠大大減少邏輯所消耗的面積和優(yōu)化功能的時(shí)序關(guān)鍵路徑。LZW算法實(shí)現(xiàn)劃分了8個(gè)模塊,各個(gè)模塊相互之間的連接如圖3所示。整個(gè)壓縮過程都是在狀態(tài)機(jī)控制模塊(U5)下進(jìn)行的。
圖4 仿真與軟件壓縮對(duì)比
本文對(duì)所實(shí)現(xiàn)壓縮算法進(jìn)行了綜合與仿真驗(yàn)證,使用開發(fā)工具為Altera公司的QuartusII 7.2,使用Modelsim SE 6.1f仿真工具,用圖4所示的字符串作為輸入碼流進(jìn)行測(cè)試。圖中datain表示輸入數(shù)據(jù),dataout表示壓縮輸出碼流,以16進(jìn)制表示,用于驗(yàn)證壓縮的正確性。仿真結(jié)果與通過計(jì)算機(jī)軟件壓縮的結(jié)果完全一致。如圖4所示,本設(shè)計(jì)完全可行。
經(jīng)過綜合,算法的實(shí)現(xiàn)使用了20個(gè)引腳,占用了13%的邏輯單元,使用了33%的內(nèi)部RAM存儲(chǔ)容量,綜合所得最高時(shí)鐘工作頻率為80 MHz,實(shí)時(shí)壓縮速度達(dá)到8 MB。表2是一組實(shí)測(cè)數(shù)據(jù)的壓縮效果。
表2 實(shí)測(cè)數(shù)據(jù)壓縮效果
本文介紹的在以FPGA為核心的存儲(chǔ)測(cè)試系統(tǒng),實(shí)現(xiàn)了數(shù)據(jù)的無(wú)損組合壓縮。通過相關(guān)仿真和綜合驗(yàn)證,壓縮效果顯著,大大減少了對(duì)存儲(chǔ)空間的要求,實(shí)現(xiàn)了壓縮性能與壓縮速度的統(tǒng)一。算法主體結(jié)構(gòu)用VHDL語(yǔ)言編寫,具有可移植性,可廣泛地應(yīng)用于各種基于FPGA的數(shù)據(jù)壓縮系統(tǒng)中,有很大的應(yīng)用價(jià)值。
[1]張文棟.存儲(chǔ)測(cè)試系統(tǒng)的設(shè)計(jì)理論及其應(yīng)用[M].北京:高等教育出版社,2002.
[2]吳家安.數(shù)據(jù)壓縮技術(shù)及應(yīng)用[M].北京:科學(xué)出版社,2009.
[3]朱琳,羅家融,田一海.核聚變實(shí)驗(yàn)數(shù)據(jù)采集系統(tǒng)中數(shù)據(jù)壓縮算法的研究[J].計(jì)算機(jī)工程,2003,2(29):11-12.
[4]MARK N.LZW data compression[EB/OL].1989.http:marknelson.us/lzw-data-compression/.1989-10-01.
[5]Altera Corporation.Cyclone II device handbook,volume 1.2007.
[6]陳晉敏,黃春明,周軍.激光雷達(dá)數(shù)據(jù)無(wú)損壓縮的FPGA實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2007,15(1):100-102.