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