基于FPGA的實(shí)時無損數(shù)據(jù)壓縮系統(tǒng)設(shè)計(jì)
摘要:針對某些特殊的測試實(shí)驗(yàn),既要求測試系統(tǒng)微體積、低功耗,還要求記錄大量數(shù)據(jù)的問題,提出基于FPGA的數(shù)據(jù)壓縮解決方案。介紹了LZW壓縮算法的基本理論及其用FPGA硬件實(shí)現(xiàn)的方法。大量的實(shí)驗(yàn)表明,系統(tǒng)工作穩(wěn)定,壓縮速度快(8 MB/s以上),對實(shí)測數(shù)據(jù)的壓縮效果好(25%左右)、工作時電流小(37 mA),實(shí)現(xiàn)了速度、性能、功耗三者的統(tǒng)一。
關(guān)鍵詞:FPGA;數(shù)據(jù)壓縮;LZW算法
引言
在工業(yè)生產(chǎn)和科研中,通常要對信號進(jìn)行長時間高速采樣,會產(chǎn)生大量采樣數(shù)據(jù)。在一些特殊環(huán)境下,受體積和功耗的限制,不能添加過多存儲器,需要引入數(shù)據(jù)壓縮技術(shù)來解決。軟件壓縮算法的運(yùn)算量較大,需要很高的CPU運(yùn)算速度和數(shù)據(jù)緩存空間,所以軟件壓縮一般應(yīng)用
在對時間要求不高的非實(shí)時壓縮場合。而對運(yùn)行速度有特殊要求的情況下,對數(shù)據(jù)的實(shí)時壓縮一般都要用硬件實(shí)現(xiàn)。有損壓縮之后數(shù)據(jù)進(jìn)行重構(gòu),與原來的數(shù)據(jù)有所不同。多數(shù)數(shù)據(jù)采集系統(tǒng)因被測對象的不確定性,需要采用無損數(shù)據(jù)壓縮。由于LZW無損壓縮算法具有自適應(yīng)特性,在對信號統(tǒng)計(jì)特性不明確的情況下仍然有較好的壓縮效果。結(jié)合FPGA的高集成度、低功耗、靈活性及并行運(yùn)算的特性,該設(shè)計(jì)用FPGA硬件實(shí)現(xiàn)LZW算法,以提高系統(tǒng)的實(shí)時壓縮能力。
1 LZW算法簡介
LZW算法是一種基于字典的壓縮算法,由Lemple、Ziv、Welch三人共同創(chuàng)造。該算法在數(shù)據(jù)的壓縮過程中會根據(jù)輸入的數(shù)據(jù)動態(tài)地建立一個字典,后續(xù)輸入的數(shù)據(jù)都會在這個字典中匹配查找,根據(jù)查找是否成功決定壓縮編碼的輸出。該算法的巧妙之處在于,壓縮過程中動態(tài)建立的字典不需要與壓縮數(shù)據(jù)流一道進(jìn)行傳輸和存儲。在對數(shù)據(jù)進(jìn)行解壓時,也能夠通過壓縮數(shù)據(jù)流重新建立一個字典,來完成解壓縮。算法粗略的描述如下:
算法首先進(jìn)行字典的初始化。然后輸入第一個字符數(shù)據(jù)賦給變量String(S)。數(shù)據(jù)逐個輸入壓縮器中,并賦給變量Character(C)。s和C生成一個索引,與字典中的詞條數(shù)據(jù)進(jìn)行匹配:如果匹配成功,將S和C的編碼值賦給S,繼續(xù)進(jìn)行下一輪的匹配;如果匹配失敗,則將S輸出,將S和C的編碼值存入字典,并且將C的值賦給S,這一過程一直進(jìn)行直到結(jié)束。最后輸出S,輸出結(jié)束標(biāo)志。
由算法描述可見,LZW算法過程并不是很復(fù)雜,能夠得到較快的壓縮速度。并且其在對數(shù)據(jù)特征并不了解情況下,也能有較好的壓縮效果。同時,其對應(yīng)的解壓縮算法也不復(fù)雜,解壓速度也優(yōu)于其他一些算法。
評論