《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > LTE系統(tǒng)中Turbo編碼的研究與DSP實(shí)現(xiàn)
LTE系統(tǒng)中Turbo編碼的研究與DSP實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2011年第8期
李小文,許 虎
(重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶400065)
摘要: 通過對常用Turbo編碼原理的研究分析,提出了一種簡單有效的Turbo編碼實(shí)現(xiàn)方案,該方案已經(jīng)在TMS320C64× DSP中實(shí)現(xiàn)。將Turbo編碼程序在CCS3.3中運(yùn)行,驗(yàn)證了方案的可行性、高效性。該方案已應(yīng)用于LTE-TDD無線綜合測試儀表的開發(fā)中。
中圖分類號: TN929.5
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2011)08-0059-04
Research and DSP realization of Turbo coding in LTE system
Li Xiaowen,Xu Hu
School of Communication and Information Engineering, Chongqing University of Posts and Telecommunications, Chongqing 400065,China
Abstract: Research and analysis on the commonly used Turbo coding principles,a simple and effect implementation appoach is proposed in this paper and implemented in the TMS320C64x DSP. The running results of the Turbo code program in CCS3.3 verify that the program is feasible and effective. The program has been applied to the development of LTE-TDD wireless integrated test instrument.
Key words : LTE;Turbo;circular convolution code;look-up-table;DSP realization


    信道編碼是消除或降低信息傳輸錯(cuò)誤概率的有效手段之一。根據(jù)Shannon有噪信道編碼定理,在信道傳輸速率R不超過信道容量C的前提下,只有在碼組長度無限的碼集合中隨機(jī)地選擇編碼碼字并且在接收端采用最大似然譯碼算法時(shí),才能使誤碼率接近為零。Turbo編碼[1]巧妙地將卷積碼和隨機(jī)交織器結(jié)合在一起,獲得了接近Shannon理論極限的譯碼性能。
    Turbo碼又稱并行級聯(lián)卷積碼PCCC(Parallel Concatenated Convolutional Code),它將卷積碼和隨機(jī)交織器結(jié)合,實(shí)現(xiàn)了隨機(jī)編碼的思想,在實(shí)現(xiàn)隨機(jī)編碼思想的同時(shí),通過交織器實(shí)現(xiàn)了由短碼構(gòu)造長碼的方法。Turbo碼由分量碼經(jīng)由交織器級聯(lián)而成。分量碼和交織器設(shè)計(jì)的好壞是決定Turbo碼性能的關(guān)鍵因素。Turbo碼的提出,不僅提供了一個(gè)性能優(yōu)越的編碼方法,還更新了編碼理論研究中的一些概念和方法。由于Turbo碼具有接近Shannon理論極限的性能[2],尤其是低信噪比下的優(yōu)異性能,使Turbo碼成為第三代移動(dòng)通信高質(zhì)量、高速率信道中的首選編碼方法。
1 LTE系統(tǒng)中的Turbo編碼
    LTE作為準(zhǔn)4 G技術(shù),以正交頻分復(fù)用OFDM和多輸入多輸出MIMO技術(shù)為基礎(chǔ),下行采用正交頻分多址(OFDM)技術(shù),上行采用單載波頻分多址(SC-FDMA)技術(shù),在20 MHz頻譜帶寬下能夠提供下行100 Mb/s與上行50 Mb/s的峰值速率。
    在LTE系統(tǒng)中,Turbo編碼主要應(yīng)用于上行共享信道、下行共享信道、尋呼信道和多播信道的信道編碼[3]處理。由MAC層傳來的數(shù)據(jù)和控制信息比特流經(jīng)過添加CRC以及碼塊分割后進(jìn)入編碼單元,編碼完成后進(jìn)行速率匹配[3-4]。
 0。為了讓編碼器從0狀態(tài)開始且編碼之后回到0狀態(tài),編碼后的輸出比特?cái)?shù)為D=K+4,最后的4個(gè)比特被稱為柵格停止尾比特。Turbo編碼器結(jié)構(gòu)如圖1 所示。

2 Turbo編碼算法分析
    Turbo編碼原理相對簡單,主要由兩個(gè)子編碼器和內(nèi)交織器組成。每次輸入一個(gè)碼塊數(shù)據(jù)流,兩個(gè)子編碼器結(jié)構(gòu)一樣,可以并行處理,其中輸入在進(jìn)入第二個(gè)編碼器之前要先進(jìn)入一個(gè)交織單元,經(jīng)交織后作為輸入比特序列,然后進(jìn)入第二個(gè)編碼器處理[2]。輸出三路數(shù)據(jù),分別為信息比特流、校驗(yàn)比特流1、校驗(yàn)比特流2。本文提出采用查表法來實(shí)現(xiàn)Turbo編碼的算法。
    具體算法描述如下:
    (1)碼塊分割完后可能出現(xiàn)不同碼塊大小(K+,K-),算法采用每個(gè)碼塊單獨(dú)處理。所以需要定義一個(gè)標(biāo)識來查表當(dāng)前碼塊需要交織時(shí)的參數(shù)。
    (2)Turbo編碼時(shí)有反饋的影響,即每個(gè)輸入比特與反饋值做了“異或”后才能作為移位寄存器的下一個(gè)狀態(tài),故在實(shí)際DSP實(shí)現(xiàn)過程中使用了逐位比特處理的方式。
    (3)由于Turbo編碼器上下兩部分處理方法一樣,所以在處理上半部分編碼器時(shí)同時(shí)并行處理下半部分,而下半部分輸入是經(jīng)過交織之后的輸出比特序列。
    (4)根據(jù)不同的f1和f2可以有不同的結(jié)果。f1和f2一共有188種配對,規(guī)律性低,本文只能采用一比特一比特按照公式計(jì)算出對應(yīng)位置,然后進(jìn)行交織。
    (5)采用查表的方式,每輸入一個(gè)比特加上現(xiàn)在寄存器里面的3個(gè)比特作為一個(gè)狀態(tài)(一共4個(gè)比特16種狀態(tài),輸入比特作為最低位),可以查出一個(gè)輸出比特和下一個(gè)寄存器狀態(tài)。
    (6)在尾比特的處理上,每一路的最后3位尾比特與輸入無關(guān),只與現(xiàn)在寄存器的狀態(tài)有關(guān)(3 bit 一共8種狀態(tài))。本文全部列出了8種狀態(tài)下可能出現(xiàn)的結(jié)果。在DSP實(shí)現(xiàn)功能時(shí)直接判斷現(xiàn)在的寄存器處于哪種狀態(tài),然后利用查表可以得出3個(gè)尾比特。
    (7)最后對四路輸出的尾比特(3×4=12 bit)按標(biāo)準(zhǔn)做一個(gè)賦值處理,然后移位接到之前的比特序列中去就可以得到最終的三路輸出比特序列。
3 Turbo編碼算法的DSP實(shí)現(xiàn)
3.1 硬件

    TMS320C6000系列DSP是TI公司推向市場的高性能DSP,綜合了目前性價(jià)比高、功耗低等優(yōu)點(diǎn)。TMS320C64系列在TMS320C6000×DSP芯片中處于領(lǐng)先水平,它不但提高了時(shí)鐘頻率,而且在體系結(jié)構(gòu)上采用了VelociTI 甚長指令集VLIW(Very Long Instruction Word)結(jié)構(gòu)[5],芯片內(nèi)有8個(gè)獨(dú)立功能單元的內(nèi)核,每個(gè)周期可以并行執(zhí)行8條32 bit指令,最大峰值速度為4 800 MIPS,2組共64個(gè)32 bit通用寄存器,32 bit尋址范圍,支持8/16/32/40 bit的數(shù)據(jù)訪問,芯片內(nèi)集成大容量SRAM,最大可達(dá)8 Mbit。由于其出色的運(yùn)算能力、高效的指令集、大范圍的尋址能力,使其特別適用于無線基站、測試儀表等對運(yùn)算能力和存儲量要求高的應(yīng)用場合。

 


3.2 Turbo編碼的DSP實(shí)現(xiàn)
    由于碼塊分割完之后可能出現(xiàn)不同碼塊大?。↘+,K-),所以本模塊按每個(gè)碼塊單獨(dú)處理。Turbo編碼是作為一個(gè)子函數(shù)模塊,因此,本方案定義輸入輸出變量及其調(diào)用格式如表1所示。

    調(diào)用格式:Turbo_Code(int*,int,int,char*,int*),其中int分別表示TxSegOutTurboIn為輸入序列的首地址、TxTurboCodeBitLen;int*分別表示TxSegOutTurboInOffset、TxTurboInterMatrixRows;char*表示TxTurboDataOut為輸出序列首地址。
    具體實(shí)現(xiàn)流程描述如下:Turbo編碼時(shí)有反饋的影響,即每個(gè)輸入比特與反饋值做了“異或”后才能作為移位寄存器的下一個(gè)狀態(tài),故在實(shí)際DSP實(shí)現(xiàn)過程中使用了逐位比特處理的方式。C語言編寫主函數(shù)main( ),使用匯編編寫Turbo編碼的實(shí)現(xiàn)函數(shù)。因?yàn)镈SP C6455可以直接存取處理32bit,在具體實(shí)現(xiàn)中,輸入編碼比特序列、輸入序列比特長度K、用于計(jì)算交織查表的指數(shù)可以作為函數(shù)的輸入。在內(nèi)存中定義了三段長度為碼塊K+4的Xk、Zk、Zkp作為暫時(shí)存放輸出序列的內(nèi)存空間,并且建立了4張查找表,分別為:(1)交織表格TxInterleaver,交織表格TxInterleaver占用內(nèi)存空間為188 B,每個(gè)字有32 bit,碼塊長度K、f1、f2各自所占比特為13、9、10;(2)寄存器狀態(tài)和輸出比特表格turbo_coding,一共4個(gè)比特16種狀態(tài),占用16個(gè)字;(3)尾比特狀態(tài)和輸出比特表格1turbo_Xk_tail,一共3個(gè)比特8種狀態(tài),占用4個(gè)字;(4)尾比特狀態(tài)和輸出比特表格2turbo_Zk_tail,一共3個(gè)比特8種狀態(tài),占用4個(gè)字。
    定義一個(gè)標(biāo)識來查表當(dāng)前碼塊需要交織時(shí)的參數(shù),這樣不僅減少任務(wù)繁瑣,而且減少了系統(tǒng)的代碼量,更給代碼測試和維護(hù)降低了難度。在匯編函數(shù)中,利用32作為內(nèi)循環(huán)次數(shù),可以處理完一字(32 bit)就存放在寄存器中。外循環(huán)次數(shù)使用輸入比特所占的雙字個(gè)數(shù)N-1來控制,而可能出現(xiàn)的多出的比特?cái)?shù)則需要另作一次(N-32×N)的循環(huán),得到編碼結(jié)果。
    外循環(huán)中,在每次內(nèi)循環(huán)之前從輸入比特序列中取出32 bit輸入比特放入一個(gè)寄存器作為一個(gè)內(nèi)循環(huán)的輸入,這次內(nèi)循環(huán)結(jié)束后,取出下一個(gè)32 bit輸入比特更新這個(gè)寄存器,為下一次內(nèi)循環(huán)做準(zhǔn)備。每次內(nèi)循環(huán)結(jié)束之后,將編碼好的32 bit做好存放處理,同時(shí)控制外循環(huán)次數(shù)的寄存器減1,直到循環(huán)結(jié)束。
    內(nèi)循環(huán)中,編碼過程采用查表的方式,每輸入一個(gè)比特加上現(xiàn)在寄存器里面的3個(gè)比特作為一個(gè)狀態(tài),一共4個(gè)比特16種狀態(tài),輸入比特作為最低位,可以查出一個(gè)輸出比特和下一個(gè)寄存器狀態(tài)。需要注意的是,考慮到下面的速率匹配中需要加入null bit而1 bit的信息不能表示出null bit,所以輸出1 bit的信息就用8 bit的內(nèi)存空間來存放??紤]到Turbo編碼器上下兩部分處理方法一樣,所以在處理上半部分編碼器時(shí)同時(shí)并行處理下半部分,而下半部分輸入是經(jīng)過交織之后的輸出比特序列。圖2給出了Turbo編碼實(shí)現(xiàn)編碼流程圖。

    值得注意的是,交織器是Turbo編碼的重要部分,Turbo編碼交織器采用二次多項(xiàng)式(QPP)交織器,其位置對應(yīng)關(guān)系如下:π(x)=(f1x+f2x)  mod  K

所以可以得出:在DSP中實(shí)現(xiàn)時(shí)可以不使用乘法和除法取得對應(yīng)位置,代替使用比較、加法和移位來獲得相應(yīng)的對應(yīng)位置。
    具體做法如下:
    (1)根據(jù)不同的f1、f2可以有不同的結(jié)果,f1、f2一共有188種配對,規(guī)律性低,本文只能采用一比特一比特按照公式計(jì)算出對應(yīng)位置,然后進(jìn)行交織。
    (2)輸入比特序列作為交織塊的輸入,其長度K用來控制交織的循環(huán)次數(shù)。因?yàn)樵贒SP C6455中寄存器的大小為32 bit,這里32也作為一個(gè)循環(huán)次數(shù),控制以整雙字處理完之后的存取。
    (3)進(jìn)入循環(huán)之后,首先判斷&pi;(x)和g(x)的值是否大于或等于輸入比特序列長度K,如果&ge;K,應(yīng)該減去K之后再次判斷,直到<K之后,進(jìn)入下一階段。因?yàn)樵贒SP中存取比特都只能在32 bit之內(nèi)處理,所以還要判斷&pi;(x)的值是否小于32,如果不是,則需要減去32,同時(shí)在控制雙字偏移的寄存器需要加1,使取值指針指向下一個(gè)雙字,以達(dá)到從下一個(gè)雙字中取值的目的。此時(shí)需要繼續(xù)做判斷直到&pi;(x)<32為止。
    (4)得到了控制雙字偏移的值和比特偏移的值&pi;(x)之后,便可以從內(nèi)存中輸入的比特序列中取出一個(gè)比特作為交織之后的輸出比特。通過&ldquo;異或&rdquo;移位,完成32次循環(huán)之后,寄存器32 bit可以剛好存放下32 bit交織輸出比特,然后存放進(jìn)內(nèi)存。注意每做一次交織比特,控制輸入總長度的寄存器應(yīng)該減1直到為0時(shí),跳出交織循環(huán),存放輸出數(shù)據(jù),完成交織。
4 性能分析與總結(jié)
    在DSP軟件實(shí)現(xiàn)中,通過指令并行,盡量優(yōu)化程序循環(huán)體,減少或消除程序中的&rsquo;NOP&rsquo;指令[6]。對于不同大小的碼塊長度,根據(jù)所用的環(huán)境,通過程序仿真運(yùn)行,可以得到統(tǒng)計(jì)結(jié)果如表2所示。

    表2數(shù)據(jù)長度僅為個(gè)別舉例,但不失一般性。從表中可以看出,雖然查表法的運(yùn)算量較大,但是當(dāng)運(yùn)用TMS320C64&times; DSP芯片實(shí)現(xiàn)時(shí),由于處理器的超高主頻一般為1 GHz,一個(gè)指令周期耗時(shí)為1 ns,其運(yùn)算速率也非???,完全可以忽略它的計(jì)算量。因此,本實(shí)現(xiàn)方案采用查表法不僅簡化了程序?qū)崿F(xiàn)方法,還減少了模塊程序代碼,節(jié)約了系統(tǒng)存儲空間。
    本文從理論分析出發(fā),根據(jù)TD-LTE系統(tǒng)特性,提出了一種簡單有效的Turbo編碼實(shí)現(xiàn)算法,詳細(xì)介紹了該算法在DSP的實(shí)現(xiàn)方法,并在TMS320C64&times;芯片上加以實(shí)現(xiàn)。程序運(yùn)行結(jié)果表明,該算法能夠滿足TD-LTE系統(tǒng)的需求,具有可行性和高效性,并已應(yīng)用于LTE-TDD無線綜合測試儀表的開發(fā)中。
參考文獻(xiàn)
[1] 王新梅.糾錯(cuò)碼原理與方法[M].西安:西安電子科技大學(xué)出版社,2003.
[2] BERROU C,GLAVIEUX A,PUNYA T.Near shannon limit  error-correcting coding and decoding:TurboCodes[C].IEEE  International Conference Communications,1993.
[3] 3GPP TS 36.212 v9.0.0 evolved universal terrestrial radio access(E-UTRA) multiplexing and channel coding (Release 9)[S].2009-12.
[4] JIM Z.Overview of the 3GPP long term evolution physical  layer[J].2007(7).
[5] Texas Instruments Incorporated.TMS320C64x/C64x+DSP CPU and instruction set referenceguide[EB/OL].Http://www.ti.com.cn,2008.
[6] Texas Instruments Incorporated.TMS320C6000系列DSP編程工具與指南[M].田黎育,何佩琨,朱夢宇,譯.北京:清華大學(xué)出版社,2006:32-50.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。