<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > 自適應算術(shù)編碼的FPGA實(shí)現

自適應算術(shù)編碼的FPGA實(shí)現

——
作者: 時(shí)間:2005-10-11 來(lái)源:電子產(chǎn)品世界 收藏


  算術(shù)編碼是一種無(wú)失真的編碼方法,能有效地壓縮信源冗余度,屬于熵編碼的一種。算術(shù)編碼的一個(gè)重要特點(diǎn)就是可以按分數比特逼近信源熵,突破了Haffman編碼每個(gè)符號只不過(guò)能按整數個(gè)比特逼近信源熵的限制。對信源進(jìn)行算術(shù)編碼,往往需要兩個(gè)過(guò)程,第一個(gè)過(guò)程是建立信源概率表,第二個(gè)過(guò)程是對信源發(fā)出的符號序列進(jìn)行掃描編碼。而自適應算術(shù)編碼在對符號序列進(jìn)行掃描的過(guò)程中,可一次完成上述兩個(gè)過(guò)程,即根據恰當的概率估計模型和當前符號序列中各符號出現的頻率,自適應地調整各符號的概率估計值,同時(shí)完成編碼。盡管從編碼效率上看不如已知概率表的情況,但正是由于自適應算術(shù)編碼具有實(shí)時(shí)性好、靈活性高、適應性強等特點(diǎn),在圖像壓縮、視頻圖像編碼等領(lǐng)域都得到了廣泛的應用。

  現場(chǎng)可編程門(mén)陣列()是一種新興的可編程邏輯器件,具有更高的密度、更快的工作速度和更大的編程靈活性,被廣泛應用于各種電子類(lèi)產(chǎn)品中。而硬件描述語(yǔ)言(HDL)是一種快速的電路設計工具,其功能涵蓋了電路描述、電路合成、電路仿真等的三大電路設計工作。VHDL是HDL的一種,因其簡(jiǎn)單易懂而被廣泛使用。本文采用VHDL編程實(shí)現了自適應算術(shù)編碼,為算術(shù)編碼器的硬件實(shí)現提供了借鑒。

1 算術(shù)編碼的基本原則[1]

  實(shí)現算術(shù)編碼首先需要知道信源發(fā)出每個(gè)符號的概率大小,然后再掃描符號序列,依次分割相應的區間,最終得到符號序列所對應的碼字。整個(gè)編碼需要兩個(gè)過(guò)程,即概率模型建立過(guò)程和掃描編碼過(guò)程。

  算術(shù)編碼的基本原理是:根據信源可能發(fā)現的不同符號序列的概率,把[0,1]區間劃分為互不重疊的子區間,子區間的寬度恰好是各符號序列的概率。這樣信源發(fā)出的不同符號序列將與各子區間一一對應,因此每個(gè)子區間內的任意一個(gè)實(shí)數都可以用來(lái)表示對應的符號序列,這個(gè)數就是該符號序列所對應的碼字。顯然,一串符號序列發(fā)生的概率越大,對應的子區間就越寬,要表達它所用的比特數就減少,因而相應的碼字就越短。

  圖1給出一個(gè)實(shí)現算術(shù)編碼的示例。要編碼的是一個(gè)來(lái)自四符號信源{A,B,C,D}的由五個(gè)符號組成的符號序列:ABBCD。假設已知各信源符號的概率分別為:P(A)=0.2,P(B)=0.4,P(C)=0.2,P(D)=0.2。編碼時(shí),首先根據各個(gè)信源符號的概率將區間[0,1]。分成四個(gè)子區間。符號A對應[0,0.2],符號B對應[0.2,0.6],符號C對應[0.6,0.8],符號D對應[0.8,1.0]。符號序列中第一個(gè)符號是A,其對應的區間為[0,0.2],接下來(lái)將這個(gè)區間擴展為整個(gè)高度,再根據各個(gè)信源符號的概率將這個(gè)間擴展為整個(gè)高度,再根據各個(gè)信源符號的概率將這個(gè)新區間分成四段;第二個(gè)符號是B,它對應新的子區間的第二個(gè)子區間,即對應區間[0.04,0.12];再將該區間擴展為整個(gè)高度,再根據這個(gè)過(guò)程直接最后一個(gè)符號得到一個(gè)區間[0.08032,0.0816],這樣該區間內的任何一個(gè)實(shí)數就可以表示整個(gè)符號序列,如0.081。

2 自適應算術(shù)編碼的基本原理

  自適應算術(shù)編碼在一次掃描中可完成兩個(gè)過(guò)程,即概率模型建立過(guò)來(lái)和掃描編碼過(guò)程。

  自適應算術(shù)編碼在掃描符號序列前并不知道各符號的統計概率,這時(shí)假定每個(gè)符號的概率相等,并平均分配區間[0,1]。然后在掃描符號序列的過(guò)程中不斷調整各個(gè)符號的概率。同樣假定要編碼的是一個(gè)來(lái)自四符號信源{A,B,C,D}的五個(gè)符號組成的符號序列:ABBCD。編碼開(kāi)始前首先將區間[0,1]等分為四個(gè)子區間,分別對應A,B,C,D四個(gè)符號。掃描符號序列,第一個(gè)符號是A,對應區間為[0,0.25],然后改變各個(gè)符號的統計概率,符號A的概率為2/5,符號B的概率為1/5,符號C的概率為1/5,符號D的概率為1/5,再將區間[0,0.25]等分為五份,A占兩份,其余各占一份。接下來(lái)對第二個(gè)符號B進(jìn)行編碼,對應的區間為[0.1,0.15],再重復前面的概率調整和區間劃分過(guò)程。具體的概率調整見(jiàn)表1。

表1 自適應算術(shù)編碼的概率調整

概率

A

B

C

D

初始

1/4

1/4

1/4

1/4

傳輸A 后

2/5

1/5

1/5

1/5

傳輸B 后

2/6

2/6

1/6

1/6

傳輸B 后

2/7

3/7

1/7

1/7

傳輸C 后

2/8

3/8

2/8

1/8

傳輸D 后

2/9

3/9

2/9

2/9


  隨著(zhù)符號序列中符號個(gè)數的不斷增多,自由適應算術(shù)編碼估計得到的各符號的概率將趨于各符號的真實(shí)概率。

3 自適應算術(shù)編碼的 實(shí)現[2]

3.1 總體設計

  在利用實(shí)現自適應算術(shù)編碼的過(guò)程中,首先遇到的問(wèn)題就是將浮點(diǎn)運算轉化為定點(diǎn)運算,即將[0,1]區間的一個(gè)小數映射為一個(gè)便于硬件實(shí)現的定點(diǎn)數??紤]到硬件實(shí)現的簡(jiǎn)便性,本文中將[0,1]之間的浮點(diǎn)數與[0,256]之間的定點(diǎn)數對應。相應的對應關(guān)系如表2所示。

表2 浮點(diǎn)與定點(diǎn)之間的關(guān)系

浮點(diǎn)

0

0.2

0.5

0.7

1

定點(diǎn)

0

51

128

179

256

  編碼器在實(shí)現編碼的整個(gè)過(guò)程中按照耦合弱、聚合強的原則分為四個(gè)模塊:修改碼表、計算確定區間、并行編碼、串行輸出。四個(gè)模塊相對獨立,通過(guò)輸入、輸出信號使其構成一個(gè)整體。系統的頂層結構如圖2所示。

3.2 碼表的設計及修改自適應算術(shù)編碼器可以在許多場(chǎng)合中得到應用。

  本文實(shí)現的自適應算術(shù)編碼器應用在采用6符號對小波變換系數進(jìn)行零樹(shù)編碼的小波域視頻編碼中[3],因此設計的碼表中含有六個(gè)符號。這樣根據自適應算術(shù)編碼的基本原理,將區間分成六個(gè)子區間,整個(gè)區間含水量有七個(gè)分割點(diǎn)。所以碼表可以用七個(gè)8位寄存器表示。初始時(shí)設定等概率,這時(shí)七個(gè)寄存器可以順序地存儲0到6這七個(gè)數,即每個(gè)子區間的數值為1。隨著(zhù)符號不斷地輸入,自適應地修改碼表,并且在修改碼表的過(guò)程中時(shí)刻要保持寄存器中的數值是遞增的。

  修改碼表時(shí),首先判斷輸入符號,確定其所在區間,同時(shí)為后續模塊輸出該子區間的兩個(gè)端點(diǎn)值l_count和h_count以及碼表的最后一個(gè)端點(diǎn)值scale,然后進(jìn)行碼表的修改:將當前符號所在區間之后的所有端點(diǎn)值都加1,即當前區間及后面所有子我間的h_count=h_count+1,這樣即完成了碼表的修改。在數值不斷累加過(guò)程中,寄存器中的數值為255時(shí),需要對每一個(gè)寄存器中的值都取半,并同時(shí)對相鄰的兩個(gè)寄存器中的值進(jìn)行比較,時(shí)刻保持數值是遞值的。這樣,處理前后的概率十分接近,對壓縮比影響不大。修改碼表模塊在輸出h_count、l_count和scale之后,后面的計算子區間的模塊即可進(jìn)行計算;而修改碼表模塊在輸出h_count、l_count和scale之后,亦可進(jìn)行碼表的修改。因此,這兩個(gè)操作可以采用并行處理的方法實(shí)現,極大地節省了所用的時(shí)鐘周期,相應地提高了速度,達到了優(yōu)化的目的。表3給出了輸入符號為3(對應于寄存器2與寄存器3之間的區間)時(shí)碼表的修改過(guò)程。

表3 碼表修改前后對照表

寄存器

0

1

2

3

4

5

6

修改前

0

4

34

56

77

112

233

修改后

0

4

34

57

78

113

234

修改前

0

23

54

56

57

234

255

修改后

0

11

27

28

29

117

127


3.3 區間計算及確定

  初始時(shí)符號所在的總區間為high=0xff,low=0(high和low分別表示已編碼的符號序列所在子區間的上下界)。隨著(zhù)符號的不斷輸入,high和low的值也不斷地減小,用以表示輸入符號序列所對應的子區間。通過(guò)如下的公式可確定輸入符號的區間:

  計算時(shí),最耗資源的是乘法器和除法器。本方案中乘法器采用參數化模塊lpm中的lpm_mult生成。而除法器則自動(dòng)編寫(xiě)。雖然占用的時(shí)鐘周期較多,但與使用lpm相比,這樣做可以大大地提高工作頻率,從總體上提高性能。

3.4 并行編碼

  在區間計算過(guò)程中,high和low總是有限值,不可能無(wú)限制地劃分下去。為了能夠實(shí)現連續的編碼,通過(guò)對high和low的處理,可以實(shí)現利用有限長(cháng)的寄存器表示無(wú)限精度的區間,即在不斷修改high和low的過(guò)程中輸出high和low中相同的高端位,形成輸出碼流。詳細過(guò)程如下:

  在區間確定之后,將low和high按位比較,若首位相同,則輸出首位二進(jìn)制碼,產(chǎn)生輸出碼流,同時(shí)把low和high左移,low末位補0,high末位補1。循環(huán)比較輸出,直到首位不同為止。如:

  high = 00110110


  low = 00100111 輸出碼流為001,而high和low的結果為:high = 10110111 low = 00111000 通過(guò)這種連續地處理便可生成符號序列的自適應算術(shù)編碼結束。但隨著(zhù)待編碼符號序列的不斷輸入,可能會(huì )出現high和low十分接近,并且high和low的首位沒(méi)有相同位的情況,如:high = 10000000 low = 01111111 稱(chēng)這種現象為產(chǎn)生了下溢。產(chǎn)生下溢后,后面的編碼都失去了意義,此時(shí)需要特殊處理。對于下溢的處理方法為:保留首位,同時(shí)刪除緊接在首位后的high中連續的0和low中連續的1,并且保證對high和low刪除的位數相同,若連續0和連續1的位數不同,則取其較小者;然后high和low左移相同的位數,同時(shí)high的低位補1,low的低位補0。表4給出了下溢處理前后high和low值。

表4 下溢處理前后對照表

c

下溢處理前

下溢處理后

下溢個(gè)數

high

10001000

11000111

3

low

01110111

00111000

  經(jīng)過(guò)處理后,擴大了區間,使得后面的編碼可以順利地進(jìn)行。

  在考慮了下溢的編碼輸出中,下溢作為輸出碼流的一部分,使得解碼時(shí)能對下溢進(jìn)行同樣的處理,達到編解碼的一致。但是下溢產(chǎn)生后并不馬上輸出,只記下下溢的個(gè)數,下溢則是在下一個(gè)符號編碼時(shí)進(jìn)行輸出的。在下一個(gè)符號編碼時(shí),如果high和low比較后高端有相同位則輸出下溢,即在第一個(gè)輸出后緊接著(zhù)插入首位的反,插入首則反的個(gè)數為前面產(chǎn)生下溢的個(gè)數,然后輸出相同的次高位及以后相同的各位。這樣處理既保留了下溢的信息又使得輸出碼流不偏離編碼符號所在的子區間,使得解碼時(shí)很容易處理。但是如此high和low比較后沒(méi)有相同輸出則不輸出下溢,而是把兩次產(chǎn)生的下溢的個(gè)數進(jìn)行累加,再輸入下一個(gè)符號,直到high和low有相同首位才輸出下溢。

  例如:在一個(gè)符號編碼計算后得到的high=11010010和low=11001101,而前一個(gè)符號編碼產(chǎn)生的下溢為1個(gè),比較后輸出為1010,同時(shí)記錄下產(chǎn)生的下溢2個(gè),如表5所示。

表5 含有下溢的編碼輸出
 

編碼輸出前

11010010

11001101

1

1010

編碼輸出后

11011111

00100000

2

3.5 串行輸出

  并行編碼后產(chǎn)生的碼流存儲在并行數據中,但在大多的情況下只有兩、三個(gè)輸出,甚至沒(méi)有輸出,若采用并行輸出,就會(huì )產(chǎn)生極大的浪費。為了充分利用資源,在并行編碼之后進(jìn)行并/串轉換,使其一位一位地輸出,并且這個(gè)輸出過(guò)程與下一個(gè)符號編碼的過(guò)程并行完成,因此并不占用多余的時(shí)鐘周期。

  在編碼過(guò)程中,當一個(gè)符號編碼結束后,觸發(fā)reload信號,通知此次編碼結束,進(jìn)行下一次編碼,讀取輸入的符號。同時(shí)需判斷輸入是否合法,如果是合法的輸入,就進(jìn)行編碼;否則停止編碼,否則停止編碼,處于等待狀態(tài),直到復位信號ret置1,重新初始化、編碼。

4 仿真結果

  本文算法采用VHDL硬件描述語(yǔ)言實(shí)現,并在A(yíng)LTERA公司的MAX+plusⅡ軟件上編譯仿真。市府采用全局同步時(shí)鐘,避免了毛剌的產(chǎn)生,保證了信號的穩定性。編碼的仿真結果如圖書(shū)3所示。

  其中,rst、clk、c為輸入信號,rst為模塊中各寄存器的初始化信號,clk為時(shí)鐘同步信號,而c則為輸入的編碼信號;out_flag、out_bit、reload、end_code、為輸出信號,out_flag 和out_bit分別為輸出標志位和輸出位(若out_falg=1,則此時(shí)out_bit為有效輸出;否則out_bit輸出無(wú)效),reload為一個(gè)符號編碼結束)下一個(gè)符號輸入的標志位,end_code為編碼結束的標志(若end_code=0,則繼續編碼,否則編碼結束)。在進(jìn)行性能仿真時(shí)[4],采用的器件是FLEX1K系列的EP1K30TC144-1器件,其最大工作頻率為40MHz,消耗1533個(gè)LC,平均編碼時(shí)間為20個(gè)時(shí)鐘周期。一個(gè)符號的編碼時(shí)間不到500ns,對于QCIF格式的圖像完全可以滿(mǎn)足每秒鐘實(shí)時(shí)編碼30幀圖像的要求。

  自適應算術(shù)編碼是一種效率很高的無(wú)失真編碼,本文通過(guò)VHDL語(yǔ)言實(shí)現了自適應的算術(shù)編碼,在編碼過(guò)程中,根據硬件結構的特點(diǎn),充分利用其并行特性。通過(guò)并行執行,實(shí)現了速度的優(yōu)化。由于滿(mǎn)足每秒鐘編碼30幀圖像的要求,因此可以應用于視頻圖像的實(shí)時(shí)編碼中。



關(guān)鍵詞: FPGA 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>