羅顯志,高東博
(河北省衛(wèi)星導(dǎo)航技術(shù)與裝備工程技術(shù)研究中心,河北石家莊050081)
Turbo碼又稱并行級聯(lián)卷積碼(Parallel Concatenated Convolutional Codes,PCCC),1993 年由 Berro[1]等人在ICC國際會議上提出。由于其充分利用了Shannon信道編碼定理的隨機(jī)化編碼條件,因此獲得幾乎接近Shannon理論極限的譯碼性能。Turbo碼在低信噪比應(yīng)用環(huán)境下有著如此優(yōu)異性能,這使得其在衛(wèi)星通信中有著很大的應(yīng)用前景[2,3]。新一代衛(wèi)星導(dǎo)航系統(tǒng)導(dǎo)航信號體制也將Turbo碼作為信道編碼的方案之一。但是,Turbo碼存在著譯碼復(fù)雜度大、譯碼時(shí)延長的問題,這使得實(shí)現(xiàn)和應(yīng)用都受到了一定的局限。本文實(shí)現(xiàn)了一種導(dǎo)航信號用的碼長為588、碼率為1/2的Turbo碼的FPGA編碼器和譯碼器的布局布線、綜合優(yōu)化。實(shí)現(xiàn)結(jié)果表明,編碼器消耗邏輯資源少于1%,存儲器資源少于1%,最高主頻高于200 MHz,在最大譯碼迭代次數(shù)為5時(shí),譯碼器消耗邏輯資源1%,存儲器資源少于1%,最高主頻高于200 MHz。
Turbo優(yōu)異的譯碼性能源自于它獨(dú)特的編碼結(jié)構(gòu)和迭代譯碼的思想。在Turbo碼編碼器中,為了得到更好的編碼性能,一般采用遞歸系統(tǒng)卷積碼(Recursive System Convolutional Codes,RSC)作為分量編碼器。為了避免重復(fù)輸出原比特序列,Turbo碼的子編碼器采用了RSC而不是非系統(tǒng)碼(Nonsystem Convolutional Codes,NSC),這樣對于相同的限制長度,雖然兩者具有相同的最小自由距離,但在較小的信噪比時(shí),前者的性能要略好一些。和傳統(tǒng)的卷積碼相比較,RSC碼最大的特點(diǎn)是它存在著反饋。常用的RSC編碼器一般由2~4級移位寄存器構(gòu)成,如圖1所示。
圖1 下行導(dǎo)航信號編碼器結(jié)構(gòu)
編碼器輸入信息位294 bit,編碼開始后,在294個(gè)連續(xù)的時(shí)鐘內(nèi)輸出588 bit,在隨后的6個(gè)時(shí)鐘內(nèi)輸出12個(gè)卷尾比特,同時(shí)編碼器歸零。編碼過程還包括交織器[4]和刪余操作[5],向上進(jìn)行信息編碼,向下進(jìn)行卷尾編碼。分量碼編碼器內(nèi)包含3個(gè)寄存器,即編碼器記憶深度為3,狀態(tài)數(shù)為8,整體是一個(gè)RSC碼編碼器,其生成多項(xiàng)式矩陣為:
式中,第1項(xiàng)的1表示信息位,即Turbo碼是系統(tǒng)碼;第2項(xiàng)分子多項(xiàng)式即對應(yīng)于前饋多項(xiàng)式,分母對應(yīng)于反饋多項(xiàng)式。Turbo內(nèi)交織器的交織深度為294。刪余表中0表示該比特刪除,1表示該比特輸出。刪余表的信息比特和卷尾比特的刪余規(guī)則如表1所示。
表1 Turbo編碼器頂層端口說明
交織深度為294,輸入分辨率為5 bit,迭代次數(shù)為5,采用Max-Log-MAP算法的譯碼器性能曲線如圖2所示。
圖2 下行導(dǎo)航信號Turbo碼誤碼率曲線
圖2中的曲線表明,在輸入信號信噪比為3.5 dB時(shí),Turbo譯碼器就能將誤碼率從3.38×10-2降低到 1.85 × 10-7。
編碼器的硬件實(shí)現(xiàn)結(jié)構(gòu)如圖3所示。首先地址產(chǎn)生器獲取幀長信息,完成交織地址生成的準(zhǔn)備過程,同時(shí)信息序列被依次寫入雙口RAM,在待一幀數(shù)據(jù)寫完后,地址產(chǎn)生器開始生成順序地址和交織地址,雙口RAM按2個(gè)地址讀取信息序列X和交織后的信息序列X'進(jìn)行RSC編碼,最后經(jīng)刪除與復(fù)接單元輸出。
圖3 Turbo編碼器硬件實(shí)現(xiàn)結(jié)構(gòu)
Turbo編碼器RTL級原理如圖4所示。編碼器包含1個(gè)控制模塊,負(fù)責(zé)控制整體的時(shí)序邏輯;1個(gè)交織ROM,用于存儲交織圖樣;1個(gè)消息RAM,用于緩存輸入消息段數(shù)據(jù)幀;2個(gè)RSC編碼器,進(jìn)行1/2碼率的Turbo編碼,對2個(gè)RSC輸出的碼字中校驗(yàn)位進(jìn)行刪余,得到碼率1/2的Turbo碼,并進(jìn)行適當(dāng)?shù)目刂?,輸?2個(gè)卷尾比特,完成編碼。
圖4 Turbo編碼器RTL級原理
Turbo編碼器在ModelSim下的仿真波形如圖5所示。圖5中,clk為時(shí)鐘信號,rst為復(fù)位信號,din為編碼輸入數(shù)據(jù),ipt_rqs為編碼數(shù)據(jù)輸入幀頭,ipt_vld為編碼數(shù)據(jù)輸入有效標(biāo)志,opt_vld編碼輸出有效標(biāo)志,code為編碼輸出。具體細(xì)節(jié)這里不再給出,經(jīng)過局部放大,可以驗(yàn)證,編碼無誤。
編碼器消耗寄存器數(shù)量為44,RAM資源均為3 234 bit,在Altera EP4SE360F35I4芯片上實(shí)現(xiàn)編碼器消耗邏輯資源少于1%,內(nèi)存資源少于1%,最高主頻高于 257.56 MHz。
圖5 Turbo編碼器ModelSim仿真波形
目前,Turbo碼譯碼算法主要分為兩大類:由Viterbi演化而來的軟輸出維特比算法(Soft Output Viterbi Algorithm,SOVA)[6]算法 和性 能優(yōu) 異 的BCJR算法[7]。SOVA是一種最大似然算法(ML),具有最低的譯碼復(fù)雜度,但是性能最差,并且譯碼性能不夠穩(wěn)定。BCJR則是最大后驗(yàn)概率算法(MAP)。BCJR算法具有最優(yōu)的譯碼性能,但是由于計(jì)算中存在著大量的乘法和指數(shù)運(yùn)算,譯碼復(fù)雜度高,不便于硬件實(shí)現(xiàn),通常作為理論分析的參考。這2類算法在研究發(fā)展中自身也演變出很多算法,SOVA類的有傳統(tǒng)SOVA、滑動窗SOVA和雙向SOVA 等[6],MAP 類的有 MAP、Log-MAP 和 Max-Log-MAP[8-10]。Log-MAP 算法和 Max-Log-MAP 算法都是由MAP算法簡化而來,通過將原來的運(yùn)算轉(zhuǎn)化到對數(shù)域進(jìn)行,從而將乘法運(yùn)算變成了加法運(yùn)算,避免了指數(shù)運(yùn)算,大大降低了譯碼復(fù)雜度。就譯碼性能而言,Log-MAP算法僅僅次于MAP算法,Max-Log-MAP算法略微次于Log-MAP算法。就譯碼復(fù)雜度而言,Max-Log-MAP算法的譯碼復(fù)雜度低于 Log-MAP算法,更易于硬件實(shí)現(xiàn),特別是 FPGA實(shí)現(xiàn)[11,12]。
這里不再詳細(xì)給出Turbo譯碼算法的推導(dǎo)過程,僅給出Turbo碼譯碼Max-Log-MAP算法的FPGA實(shí)現(xiàn)方案。與編碼器相對應(yīng)的基于FPGA的Turbo譯碼器結(jié)構(gòu)如圖6所示,譯碼器1和譯碼器2分別與分量編碼器1和分量編碼器2相對應(yīng),交織器和解交織器與編碼器中的交織器交織規(guī)則一致。譯碼器1軟判決輸出經(jīng)交織后作為譯碼器2的先驗(yàn)信息Λ2( dk),與y2k和y1k一起進(jìn)行譯碼;譯碼器2軟判決輸出經(jīng)解交織后又反饋回譯碼器1作為其先驗(yàn)信息Λ1( dk),參與下一輪迭代,這樣構(gòu)成了一個(gè)循環(huán)迭代譯碼結(jié)構(gòu)。
圖6 Turbo譯碼器硬件實(shí)現(xiàn)結(jié)構(gòu)
但是考慮到具體FPGA實(shí)現(xiàn)時(shí),如果將一個(gè)完整的碼字存入RAM計(jì)算α、β和γ,需要的RAM資源將隨著碼長顯著增長,從而在實(shí)際實(shí)現(xiàn)時(shí)考慮滑窗處理?;八惴ㄊ疽馊鐖D7所示。圖7中,dummyBeta表示Beta的訓(xùn)練過程?;八惴ㄒ笥?jì)算dummyBeta是因?yàn)閷?shù)據(jù)分為多個(gè)窗口會打破傳統(tǒng)譯碼器后向分支量度計(jì)算的連貫性,使得窗口初始值的設(shè)定成為困難,如果想減少由于初始化造成的性能降低,則必須對后向分支量度進(jìn)行訓(xùn)練。這里為了減少后期對數(shù)據(jù)翻轉(zhuǎn)的操作要求,采用在每個(gè)窗口內(nèi)逆序輸入訓(xùn)練所需數(shù)據(jù)?;八惴ǖ拿總€(gè)操作窗口內(nèi),順序輸入數(shù)據(jù)用于Alpha計(jì)算的同時(shí),逆序輸入數(shù)據(jù)用于dummyBeta的計(jì)算來訓(xùn)練Beta,與此同時(shí),Beta從dummyBeta的上一個(gè)操作窗口獲得訓(xùn)練后的初始化值,計(jì)算后向分支度量,并計(jì)算LLR和Le,直到最后一個(gè)窗口,Beta的初始化值將來自尾比特的初始化過程tbInit。
圖7 滑窗算法示意
Turbo譯碼器RTL級原理如圖8所示。Turbo譯碼器包含1個(gè)譯碼器控制模塊,用于譯碼器總體的時(shí)序邏輯控制;1個(gè)軟輸入軟輸出譯碼器(Soft Input Soft Output,SISO),用于 Max-Log-MAP 譯碼算法的計(jì)算和譯碼判決輸出。譯碼器的量化采用分集量化處理,迭代次數(shù)為5,外層信道信息LLR量化為5 bit,其中1位表示符號位,2位表示整數(shù)位,2位表示小數(shù)位;中層先驗(yàn)信息(外信息)LLR量化為7 bit,其中1位表示符號位,4位表示整數(shù)位,2位表示小數(shù)位;內(nèi)層狀態(tài)量度信息量化為10 bit,其中1位表示符號位,6位表示整數(shù)位,3位表示小數(shù)位。具體的參數(shù)確定基于前期的量化仿真結(jié)果。滑窗的窗口長度選擇為21,故而碼長294×2+12=600的碼字,每個(gè)分量碼在卷尾初始化后的294個(gè)數(shù)據(jù)深度中,可以分為294/21=14個(gè)窗口。
圖8 Turbo譯碼器RTL級原理
Turbo譯碼器在ModelSim下的仿真波形如圖9所示。圖中,clk為時(shí)鐘信號;rst為復(fù)位信號;data為譯碼輸入數(shù)據(jù);rding為譯碼輸入數(shù)據(jù)有效標(biāo)志;opting為譯碼輸出有效標(biāo)志;infodec譯碼輸出信號。具體細(xì)節(jié)這里不再給出,經(jīng)過局部放大,可以驗(yàn)證,譯碼無誤。
圖9 Turbo譯碼器ModelSim仿真波形
該譯碼器消耗寄存器數(shù)量為991,RAM資源均為23 832 bit,在Altera EP4SE360F35I4芯片上實(shí)現(xiàn)編碼器消耗邏輯資源少于1%,內(nèi)存資源少于1%,最高主頻達(dá)到217.89 MHz。
本文給出了一種應(yīng)用于衛(wèi)星導(dǎo)航系統(tǒng)的碼率為1/2、交織深度為294、采用 RSC作為分量編碼器Turbo編譯碼FPGA實(shí)現(xiàn)方案,采用了優(yōu)化的編譯碼算法,降低了譯碼復(fù)雜度和譯碼延時(shí),具有較高的實(shí)用價(jià)值。在Altera EP4SE360F35I4芯片內(nèi),編碼器和譯碼器消耗邏輯資源少于1%,內(nèi)存資源少于1%,最高主頻高于200 MHz。
[1] BERROU C,GLAVIEUX A,THITIMAJSHIMA P.Near Shannon Limit Error-correcting Coding and Decoding:Turbo Codes[C]∥ ICC’93,Geneva,Switzerland,1993:1 064-1 070.
[2] 殷云志,韓明鑰,張玉琴.Turbo乘積碼在衰落信道中的應(yīng)用[J].無線電通信技術(shù),2014,40(3):72 -75.
[3] 馮 戰(zhàn),侯孝民,鄭海昕,等.基于CCSDS標(biāo)準(zhǔn)的Turbo碼譯碼性能仿真研究[J].無線電工程,2014,44(4):7-9,66.
[4] 楊 亮,胡家佺,馬騰飛.Turbo碼隨機(jī)性交織器設(shè)計(jì)[J].無線電工程,2011,41(6):36 -39.
[5] 吳 丹,唐秋菊,梁保衛(wèi).刪余Turbo乘積碼的編譯碼算法分析[J].無線電工程,2011,41(12):26 -28.
[6] CHAIKALIS C,NORAS J M.Implementation of an Improved Reconfigurable SOVA/Log-MAP Turbo Decoder[C]∥ 3GPP.3G Mobile Communication Technologies,Third International Conference,2002:146 -150.
[7] BAHL L R,COKE J,JELINEK F,et al.Optimal Decoding of Linear Codes for Minimizing Symbol Error Rate[J].IEEE Trans.Inform Theory,1974:284 -287.
[8] SONG H,VIJAYA KUMAR B V K,KURTAS E.Effect of Transition Noise on Turbo Decoding for Optical Data Storage[C]∥ SPIE Int.Symp.Optical Memory and Optical Data Storage,2000:283 -288.
[9] VOGT,KOORA J,F(xiàn)INGEA K,et al.Comparison of Different Turbo Decoder Realizations for IMT-2000[C]∥IEEE GLOBECOM 99,Rio de Janeiro,1999:2 706 -2 708.
[10] AHMED I,ARSLAN T,BALOCH S.Improved Memory Strategy for Log-map Turbo Decoders[C]∥ SOC Conference,2005:103 -104.
[11]張永超,蔣 博,張志麗.Turbo碼的 DSP和 FPGA實(shí)現(xiàn)之比較[J].無線電通信技術(shù),2013,39(2):83 -86.
[12]羅少蘭.基于C語言的Turbo碼的DSP實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2006,130(6):28-31.