《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 基于DSP的實時數(shù)據(jù)無損壓縮實現(xiàn)

基于DSP的實時數(shù)據(jù)無損壓縮實現(xiàn)

2009-03-30
作者:韓志軍,劉文怡,王 浩,魯

??? 摘 要: 為了提高數(shù)據(jù)的傳輸效率,同時保證壓縮后信息的完整性,本文基于DSP對實時數(shù)據(jù)無損壓縮算法實現(xiàn)的具體方法和關(guān)鍵技術(shù),從硬件和軟件兩個方面進(jìn)行了相關(guān)分析,并對無損壓縮的相關(guān)算法進(jìn)行了比較。采用算術(shù)編碼(ARC)進(jìn)行了相應(yīng)的壓縮。最后通過實驗,對壓縮時間和壓縮去除率進(jìn)行了分析。結(jié)論證實本方案切實可行,各項指標(biāo)滿足系統(tǒng)要求。
??? 關(guān)鍵詞: DSP;實時;無損壓縮;ARC

?

??? 數(shù)據(jù)壓縮技術(shù)能減少傳輸所用的時間和存儲空間,在有限的信道容量內(nèi)傳輸更多的有用信息,有助于降低功率和帶寬要求,改善通信效率。反之,如果不進(jìn)行數(shù)據(jù)壓縮,則無論傳輸或存儲都很難實用化[1]。
1 硬件及實現(xiàn)原理
??? 結(jié)合本設(shè)計的實際情況,由于壓縮算法比較復(fù)雜,計算量大,在壓縮數(shù)據(jù)時必須采用浮點型運算。另一方面,由于處理精度要求高,所以需要選擇浮點型DSP?;谏鲜隹紤],選用TI公司的一款性價比非常高的浮點芯片TMS320C6713。其主頻225MHz,每周期執(zhí)行8條32bit指令,最高定點運算能力為1800MIPS,浮點運算能力為1350MFLOPS,32位指令集,而且內(nèi)部自帶256KB的RAM,4KB程序緩沖器和4KB的數(shù)據(jù)緩沖器,可以通過外部存儲器接口EMIF(External Memory Inter Faces)擴(kuò)展SDRAM和Flash[2]。在本設(shè)計中,對原始數(shù)據(jù)按照每2 048B為一組進(jìn)行壓縮。壓縮的最小單位是2 048B,且壓縮率不固定,對于某組特定數(shù)據(jù)壓縮后可能比原來的數(shù)據(jù)還要大。壓縮前后的數(shù)據(jù)都需要放到DSP的RAM中進(jìn)行處理,其256KB的RAM不能滿足本設(shè)計存儲要求,需要通過EMIF擴(kuò)展存儲空間。SDRAM選用Micron公司的MT48LC2M32B2。其數(shù)據(jù)總線為32位,存儲空間為64Mbit。工作電壓為3.3V,內(nèi)部流水線結(jié)構(gòu)保證了芯片的高速運行。SDRAM可以與EMIF無縫接口。EMIF的CE0連入片選引腳CS,將SDRAM映射到CE0地址空間(0x80000000-0x80800000)。Flash是系統(tǒng)在斷電后用來保存程序和初始化數(shù)據(jù)的存儲器,系統(tǒng)上電時,由引導(dǎo)程序?qū)SP的應(yīng)用程序從該存儲器引導(dǎo)到系統(tǒng)的高速存儲器RAM中。本設(shè)計用AMD公司生產(chǎn)的1M×8bit/512K×16bit AM29LV800-70 Flash存儲器,其數(shù)據(jù)寬度為8位、16位可選,采用3.3V供電,訪問時間僅70ns。EMIF的CE1連入片選引腳CE,將Flash映射到CE1地址空間地址范圍為0x90000000~0x90100000,尋址空間為1MB[3]。
?? ?通常在高速數(shù)據(jù)采集系統(tǒng)中,數(shù)據(jù)處理速度及數(shù)據(jù)傳輸速度與前端A/D轉(zhuǎn)換器的采集速度不一致。為了協(xié)調(diào)它們之間工作,可以加入數(shù)據(jù)存儲器或者數(shù)據(jù)緩存器(FIFO)進(jìn)行數(shù)據(jù)緩沖,使得前端數(shù)據(jù)采集和后級數(shù)據(jù)處理能夠協(xié)調(diào)工作。在本設(shè)計中,前端的采樣速度為27Kb/s;且數(shù)據(jù)流是連續(xù)的。DSP的主頻為225MHz,經(jīng)過鎖向環(huán)分頻后其讀取數(shù)據(jù)的速度為38Mb/s左右。DSP若一直等待讀數(shù)據(jù),會大大降低其數(shù)據(jù)的處理能力。DSP讀入數(shù)據(jù)后,馬上對數(shù)據(jù)進(jìn)行壓縮,壓縮后把相應(yīng)的數(shù)據(jù)寫到輸出FIFO。同理,發(fā)送模塊的處理速度為18Kb/s。DSP寫輸出FIFO的速度也在38Mb/s左右。顯然,前端與DSP及DSP與發(fā)送模塊的處理速度不是一個數(shù)量級。所以在前端與DSP之間,DSP與發(fā)送模塊間分別加了兩個FIFO。本設(shè)計中FIFO1、FIFO2均選用IDT72V19160,其存儲空間為128KB,16位并行數(shù)據(jù)總線,可達(dá)到100MHz的操作時鐘。原理框圖如圖1所示。

?


??? 前端通過16位數(shù)據(jù)總線將數(shù)據(jù)寫入到輸入FIFO1中。在程序中通過控制其半滿(HF)信號,即當(dāng)數(shù)據(jù)超過32KB時(32768+1), HF信號低電平有效,就會觸發(fā)一次中斷通知可編程邏輯和DSP,DSP進(jìn)入中斷后把2KB的數(shù)據(jù)從輸入FIFO1中讀入到SBUF所指向的SDRAM空間中,在進(jìn)行高速壓縮以后,被壓縮的數(shù)據(jù)放到DBUF中。SBUF的數(shù)據(jù)要與DBUF的數(shù)據(jù)進(jìn)行比較,若DBUF中存儲數(shù)據(jù)的容量小于SBUF中的存儲數(shù)據(jù)的容量,就把DBUF中相應(yīng)的數(shù)據(jù)寫到DSP的軟FIFO中,否則,就把SBUF中相應(yīng)的數(shù)據(jù)寫到DSP的軟FIFO中。最終,DSP把壓縮后的數(shù)據(jù)通過其軟FIFO寫入到輸出FIFO2中,等待發(fā)送模塊把數(shù)據(jù)讀走。
??? 在上述過程中,如果DSP沒有等待到中斷信號,則返回繼續(xù)等待,直到檢測到中斷信號,才讀取FIFO1中的數(shù)據(jù)。在DSP對SBUF中的數(shù)據(jù)幀壓縮的同時,前端以固定的采樣率對模擬信號進(jìn)行采樣,并寫入到輸入FIFO1中。同時DSP把壓縮后的數(shù)據(jù)按每次小于2KB左右的速度寫入到輸出FIFO2。當(dāng)輸出FIFO2半滿,發(fā)送模塊控制器會把其HF信號通過GPIO口指向DSP。本設(shè)計中用GP10實現(xiàn)相應(yīng)的操作。DSP的GPIO口可以設(shè)為輸入引腳,在中斷向量表中定義后,其本身可以當(dāng)作中斷使用。這樣DSP可以把采集到的實時數(shù)據(jù)源源不斷地寫入到FIFO2。整個信號處理模塊的不同子模塊都處于并行工作狀態(tài),較好地實現(xiàn)了數(shù)據(jù)的實時壓縮,提高了壓縮效率。
??? 設(shè)備上電DSP復(fù)位后,由其內(nèi)部固化的自引導(dǎo)程序(BOOT)將存于Flash存儲器的程序和數(shù)據(jù)搬移至內(nèi)部 RAM中,然后DSP即可以開始讀取壓縮算法的應(yīng)用程序,繼續(xù)運行。DSP的工作流程圖如圖2所示。上電以后,首先初始化DSP的CSL函數(shù)庫,然后初始化PLL、GPIO及關(guān)中斷寄存器,等待中斷信號的來臨。

?


2 算法的選擇
??? 無損壓縮就是對信源信息進(jìn)行壓縮編碼后在解壓縮時能夠完全恢復(fù),也即在壓縮和解壓縮過程中對信源信息沒有絲毫損失。常用的無損壓縮方法有Shannon-Fano編碼、Huffman編碼、游程(Run-length)編碼、LZW(Lempel-Ziv-Welch)編碼和算術(shù)編碼(ARC)等。對許多信息而言,沒必要完全保留全部特征。在允許一定精度損失的情況下,可以獲得更高的壓縮編碼效率。這類壓縮編碼方法成為有損壓縮。本設(shè)計采用無損壓縮,不再討論有損壓縮。
??? 無損數(shù)據(jù)壓縮算法可以分為統(tǒng)計方法和詞典編碼方法。統(tǒng)計方法當(dāng)以Huffman編碼和算術(shù)編碼(ARC)為代表。這種方法需要統(tǒng)計信源符號的概率分布情況,并根據(jù)統(tǒng)計結(jié)果產(chǎn)生壓縮碼。算術(shù)編碼是一種高效清除字串冗余的算法。仙儂信息論把字符aj出現(xiàn)的自信息量定義為I(aj)=-logpj I(aj)亦稱自信息函數(shù),其含義實際是隨機(jī)變量X取值為aj時所攜帶信息的度量。自信息量的概率平均值,即隨機(jī)變量I(aj)的數(shù)學(xué)期望值,稱做信息熵或簡稱熵。算術(shù)編碼從全序列出發(fā),采用遞推形式連續(xù)編碼。它不是將單個的信源符號映射成一個碼字,而是將整個輸入符號序列映射為實數(shù)軸上[0,1)區(qū)間內(nèi)的一個小區(qū)間,其長度等于該序列的概率,再在該小區(qū)間內(nèi)選擇一個有代表性的二進(jìn)制小數(shù),而且是一個介于0和1之間的二進(jìn)制小數(shù)作為實際的編碼輸出,從而達(dá)到了高效編碼的目的。例如算術(shù)編碼對某條信息的輸出為1010001111,它表示小數(shù)0.1010001111,也即十進(jìn)制數(shù)0.64。不論是否為二元信源,也不論數(shù)據(jù)的概率分布如何,其平均碼長均能逼近信源的熵。算術(shù)編碼的過程實際上也就是信源編碼試圖將任意的信息流與0、1之間的間隔建立一一對應(yīng)關(guān)系的過程。這樣要表示的信息流越長,則表示它的間隔就越小,用于表示這一間隔所需的二進(jìn)制位就越多。
??? 算術(shù)編碼在編碼前要求預(yù)先統(tǒng)計各信源符號概率,但無須排序,只要編、解碼端使用相同的符號順序即可。建立合理的信源概率模型是進(jìn)行算術(shù)編碼的關(guān)鍵。信源概率模型的建立方法一般有兩種:一種是自適應(yīng)的模型,是在不斷輸入信源的過程中對信源符號出現(xiàn)的概率進(jìn)行統(tǒng)計,模型是在編碼過程中逐步建立起來并不斷更新;另一種是事先統(tǒng)計的模型,是在編碼前就對所有輸入信源符號的出現(xiàn)頻率進(jìn)行事先統(tǒng)計,而編碼過程中模型不再改變?;趦煞N模型算法的不同之處:事先統(tǒng)計模型在編碼之前就己經(jīng)建立,編碼過程中不再更新,故壓縮效率與輸入字節(jié)數(shù)關(guān)系不大;而自適應(yīng)模型是在編碼過程中建立并不斷更新,當(dāng)輸入信源的數(shù)據(jù)量較大時,出現(xiàn)概率大的字符編碼位數(shù)較少的優(yōu)越性才能得以體現(xiàn)。在復(fù)雜度上,由于后者需要不斷對模型進(jìn)行更新,故運算量較大。
??? 詞典編碼方法則是基于數(shù)據(jù)中許多結(jié)構(gòu)頻繁重復(fù)再現(xiàn)這一事實,人們可以對相同符號串分配同一碼字、通過索引或者其他諸如此類的方法編碼。LZW算法可以在對數(shù)據(jù)統(tǒng)計特性一無所知的前提下,使壓縮率接近己知統(tǒng)計特性時所能夠達(dá)到的壓縮率,其運算速度快。LZW算法壓縮的原理在于用字典中詞條的編碼代替被壓縮數(shù)據(jù)中的字符串。字典中的詞條越長越多,壓縮率就越高。所以加大字典的容量可以提高壓縮率。但從字典中查找詞條是算法中最費時的工作,其字典的容量受到計算機(jī)內(nèi)存限制,且字典也存在被填滿的可能。當(dāng)字典不能再加入新詞條后,過老的字典就不能保證高的壓縮率。
??? 不同的壓縮算法有不同的優(yōu)點和缺點,不同算法的復(fù)雜性對空間的要求及壓縮率也不同。壓縮算法不僅僅依賴于壓縮方法本身,也依賴于被壓縮文本的特點。在本文中,由于是對實時數(shù)據(jù)的壓縮,對壓縮過程的時間性能要求高,所以采用事先統(tǒng)計模型的ARC。實驗證明,采用事先統(tǒng)計模型的ARC,其運算速度與LZW算法速度相近。而ARC算法在壓縮速度和壓縮去除率上都優(yōu)于LZW算法。
3 實驗與結(jié)果
??? 在比較字典編碼LZW與算術(shù)編碼ARC時,從壓縮速度和壓縮去除率上進(jìn)行比較。前端以27Kb/s的速度實時采集8位的數(shù)據(jù),數(shù)據(jù)壓縮后通過發(fā)送模塊以18Kb/s的速度數(shù)據(jù)傳到外界。對原始數(shù)據(jù)以2 048B作為分組長度考察其壓縮去除率及壓縮時間。
??? 壓縮去除率=(原始數(shù)據(jù)量-壓縮后數(shù)據(jù)量)/原始數(shù)據(jù)量
??? 這是從空間角度衡量。實際上,對壓縮效率而言還必須關(guān)注其時間效率,本文采用“壓縮速度”的概念,定義如下:
?? ?壓縮速度=原始數(shù)據(jù)量/壓縮所需要的時間以2 048B的數(shù)據(jù)分組進(jìn)行分析:
??? (1)從壓縮速度方面:完成2 048B的某噪聲數(shù)據(jù),ARC算法需要5.64ms來完成,而LZW算法需要6.6ms,可見ARC算法的壓縮速度比較快。
?? ?(2)從壓縮效率方面:將某數(shù)據(jù)按照2 048B的長度進(jìn)行分組并壓縮,從表1中可知ARC算法針對不同分組段的數(shù)據(jù)壓縮去除率恒定在78%左右,而LZW算法,在該分組段壓縮去除率僅為71%。可見該段數(shù)據(jù)ARC壓縮算法壓縮去除率比較高。

?


??? 采用ARC算法后,通過大量的實驗數(shù)據(jù)的平均壓縮去除率為79%,滿足系統(tǒng)所要求的數(shù)據(jù)壓縮去除率大于50%的要求。用ARC算法壓縮2 048B的數(shù)據(jù)需要5.64ms左右。數(shù)據(jù)不同,壓縮時間會有所不同。通過對控制軟件讀取的數(shù)據(jù)進(jìn)行解包、解壓,證明還原出來的數(shù)據(jù)與原始數(shù)據(jù)完全一致,實現(xiàn)了實時數(shù)據(jù)的無損壓縮。
參考文獻(xiàn)
[1] 吳樂南.數(shù)據(jù)壓縮[M].北京:電子工業(yè)出版社,2000:3-6.
[2] 江思敏,劉暢.TMS320C6000 DSP應(yīng)用開發(fā)教程[M].北京:機(jī)械工業(yè)出版社,2005:101-103.
[3] Texas Instruments.TMS320C6000 Programmer′s Guide[M].北京:清華大學(xué)出版社,2000:61-63.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。