張永超,蔣 博,張志麗
(1.河北遠(yuǎn)東通信系統(tǒng)工程有限公司,河北石家莊050200;2.中國電子科技集團公司第五十四研究所,河北石家莊050081)
法國學(xué)者C.Berrou等人于1993年提出了具有幾乎接近Shannon極限的Turbo碼,其不僅在低信噪比的高噪聲環(huán)境下性能優(yōu)越,而且具有很強的抗衰落和抗干擾能力。3GPP、LTE及Wimax等無線標(biāo)準(zhǔn)組織紛紛將其作為其信道編碼方式。同時,衛(wèi)星移動通信系統(tǒng)由于其受移動性及環(huán)境影響,更需要Turbo碼這類糾錯性能強大的信道編碼來進行保障。
Turbo碼采用交織器將信息序列與交織之后的序列分別經(jīng)過卷積編碼器得到并行級聯(lián)卷積碼,然后采用軟信息反復(fù)迭代譯碼。Turbo碼譯碼算法主要有:逐序列譯碼的軟輸出的維特比譯碼算法(SOVA)和逐比特譯碼的最大后驗概率譯碼算法(MAP)。MAP算法由于其相對于Shannon容量,在Eb/N0小于1 dB時,便可得到可接受的譯碼性能,得到了廣泛應(yīng)用。
Turbo碼在工程實現(xiàn)上一般采用DSP方式或者FPGA方式。本文對該2種實現(xiàn)方式進行了設(shè)計和比較。
Turbo碼編碼器是由2個遞歸系統(tǒng)卷積碼(RSC)通過交織器連接而成。圖1是并行級聯(lián)卷積碼(PCCC)的編碼結(jié)構(gòu)圖。輸入的信息序列,及該序列經(jīng)過交織處理之后的序列分別被送入2個并行級聯(lián)的分量編碼器,這2個分量編碼器結(jié)構(gòu)相同,且工作在相同的時鐘,僅是由于輸入序列不同,所以得到的輸出序列也不同。
假設(shè)輸入信息序列為u=(u1,u2,…uN),交織器對該輸入信息序列進行交織之后的序列為u1=分量編碼器1對原始輸入信息序列進行編碼,編碼后的輸出序列為Xp1,分量編碼器2對交織后的序列進行編碼,編碼后的輸出序列為Xp2。為了得到不同碼率的碼字,可以對Xp1和Xp2進行刪余,刪余之后的序列為Xp,將信息序列和Xp進行復(fù)接即可得到編碼后的輸出。
圖1 Turbo碼編碼器原理圖
Turbo碼的譯碼一般采用軟輸入軟輸出(SISO)的反饋迭代遞推算法。其譯碼模塊一般包含2個相同的、并行連接的RSC分量譯碼器,與編碼器中的2個分量編碼器相對應(yīng),另外還包含一個與編碼器中相同的交織器和一個相應(yīng)的解交織器。其譯碼模塊的構(gòu)成框圖如圖2所示。
圖2 Turbo碼譯碼器原理圖
Turbo碼的譯碼時通過2個分量譯碼器交錯重復(fù)譯碼來完成的。首先將信息序列ys和校驗序列y1p送入到分量譯碼器1,計算出相應(yīng)的軟信息L1。將信息序列和L1經(jīng)過交織器后,連同y2p共同送入分量譯碼器2,計算出相應(yīng)的軟信息L2,將L2進行解交織作為先驗信息送入到分量譯碼器1;這便是一次迭代的過程。2個分量譯碼器之間互相反饋軟信息,進行迭代運算。經(jīng)過一定迭代次數(shù)后,2個分量譯碼器的輸出便趨于一致,對其進行判決,即可得到譯碼結(jié)果。
2個分量譯碼器采用相同的結(jié)構(gòu)。基于最大后驗概率(MAP)算法可以取得最佳的Turbo碼譯碼性能,但是由于其采用了大量的指數(shù)及乘法運算,硬件實現(xiàn)比較困難。Log-MAP是MAP算法在對數(shù)域的簡化,它避免了指數(shù)運算,將乘法運算轉(zhuǎn)換為加法運算。Max-Log-MAP在Log-MAP基礎(chǔ)上,將對數(shù)運算轉(zhuǎn)換為max*運算,大大降低了硬件實現(xiàn)的難度。
Max-log-MAP算法是逐比特最大后驗概率算法。該算法定義的max*運算為:
該算法需要對每個比特計算其前向傳遞概率、分支轉(zhuǎn)移概率和后向傳遞概率。
分支轉(zhuǎn)移概率:
前向傳遞概率:
反向傳遞概率:
本次試驗采用的3GPP標(biāo)準(zhǔn)中的RSC編碼器(其生成方式如式(5)和式(6)所示)。交織器為QPP(二項式置換)交織器,譯碼算法為Max-Log-Map算法。迭代次數(shù)為4次。
驗證設(shè)計所采用的DSP是ADI公司推出的TigerSHARC(TS)系列信號處理器 ADSP-TS201S。它是一種超高性能靜態(tài)超標(biāo)量浮點DSP,可運行主鐘達600 MHz,非常適合于對計算能力和實時性有苛刻要求的大計算量的信號處理任務(wù)。
在驗證過程中,RSC碼的結(jié)構(gòu)可用生成矩陣的方式表示。當(dāng)前編碼器的狀態(tài)為(reg1,reg2,reg3),則其公式如下所示:
編碼是通過建立Trellis轉(zhuǎn)移圖進行實現(xiàn)的。Trellis圖是一個事先生成存儲好的一個狀態(tài)轉(zhuǎn)移表,只要給出編碼器當(dāng)前狀態(tài)以及輸入的信息比特,便可通過查表的方式得到編碼器下一轉(zhuǎn)移狀態(tài)和對應(yīng)的輸出比特。該狀態(tài)轉(zhuǎn)移表可以用C語言的結(jié)構(gòu)體實現(xiàn)。Trellis轉(zhuǎn)移圖可根據(jù)式(5)和式(6)生成。
交織可通過查表完成。QPP-Interleaver函數(shù)用來實現(xiàn)QPP算法生成交織矩陣。QPP交織需要確定二項式置換的2個系數(shù)。該系數(shù)可通過文獻[4]來確定。
Max-Log-Map算法對3種度量值進行歸一化,做了防溢出處理。本實現(xiàn)中,采用浮點實現(xiàn),送入到譯碼模塊的數(shù)是浮點型數(shù)據(jù),精度較高。
驗證設(shè)計所采用的FPGA是ALTERA公司推出的StratixⅡ系列芯片EP2S180F1020I4。該芯片具有多達180 K個等效邏輯單元(LE)和9 Mb的RAM。
在FPGA上對Turbo碼編碼器的設(shè)計關(guān)鍵在于RSC編碼模塊的設(shè)計、交織模塊的設(shè)計、打孔模塊的設(shè)計以及各模塊時序的控制上。
交織矩陣表可作為參數(shù)由MATLAB提供,存儲在ROM表中。打孔根據(jù)所要求的碼率按照“盡量平均”的方式打孔,即刪除的校驗比特在整個校驗序列中最好均勻分布。
編碼部分的FPGA框圖如圖3所示。
圖3 編碼模塊結(jié)構(gòu)框圖
編碼模塊的輸入為外部提供的待編碼的二進制序列x,輸出為編碼之后的碼字序列。輸入數(shù)據(jù)首先經(jīng)過RSC編碼器進行編碼;其次,輸入數(shù)據(jù)經(jīng)過交織得到交織之后的數(shù)據(jù);之后,交織后的數(shù)據(jù)經(jīng)過RSC編碼器編碼;最后,根據(jù)所需的碼率進行打孔。
譯碼部分FPGA框圖如圖4所示。
圖4 譯碼模塊的結(jié)構(gòu)框圖
譯碼模塊的輸入首先經(jīng)過解打孔,分解出信息序列x,校驗序列z1,校驗序列z2。之后,將信息序列進行交織,此處的交織器采用和編碼時完全相同的交織器,得到交織之后的序列x_interleaved。將該4組序列送入到迭代譯碼模塊,進行一定次數(shù)的迭代譯碼。最終迭代的結(jié)果以軟信息形式存儲在存儲器2中,以待最后的判決。
迭代譯碼模塊是2個子譯碼器的相互傳遞軟信息迭代譯碼的綜合。其中,譯碼器來實現(xiàn)Max-Log-Map算法,解交織器是交織器的逆過程。
以Turbo碼(104,220)為例,比較了 DSP實現(xiàn)和FPGA實現(xiàn)的差異。
在DSP上實現(xiàn)時,程序中調(diào)用time.h頭文件,利用clock()函數(shù),計算出了Turbo編譯碼所使用的時鐘周期數(shù),如表1所示。
表1 DSP的處理時間
在FPGA上實現(xiàn)時,用QuartusⅡ編譯綜合后的資源占用情況,如表2所示。
表2 FPGA資源占用情況
通過SignalTapⅡLogic Analyzer捕捉片內(nèi)信號計算出,完成編碼需要429個時鐘周期,完成譯碼模塊需要8 424個時鐘周期。如果FPGA運行在50 MHz時鐘頻率下,則編碼需要約8.6 μs,譯碼需要約 168.5 μs。
在驗證時,DSP芯片工作在600 MHz,而FPGA芯片工作在50 MHz。在FPGA上編譯碼所需要的總時間約是DSP上的十分之一??梢娫谔幚頃r間上FPGA的優(yōu)勢還是顯而易見的。
但是在前期代碼的設(shè)計和編寫周期上,F(xiàn)PGA并不占優(yōu)勢,相反DSP以其代碼編修改靈活,編譯時間快,容易調(diào)試等特點體現(xiàn)出了其優(yōu)勢。
本文既用DSP實現(xiàn)了Turbo碼,又用FGPA實現(xiàn)了Turbo碼,為工程實際應(yīng)用提出了有效的、可靠的參考。通過綜合出的信息可以更準(zhǔn)確、迅速地估計和判斷出系統(tǒng)中用哪種方式進行Turbo編譯碼更有利于實現(xiàn)。
[1] BERROU C,GLAVIEUX A.THITIMAJSHIMA P.Near Shannon Limit Error-correcting Coding and Decoding:Turbo-codes[C]∥ Geneva:Communications,1993.ICC '93 Geneva ,1993,2:1064-1070.
[2] 楊海芬.Turbo碼編譯碼方法研究與實現(xiàn)[D].成都:西南交通大學(xué),2003.
[3] 王新梅,肖國鎮(zhèn).糾錯碼-原理與方法[M].西安:西安電子科技大學(xué)出版社,2001.
[4] Motorola.QPP Interleaver Design for LTE[C]∥3GPP TSG RAN WG1#47bis,R1-070060,Sorrento,Italy,2007:15-19,.
[5] 馮小平,曹向海,鮑丹.TigerSHARC處理器技術(shù)及其應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2010.
[6] WANG Ying,DU Xinjun.LI Hui,et al.Tail-bitting Theory for Turbo Codes[J].IEEE Annual WAMICON’06,2006:1-4.
[7] 羅少蘭.基于C語言的Turbo碼的DSP實現(xiàn)[J].計算機與現(xiàn)代化,2006(6):28-30.