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