摘 要:主要介紹了卷積碼中Viterbi譯碼器的FPGA實現方案。方案中設計了幸存路徑交換寄存器模塊,充分利用FPGA中豐富的觸發(fā)器資源,減小了譯碼器狀態(tài)控制的復雜度,提高了VB譯碼器的運行速度。
關鍵詞:卷積碼;Viterbi算法;FPGA;VB
在通信系統(tǒng)信道編碼中,卷積碼編碼器的輸出不僅與此時刻的k個輸入有關,還與前m個輸入有關,由于其充分利用了各組之間的相關性,與分組碼相比,在同樣的碼率和設備復雜性條件下,卷積碼的性能不比分組碼差,且實現最佳譯碼也較分組碼容易。 1967年維特比(Viterbi)提出了基于網格圖(Trellis)的最大似然譯碼算法Viterbi(VB)算法。在碼的約束度較小時,VB算法具有效率高、速度快、譯碼器簡單等特點,現在已被廣泛應用于各種數傳系統(tǒng)中。
近年來隨著集成電路制造技術的迅速發(fā)展,可編程邏輯器件(PLD)也得到了很大發(fā)展,并以其密度高、速度快、編程靈活、成本低廉等優(yōu)點在各個領域得到廣泛應用。
基于FPGA的卷積碼Viterbi譯碼器,針對FPGA觸發(fā)器資源豐富的優(yōu)點,設計了幸存路徑交換寄存器模塊,使譯碼過程中的幸存路徑選擇變得快速簡單。而且所設計的VB譯碼器可以很容易地根據需要集成到應用系統(tǒng)之中。
1 VB譯碼器原理
卷積碼的編碼過程可以認為是輸入信息元通過編碼網格圖相應路徑的過程。因此譯碼可以認為是根據接收碼字序列尋找編碼時通過網格圖的路徑的過程。找到該路徑即完成了譯碼過程,并可以糾正接收碼字中的錯誤比特。
圖1所示八狀態(tài)(2,1,3)卷積碼網格圖中,實線和虛線分別表示輸入比特為0,1時的狀態(tài)轉移,而分枝上的值表示相應的編碼輸出碼字。

參照網格圖,VB算法的基本原理是:在不同時刻t=k+1,k+2,...,k+L,對于同一時刻的所有8個狀態(tài),分別計算并比較以其為終點的兩條路徑的路徑度量,保留一條具有最大路徑度量的路徑,稱為幸存路徑,而將另一條路徑舍棄。每個時刻進行同樣的運算處理過程,直到最后時刻,留下的幸存路徑即是所要的最大似然譯碼路徑。幸存路徑對應的編碼比特,就是譯碼輸出的硬判決比特。
實際譯碼過程中,考慮到譯碼延時與譯碼器存儲量,常采用截尾譯碼方式,即在處理完第L段碼元序列后,譯碼器就開始輸出第k個判決比特,L稱為譯碼窗口寬度,等于譯碼器的譯碼輸出延時。理論表明,當L=5~10 m時(m為卷積碼編碼存貯長度),對譯碼器輸出的譯碼錯誤概率影響很小。對于八狀態(tài)卷積碼m=3,因此設計中取L=30。
2 VB譯碼器FPGA實現總體架構
VB譯碼器主要由5個子模塊構成,如圖2所示。
。1)支路度量發(fā)生器 對于每一時刻的輸入碼元,為每一個狀態(tài)生成相應的支路度量。
。2)加比較選擇器(ACS) 根據VB譯碼原理,將支路度量和前一時刻相應的路徑度量相加并比較,得到本時刻的新的路徑度量和相應的判決比特,如圖3所示。


。3)路徑度量PM化簡模塊 對新的路徑度量進行化簡,挑選最小的路徑度量作為化簡基準,更新所有8個狀 態(tài)的路徑度量值,防止路徑度量多次相加后溢出。

(4)幸存路徑交換寄存器模塊 設計用來快速實現VB譯碼過程,完成幸存路徑的選擇、交換、存儲等功能;在L步延時后,0狀態(tài)的幸存路徑作為譯碼判決輸出,如圖4所示。
。5)譯碼控制狀態(tài)機 控制和協(xié)調VB譯碼器各模塊的工作時序。
3 結 語
在VB算法基礎上,設計了基于FPGA的VB譯碼器硬件架構,并根據要求設計了每個功能子模塊。為保證譯碼速度并充分利用FPGA中的觸發(fā)器資源,設計了幸存路徑交換寄存器模塊,以動態(tài)交換代替了傳統(tǒng)的靜態(tài)存儲結構,減小了譯碼器狀態(tài)控制的復雜度,提高了譯碼器的運行速度。
VB譯碼器及所有模塊均在Xilinx公司的ISE5.1開發(fā)環(huán)境中成功調試及綜合下載。FPGA器件選用Xilinx公司SpartanⅡ系列中的XC2S100。
<!--→參考文獻CH(開始)-->
[1]王新梅,肖國鎮(zhèn).糾錯碼原理與方法[M].西安:西安電子科技大學出版社,2001.
[2]王金明.數字系統(tǒng)設計與Verilog HDL[M].北京:電子工業(yè)出版社,2002.
[3]朱明程.Xilinx數字系統(tǒng)現場集成技術[M].南京: 東南大學出版社,2001.





