李 超
(中國電子科技集團公司第20研究所, 西安 710068)
一種低時延Turbo碼的編碼器設計與實現
李超
(中國電子科技集團公司第20研究所, 西安 710068)
摘要:簡要介紹了一種Turbo碼的編碼原理,并對螺旋交織器與分量編碼器所采用的咬尾卷積碼結構進行了分析,說明了編碼器的實現結構,同時采用Xilinx公司的K7325T芯片完成了方案驗證,結果表明在系統時鐘為64 MHz的情況下編碼時延僅為4.8 μs。
關鍵詞:Turbo碼;咬尾卷積碼;低時延
0引言
在1993年瑞士日內瓦召開的國際通信會議上,Berrou提出了一種新型的信道編碼方案——Turbo碼。根據仿真結果發現,當碼長為65536bit并采用軟譯碼方式迭代18次情況下,Turbo碼性能與香農限僅差0.7 dB,由于其優異的性能而引起了業內的廣泛重視[1]。經過20余年的發展,Turbo碼的研究逐步成熟,目前它已成為第3代與第4代移動通信的主流標準之一,并在衛星通信與軍事通信中扮演著越來越重要的角色。
1編碼原理
Turbo碼是將信息序列分為交織序列與未交織序列后,分別通過分量編碼器級聯而成。本文中Turbo碼的分量編碼器采用咬尾卷積碼[2-3],其原理框圖如圖1所示。

圖1 編碼原理框圖
從圖1可以看出,Turbo編碼器由四相符號映射模塊、初始狀態計算模塊、分量編碼器模塊和復接模塊構成。其編碼流程如下:
(1) 將輸入信息序列按每2 bit為單位進行符號映射,并將映射后的符號分別傳輸給編碼器A和編碼器B。
(2) 對編碼器A信號進行初始狀態計算,計算出編碼寄存器的初始狀態。
(3) 將映射后數據分為前后相等的2包,并將寄存器初始狀態值同時送入分量編碼器A1與A2進行編碼。
(4) 將分量編碼器A1與A2編碼后的數據進行復接,完成編碼器A的編碼工作。
(5) 編碼器B工作流程與編碼器A相似,只是在編碼前應先進行符號交織。
(6) 將編碼器B輸出與編碼器A進行復接,完成整個編碼流程。
下面對其中的主要模塊進行介紹。
通常使用的卷積碼需要額外的零尾比特,而咬尾卷積碼中移位寄存器初始值與結束值相同,好處是可以消除碼率的損失,不需要傳輸額外比特。本編碼使用的分量編碼器采用了咬尾卷積碼,所以在編碼前需對卷積碼的寄存器初始狀態進行搜索。 搜索過程如下:
base=zech[B%(S-1)-1];
acc1=0;
for(i=0;i
acc1=acc1_lookup[data[i]][acc1];
initial_state=init_state_lookup[base][acc1];
其中B為編碼序列總長度,S為寄存器的狀態個數,zech、acc1_lookup、init_state_lookup表見參考文獻[4]。
交織可以使編碼后的數據隨機化,對碼重起到整形作用。交織器根據交織方式分為固定交織器、隨機交織器、分組交織器等3類[5],本文采用了螺旋交織器。螺旋交織器屬于分組交織器的一種,其螺旋式讀取數據的方式使得輸出碼字可以得到較大碼距,且實現較為簡單,便于工程實現[6]。
其交織過程可分為以下3步實現:
(1) 將輸入信息序列按照先行后列的方式寫入一個m×n矩陣中,其中m與n互為素數。
(2) 當開始讀取數據時,從矩陣的左上方開始向右下方順序進行,同時每向下一行讀取順序右移一位。
(3) 若讀取到矩陣邊緣,則返回后繼續按照左上方向右下方的順序讀取數據。
螺旋交織器的讀取順序表達式為:
(1)
式中:ri為第i個符號的行索引;ci為第i個符號的列索引;i=1,2,…,N-1,ri與ci的初始值均為0。
分量編碼器A與分量編碼器B采用的均是卷積碼,本文支持1/3、1/6和1/10 3種碼率,3種碼率的實現未采用刪余的方式,而是通過查詢編碼映射表與狀態轉移表的方式實現[7]。分量碼的狀態轉移表如表1所示。

表1 分量碼的狀態轉移表
2現場可編程門陣列(FPGA)實現
本方案設定原始信息位為1 024 bit,碼率為1/3、1/6和1/10 3種,交織器采用螺旋交織方式,編碼后碼長對應分別為3 072 bit、6 144 bit和1 0240 bit。整個編碼器的結構框圖如圖2所示。
從圖2可以看出,當外部啟動編碼開始信號后,編碼器首先從緩存隨機存儲器(RAM)中讀取一幀共1 024 bit信息位,并按照2 bit位寬進行輸出從而完成符號映射。將映射后的512個信息符號分成前后相等的2包,每包長度為256。計算2包信息符號的初始狀態并分別送入到分量編碼器A1與A2中進行獨立編碼,并由編碼控制模塊控制編碼碼率。以1/3碼率為例,編碼器A1與A2查詢內部編碼映射表與狀態轉移表后輸出碼字長度均為768 bit,并將A1與A2編碼后碼字復接為1 536 bit進行輸出。編碼器B與編碼器A工作流程類似,分為B1與B2分量編碼器,只是在前端加有交織器,其輸出碼字長度也是1 536 bit。最后將編碼器A與編碼器B輸出復接后完成整個編碼流程。

圖2 編碼器的結構框圖
為了盡量減小系統時延與現場可編程門陣列(FPGA)邏輯單元的使用,初始狀態計算模塊、交織器模塊和分量編碼器模塊均采用查表法,其中分量編碼器包括了1/3、1/6、1/10 3個編碼映射表,并統一使用一個狀態轉移表。為了盡量做到流水處理,在進行待編碼數據從緩存RAM讀取的同時就要開始初始狀態計算,當初始狀態計算完畢后分量編碼器A1即可流水進行編碼操作。當分量編碼器A1與A2輸出編碼后數據時,交織器同時開始工作,保證了編碼器B在較短時延后輸出結果。
在Vivado環境下,采用Xilinx公司K7系列的K7325T芯片進行Turbo編碼器設計與硬件實現,其中資源占用情況為:Flip Flops為1 665,LUT Element為640,Block RAM為2,編碼模塊最高時鐘速率為331 MHz。編碼器的時序仿真圖如圖3所示。

圖3 編碼器的時序仿真圖
從圖3可以看出,本設計系統時鐘采用64 MHz,編碼總時延約為4.8 μs,4個分量編碼器的工作時間均為4 μs。當start_coding脈沖產生后編碼器開始工作,并將編碼器工作狀態busy信號置高。經過20.4 μs后編碼器產生一個finish_coding脈沖標志并將busy信號置低,這標志著一次編碼工作結束。
3結束語
本文對一種特殊的Turbo卷積碼編碼方式進行了理論分析與研究,對編碼器中各子模塊的原理與實現方法進行了說明,最后采用Xilinx公司K7系列的K7325T芯片進行了方案驗證,結果表明該編碼器占用邏輯資源較少,在系統時鐘為64 MHz的情況下,時延僅為4.8 μs。
參考文獻
[1]王新梅,肖國鎮.糾錯碼原理與方法[M].修訂版.西安:西安電子科技大學出版社,2001.
[2]周建欽,王喜鳳,謝振飛,等.嵌入法構造線性分組碼咬尾網格[J].電子學報,2009,37(8):1751-1756.
[3]吳偉陵.通向信道編碼定理的Turbo碼及其性能分析[J].電子學報,1998(7):35-40.
[4]Chen Yiqi.Computation of initial state for tail-biting trellis[J].IEEE Transactions on Communications,2004,53(4):1268-1278.
[5]白寶明,馬嘯,王新梅,等.隨機交織器的設計與實現[J].通信學報,2000,21(6):6-11.
[6]史治平,靳蕃.高碼率Turbo碼中確定性交織器的設計[J].西南交通大學學報,2002,37(5):544-547.
[7]宋英杰.Turbo高速編譯碼技術研究[J].現代導航,2015(1):47-52.
Coder Design and Realization of A Low Time Delay Turbo Code
LI Chao
(The 20th Research Institute of CETC,Xi’an 710068,China)
Abstract:This paper introduces the coding principle of a kind of Turbo code,and analyses the structure of tail-biting convolutional code used in helical interleaver and sub-encoder,explains the realization structure of coder,and uses K7325T chip of Xilinx Co. to perform the project validation.The result shows that the coding time delay is only 4.8 μs when the sytem clock is 64 MHz.
Key words:Turbo code;tail-biting convolutional code;low time delay
收稿日期:2015-03-22
DOI:10.16426/j.cnki.jcdzdk.2015.03.031
中圖分類號:TN911.22
文獻標識碼:A
文章編號:CN32-1413(2015)03-0114-03