摘 要: Turbo乘積碼(TPC)是一種性能優秀的糾錯編碼方法,它具有譯碼復雜度低、譯碼延時小等優點,且在低信噪比下可以獲得近似最優的性能。介紹了基于Chase算法的三維TPC軟輸入軟輸出(SISO)迭代譯碼算法,提出了三維TPC譯碼器硬件設計方案并在FPGA芯片上進行了仿真和驗證。測試結果表明,該譯碼器具有較高的糾錯能力,滿足移動通信誤碼率的要求。
關鍵詞: 三維TPC; Chase算法; 軟輸入軟輸出; FPGA實現
中圖分類號: TN919.3?34 文獻標識碼: A 文章編號: 1004?373X(2013)23?0026?04
Design and FPGA realization of 3?D TPC decoder
QU Hai?hui, ZHANG Hao, YANG Ya?guang, LONG Fei
(Institute of Microelectronics of Chinese Academy of Sciences, Beijing 100029, China)
Abstract:Turbo product code(TPC) is a kind of forward error correction code(FEC)with excellent performance. TPC has the advantages of low decoding complexity and short decoding delay, and can achieve near?optimum performance at low signal?to?noise ratio. The soft?in soft?out(SISO)iterative decoding method for three?dimensional(3D)TPC based on Chase algorithm is introduced. The hardware design scheme of 3?D TPC decoder is proposed and verified on FPGA platform. The simulation results show that the decoder has high error?correcting capability and meets the requirement of mobile communication on bit error rate.
Keywords:3?D TPC; Chase algorithm; SISO; FPGA realization
0 引 言
無線通信信道中存在著干擾和衰落,使通信系統的可靠性降低。差錯控制編碼技術用來檢測和糾正因為信道失真引起的信息傳輸錯誤,提高信息傳輸的可靠性。差錯控制編碼的研究主要是希望在低譯碼復雜度的前提下,尋找一種逼近香農極限的編譯碼方法。Turbo乘積碼不僅譯碼復雜度低,譯碼延時小,而且它繼承了Turbo碼在低信噪比下仍然有低誤碼率的優點。因此,Turbo乘積碼己經成為糾錯編碼領域的研究熱點。
乘積碼最早是由Elias于1954年提出的[1],但受到硬件資源的制約其應用一直受限。C. Berrou等學者在1993年提出了基于軟輸入軟輸出( Soft Input Soft Output,SISO) 迭代譯碼算法的Turbo卷積碼(TCC)[2],它可以在數次迭代后性能接近香農極限,因此得到廣泛關注。但是TCC的譯碼復雜度高、譯碼延時大,從而限制了在高速通信系統中的應用。受迭代譯碼思想的啟發,R. Pyndiah等人于1994 年在Chase的基礎上提出了線性分組碼的SISO 算法[3],并通過迭代的方式應用于乘積碼,稱為Turbo乘積碼(TPC)。TPC在譯碼性能上能夠接近TCC,同時算法復雜度較低,譯碼延時小,在采用流水線機制的基礎上,可以實現高速編譯碼器。
在過去的十幾年中,二維Turbo乘積碼(2D?TPC)得到了深入的研究和廣泛的應用。相比于Turbo碼,2D?TPC擁有很多優點:它的“錯誤地板(Error Floor)”可以達到10-7甚至更低量級;由于它采用次最優譯碼算法而且不含交織器,其編譯碼復雜度很低;當碼率很高時,其性能逼近香農極限。三維Turbo乘積碼(3D?TPC)具備二維Turbo乘積碼(2D?TPC)的所有優點,而且在低信噪比環境下比2D?TPC的性能更好[4]。因此,本文介紹了一種基于Chase算法的3D?TPC軟輸入軟輸出迭代譯碼算法并且在FPGA芯片上進行了仿真和驗證。
1 3D?TPC編碼結構
乘積碼是線性分組碼在空間維度上的擴展[5]。下面說明3D?TPC的編碼結構[4],如圖1所示。
假設有三個子碼分別為[C1n1,k1,δ1]、[C2n2,k2,δ2]和[C3n3,k3,δ3],其中[ni,][ki]和[δi]分別代表子碼i(i=1,2,3)的碼長、信息位長和最小漢明距離。
圖1 3D?TPC的編碼結構
通過下述步驟可以得到如圖1所示的3D?TPC碼 [C=C1×C2×C3]:
(1)將長度為[k1×k2×k3]的信息比特填入圖中長、寬、高分別為[k1]、[k2]和[k3]的立方體中;
(2)在z=0的平面上,沿著x軸用[C1]碼對[k2]行信息進行編碼;
(3)在z=0的平面上,沿著[y]軸用[C2]碼對[n1]列進行編碼;
(4)重復步驟(2)~(3)[k3-1]次,分別對[z=1,2,…,][k3-1]平面上的信息比特編碼;
(5)沿著z軸方向用[C3]碼對[k3]個信息比特進行編碼(共進行[n1×n2]次編碼)。
新碼[Cn,k,δ]的參數為[n=n1×n2×n3],[k=k1×k2×k3],[δ=δ1×δ2×δ3],碼率為[R=R1×R2×R3],其中[Ri]是[Ci]的碼率。
從這個編碼過程可以看出,TPC對突發錯誤有效,因為該編碼結構是天然的交織器。
2 3D?TPC譯碼原理
2.1 代數譯碼
代數譯碼也叫硬判決譯碼。以線性分組碼[Cn,k,d]為例,設其校驗矩陣為[H,]經信道傳輸后的接收向量為[R。]代數譯碼器的主要任務就是設法從[R]中得到正確的錯誤圖樣[E],然后計算估值碼字[C]。具體的譯碼步驟如下:
(1)首先根據公式[S=R?HT]計算伴隨式[S];
(2)如果[S=0]則傳輸無錯;如果[S≠0],則有[E≠0],根據伴隨式[S]找出錯誤圖樣[E];
(3)進行糾錯,估計碼字為[C=R⊕E],如果[C=C,]則譯碼正確,否則譯碼錯誤。
2.2 Chase算法譯碼
3D?TPC的譯碼是一個迭代過程,如圖2所示[4,6]。其由三個SISO分量譯碼器組成,每個SISO分量譯碼器采用某種方法計算邊緣信息,從而對先驗信息進行修正,得到后驗信息。在進行迭代譯碼時,設接收向量矩陣為[R],邊緣信息矩陣為[Wm],那么每一次迭代的軟輸入信息矩陣[7?8]可以表示為:
[Rxm=R+αWzm] (1)
[Rym=R+αWxm] (2)
[Rzm=R+αλ1Wxm+λ2Wym] (3)
式中:[m]表示迭代次數,[α,λ]為加權因子,理論上需要根據子碼碼型和迭代次數進行調整,實際應用采用經驗值,性能沒有明顯惡化,但復雜度大為降低。
為了便于硬件實現[9],每個SISO分量譯碼器的邊緣信息的計算采用基于Chase譯碼的方法。
圖2 3D?TPC譯碼器結構
假定3D?TPC的分量碼[C1]和[C2]均為擴展hamming碼,[C3]為奇偶校驗碼,碼字[C]經過BPSK調制后在AWGN信道下傳送,接收向量為[R=r1,r2,r3,…,rn,rn+1]。基于Chase算法的SISO譯碼過程如下[10]:
(1)對接收向量[R]的前[n]個比特進行硬判決,得到硬判決序列[Y=y1,y2,…,yn],判決規則為:
[yi=1,ri>00,ri≤0] (4)
(2)根據接收向量[R]選擇[p]個最不可靠的位置。最不可靠位置的選取原則為:選取[R]中絕對值最小的[p]個元素所在的位置。
(3)產生[2p]個測試圖樣[T=Tjj=1,2,…,2p,]每個測試圖樣的長度均為[n,]并且[T]包含所有上述[p]個位置為0或1、其余位置均為0的二元向量。
(4)確定[2p]個擾動序列:
[Zj=Tj+Y, j=1,2,…,2p] (5)
(5)對于每個擾動序列進行代數譯碼,得到譯碼結果[Cj]。
(6)計算[Cj]與[R]之間的度量即它們之間的歐氏距離:
[mj=-
(7)選擇[mj]中的最小者對應的碼字作為最大似然碼字[D],記相應的度量為[mD],即:
[D=Ck, k=argminmj] (7)
(8)對于每個碼元位置i(i=1,2,3,…,n+1),在[Cj]中搜索碼字[D]的競爭者,即[Cji≠Di]的碼字。若存在多個,則選擇度量值最小的作為競爭者,記[D]的競爭者的度量為[mC](需要說明的是[Cj]中可能不存在[D]的競爭者)。
(9)計算位置i的邊緣信息,方法如下:
① 若存在[D]的競爭者,則:
[wi=2Di-1mC-mD-ri] (8)
② 若不存在[D]的競爭者,則:
[wi=2Di-1β] (9)
式中[β]為預先指定的修正系數。
(10)對先驗信息進行修正:
[ri=ri+αwi] (10)
根據上面的譯碼過程可以得到TPC的核心模塊——Chase算法的譯碼流程,如圖3所示。
圖3 Chase算法譯碼流程
3 譯碼器設計及FPGA實現
在本方案中,[x]和[y]方向上的TPC子碼選用(32,26,6)的擴展漢明碼,[z]方向上的TPC子碼選用(4,3,2)的偶校驗碼,最不可靠位置數[p=4,]迭代次數設為5次,[α=0.5,][β=1],[λ1=λ2=1。]在此條件下,3D?TPC的譯碼性能如圖4所示。從圖4中可以看出,當SNR=1.5 dB,其誤碼率可以達到10-6量級,顯示了3D?TPC卓越的譯碼性能。
圖4 3D?TPC的譯碼性能
三維TPC譯碼器的硬件實現方案如圖5所示。圖5顯示的是1次迭代的過程,如果迭代5次,可以將圖5代表的模塊例化5次。
下面分別說明圖5中各模塊的作用。
FIFO:存放z方向軟輸入信息;
RAM1:存放接收向量[[R];]
RAM2:存放z和x方向軟輸出[[Rz,x(m)],]同時也是x和y方向軟輸入[[Rx,y(m)];]
RAM3:存放x方向邊緣信息[[Wx(m)];]
RAM4:存放y方向軟輸出信息[[Ry(m)];]
ROM1和ROM2:存放漢明碼錯誤圖樣;
加法器:將y方向軟輸出和x方向邊緣信息相加,輸出即為z方向軟輸入;
譯碼控制器:控制三個方向譯碼器的工作時序以及各個存儲器的讀寫過程。
圖5中,軟輸入信息被量化為16 b,先進入FIFO緩存,在譯碼控制器的控制下將RAM1中的接收向量與FIFO中的數據讀出送入z方向譯碼器,譯碼軟輸出信息存放在RAM2中。緊接著,在譯碼控制器的控制下將RAM1中的接收向量與RAM2中的軟信息讀出送入x方向譯碼器,譯碼軟輸出信息存放在RAM2中。y方向的譯碼過程與x方向一樣。最后將y方向軟輸出和x方向邊緣信息分別從RAM4和RAM3中讀出相加,即得z方向軟輸入,既而完成一次迭代譯碼過程。
采用圖5所示的三維TPC譯碼器實現方案在Xilinx Virtex6實驗平臺上作了仿真測試,綜合結果如表1所示,最大工作頻率為160.77 MHz。
表1 三維TPC譯碼器實現方案資源使用量
[FPGA資源\已用\可用\利用率 /%\Number of Slice Registers\57 255\455 040\12\Number of Slice LUTs\41 070\227 520\18\Number of occupied Slices\16 885\56 880\29\Number of bonded IOBs\21\600\3\Number of RAMB18E1/FIFO18E1s\265\832\31\Number of BUFG/BUFGCTRLs\1\32\3\Number of STARTUPs\1\1\100\]
4 結 語
本文基于Xilinx公司的Virtex6系列的xc6vlx365t?1ff1156芯片采用Chase算法實現了三維TPC的迭代譯碼,該TPC的三個分量碼分別為(32,26,6),(32,26,6),(4,3,2)。當系統時鐘為160.77 MHz時,其譯碼信道速率可達37.10 Mb/s。通過修改程序中的參數,本設計可以實現任意碼率、任意碼長的三維TPC譯碼。
參考文獻
[1] ELIAS P. Error?free coding [J]. IEEE Transaction on Information Theory, 1954, IT?4: 29?37.
[2] BERROU C, GLAVIEUX A, THITIMAJSHIMA P. Near Shannon limit error?correcting coding and decoding [C] // Proceedings of IEEE International Conference on Comm. [S.l.]: IEEE, 1993: 1064?1070.
[3] PYNDIAH R. Near optimum decoding of product codes: Block Turbo Codes [J]. IEEE Transaction on Communications. 1998, 46(8): 1003?1010.
[4] WU Xiao?xiao, HE Ye?jun, ZHU Guang?xi. Performance of improved three?dimensional Turbo Product Code decoder [C] // Proceedings of the 2007 IEEE International Conference on Integration Technology. Shenzhen, China: IEEE, 2007: 563?567.
[5] 向冰.基于VHDL的TPC譯碼器設計[J].現代電子技術,2010,33(7):73?76.
[6] 李嘉席,黃進燕,王宏麗.三維TPC編解碼器的仿真研究[J].計算機與網絡,2010(8):34?37.
[7] WEI X F, AKANSU A N. On parallel iterative decoding of product code [C] // IEEE VTC’2001 Fall. New Jersey, USA: IEEE, 2001: 2483?2486.
[8] ARGON C, MCLAUGHLIN S W. A parallel decoder for low latency decoding of Turbo Product Codes [J]. IEEE Communications Letters, 2002, 6(2): 70?72.
[9] 彌憲梅,沈蕾.Turbo乘積碼譯碼的FPGA實現[J].電信技術研究,2008(6):31?35.
[10] 陳煒煒.TPC編譯碼算法研究與實現[D].南京:南京理工大學,2009.
作者簡介:瞿?;?男,1988年出生,湖北廣水人,碩士研究生。研究方向為數字信號處理。