自適應算術編碼的FPGA
發布時間:2007/8/20 0:00:00 訪問次數:869
算術編碼是一種無失真的編碼方法,能有效地壓縮信源冗余度,屬于熵編碼的一種。算術編碼的一個重要特點就是可以按分數比特逼近信源熵,突破了Haffman 編碼每個符號只不過能按整數個比特逼近信源熵的限制。對信源進行算術編碼,往往需要兩個過程,第一個過程是建立信源概率表,第二個過程是對信源發出的符號序列進行掃描編碼。而自適應算術編碼在對符號序列進行掃描的過程中,可一次完成上述兩個過程,即根據恰當的概率估計模型和當前符號序列中各符號出現的頻率,自適應地調整各符號的概率估計值,同時完成編碼。盡管從編碼效率上看不如已知概率表的情況,但正是由于自適應算術編碼具有實時性好、靈活性高、適應性強等特點,在圖像壓縮、視頻圖像編碼等領域都得到了廣泛的應用。
現場可編程門陣列(FPGA)是一種新興的可編程邏輯器件,具有更高的密度、更快的工作速度和更大的編程靈活性,被廣泛應用于各種電子類產品中。而硬件描述語言(HDL)是一種快速的電路設計工具,其功能涵蓋了電路描述、電路合成、電路仿真等的三大電路設計工作。VHDL 是HDL 的一種,因其簡單易懂而被廣泛使用。本文采用VHDL 編程實現了自適應算術編碼,為算術編碼器的硬件實現提供了借鑒。
1 算術編碼的基本原則
實現算術編碼首先需要知道信源發出每個符號的概率大小,然后再掃描符號序列,依次分割相應的區間,最終得到符號序列所對應的碼字。整個編碼需要兩個過程,即概率模型建立過程和掃描編碼過程。
算術編碼的基本原理是:根據信源可能發現的不同符號序列的概率,把[0,1]區間劃分為互不重疊的子區間,子區間的寬度恰好是各符號序列的概率。這樣信源發出的不同符號序列將與各子區間一一對應,因此每個子區間內的任意一個實數都可以用來表示對應的符號序列,這個數就是該符號序列所對應的碼字。顯然,一串符號序列發生的概率越大,對應的子區間就越寬,要表達它所用的比特數就減少,因而相應的碼字就越短。
圖1 給出一個實現算術編碼的示例。要編碼的是一個來自四符號信源{A,B,C,D}的由五個符號組成的符號序列:ABBCD。假設已知各信源符號的概率分別為:P(A)=0.2,P(B)=0.4,P(C)=0.2,P(D)=0.2。編碼時,首先根據各個信源符號的概率將區間[0,1]。分成四個子區間。符號A 對應[0,0.2],符號B 對應[0.2,0.6],符號C 對應[0.6,0.8],符號D 對應[0.8,1.0]。符號序列中第一個符號是A,其對應的區間為[0,0.2],接下來將這個區間擴展為整個高度,再根據各個信源符號的概率將這個間擴展為整個高度,再根據各個信源符號的概率將這個新區間分成四段;第二個符號是B,它對應新的子區間的第二個子區間,即對應區間[0.04,0.12];再將該區間擴展為整個高度,再根據這個過程直接最后一個符號得到一個區間[0.08032,0.0816],這樣該區間內的任何一個實數就可以表示整個符號序列,如0.081。
2 自適應算術編碼的基本原理
自適應算術編碼在一次掃描中可完成兩個過程,即概率模型建立過來和掃描編碼過程。自適應算術編碼在掃描符號序列前并不知道各符號的統計概率,這時假定每個符號的概率相等,并平均分配區間[0,1]。然后在掃描符號序列的過程中不斷調整各個符號的概率。同樣假定要編碼的是一個來自四符號信源{A,B,C,D}的五個符號組成的符號序列:ABBCD。編碼開始前首先將區間[0,1]等分為四個子區間,分別對應A,B,C,D 四個符號。掃描符號序列,第一個符號是A,對應區間為[0,0.25],然后改變各個符號的統計概率,符號A 的概率為2/5,符號B 的概率為1/5,符號C 的概率為1/5,符號D 的概率為1/5,再將區間[0,0.25]等分為五份,A 占兩份,其余各占一份。接下來對第二個符號B 進行編碼,對應的區間為[0.1,0.15],再重復前面的概率調整和區間劃分過程。具體的概率調整見表1。
表1 自適應算術編碼的概率調整概率
隨著符號序列中符號個數的不斷增多,自由適應算術編碼估計得到的各符號的概率將趨于各符號的真實概率。
3 自適應算術編碼的FPGA 實現
3.1 總體設計
在利用FPGA 實現自適應算術編碼的過程中,首先遇到的問題就是將浮點運算轉化為定點運算,即將[0,1]區間的一個小數映射為一個便于硬件實現的定點數。考慮到硬件實現的簡便性,本文中將[0,1]之間的浮點數與[0,256]之間的定點數對應。相應的對應關系如表2 所示。
表2 浮點與定點之間的關系浮點
編碼器在實現編碼的整個過程中按照耦合弱、聚合強的原則分為四個模塊:修改碼表、計算確定區間、并行編碼、串行輸出。四個模塊相對獨立,通過輸入、輸出信號使其構成一個整體。系統的頂層結構如圖2 所示。
3.2 碼表的設計及修改
自適應算術編碼器可以在許
算術編碼是一種無失真的編碼方法,能有效地壓縮信源冗余度,屬于熵編碼的一種。算術編碼的一個重要特點就是可以按分數比特逼近信源熵,突破了Haffman 編碼每個符號只不過能按整數個比特逼近信源熵的限制。對信源進行算術編碼,往往需要兩個過程,第一個過程是建立信源概率表,第二個過程是對信源發出的符號序列進行掃描編碼。而自適應算術編碼在對符號序列進行掃描的過程中,可一次完成上述兩個過程,即根據恰當的概率估計模型和當前符號序列中各符號出現的頻率,自適應地調整各符號的概率估計值,同時完成編碼。盡管從編碼效率上看不如已知概率表的情況,但正是由于自適應算術編碼具有實時性好、靈活性高、適應性強等特點,在圖像壓縮、視頻圖像編碼等領域都得到了廣泛的應用。
現場可編程門陣列(FPGA)是一種新興的可編程邏輯器件,具有更高的密度、更快的工作速度和更大的編程靈活性,被廣泛應用于各種電子類產品中。而硬件描述語言(HDL)是一種快速的電路設計工具,其功能涵蓋了電路描述、電路合成、電路仿真等的三大電路設計工作。VHDL 是HDL 的一種,因其簡單易懂而被廣泛使用。本文采用VHDL 編程實現了自適應算術編碼,為算術編碼器的硬件實現提供了借鑒。
1 算術編碼的基本原則
實現算術編碼首先需要知道信源發出每個符號的概率大小,然后再掃描符號序列,依次分割相應的區間,最終得到符號序列所對應的碼字。整個編碼需要兩個過程,即概率模型建立過程和掃描編碼過程。
算術編碼的基本原理是:根據信源可能發現的不同符號序列的概率,把[0,1]區間劃分為互不重疊的子區間,子區間的寬度恰好是各符號序列的概率。這樣信源發出的不同符號序列將與各子區間一一對應,因此每個子區間內的任意一個實數都可以用來表示對應的符號序列,這個數就是該符號序列所對應的碼字。顯然,一串符號序列發生的概率越大,對應的子區間就越寬,要表達它所用的比特數就減少,因而相應的碼字就越短。
圖1 給出一個實現算術編碼的示例。要編碼的是一個來自四符號信源{A,B,C,D}的由五個符號組成的符號序列:ABBCD。假設已知各信源符號的概率分別為:P(A)=0.2,P(B)=0.4,P(C)=0.2,P(D)=0.2。編碼時,首先根據各個信源符號的概率將區間[0,1]。分成四個子區間。符號A 對應[0,0.2],符號B 對應[0.2,0.6],符號C 對應[0.6,0.8],符號D 對應[0.8,1.0]。符號序列中第一個符號是A,其對應的區間為[0,0.2],接下來將這個區間擴展為整個高度,再根據各個信源符號的概率將這個間擴展為整個高度,再根據各個信源符號的概率將這個新區間分成四段;第二個符號是B,它對應新的子區間的第二個子區間,即對應區間[0.04,0.12];再將該區間擴展為整個高度,再根據這個過程直接最后一個符號得到一個區間[0.08032,0.0816],這樣該區間內的任何一個實數就可以表示整個符號序列,如0.081。
2 自適應算術編碼的基本原理
自適應算術編碼在一次掃描中可完成兩個過程,即概率模型建立過來和掃描編碼過程。自適應算術編碼在掃描符號序列前并不知道各符號的統計概率,這時假定每個符號的概率相等,并平均分配區間[0,1]。然后在掃描符號序列的過程中不斷調整各個符號的概率。同樣假定要編碼的是一個來自四符號信源{A,B,C,D}的五個符號組成的符號序列:ABBCD。編碼開始前首先將區間[0,1]等分為四個子區間,分別對應A,B,C,D 四個符號。掃描符號序列,第一個符號是A,對應區間為[0,0.25],然后改變各個符號的統計概率,符號A 的概率為2/5,符號B 的概率為1/5,符號C 的概率為1/5,符號D 的概率為1/5,再將區間[0,0.25]等分為五份,A 占兩份,其余各占一份。接下來對第二個符號B 進行編碼,對應的區間為[0.1,0.15],再重復前面的概率調整和區間劃分過程。具體的概率調整見表1。
表1 自適應算術編碼的概率調整概率
隨著符號序列中符號個數的不斷增多,自由適應算術編碼估計得到的各符號的概率將趨于各符號的真實概率。
3 自適應算術編碼的FPGA 實現
3.1 總體設計
在利用FPGA 實現自適應算術編碼的過程中,首先遇到的問題就是將浮點運算轉化為定點運算,即將[0,1]區間的一個小數映射為一個便于硬件實現的定點數。考慮到硬件實現的簡便性,本文中將[0,1]之間的浮點數與[0,256]之間的定點數對應。相應的對應關系如表2 所示。
表2 浮點與定點之間的關系浮點
編碼器在實現編碼的整個過程中按照耦合弱、聚合強的原則分為四個模塊:修改碼表、計算確定區間、并行編碼、串行輸出。四個模塊相對獨立,通過輸入、輸出信號使其構成一個整體。系統的頂層結構如圖2 所示。
3.2 碼表的設計及修改
自適應算術編碼器可以在許