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

2 Turbo編碼算法分析
Turbo編碼原理相對簡(jiǎn)單,主要由兩個(gè)子編碼器和內交織器組成。每次輸入一個(gè)碼塊數據流,兩個(gè)子編碼器結構一樣,可以并行處理,其中輸入在進(jìn)入第二個(gè)編碼器之前要先進(jìn)入一個(gè)交織單元,經(jīng)交織后作為輸入比特序列,然后進(jìn)入第二個(gè)編碼器處理[2]。輸出三路數據,分別為信息比特流、校驗比特流1、校驗比特流2。本文提出采用查表法來(lái)實(shí)現Turbo編碼的算法。
具體算法描述如下:
(1)碼塊分割完后可能出現不同碼塊大小(K+,K-),算法采用每個(gè)碼塊單獨處理。所以需要定義一個(gè)標識來(lái)查表當前碼塊需要交織時(shí)的參數。
(2)Turbo編碼時(shí)有反饋的影響,即每個(gè)輸入比特與反饋值做了“異或”后才能作為移位寄存器的下一個(gè)狀態(tài),故在實(shí)際DSP實(shí)現過(guò)程中使用了逐位比特處理的方式。
(3)由于Turbo編碼器上下兩部分處理方法一樣,所以在處理上半部分編碼器時(shí)同時(shí)并行處理下半部分,而下半部分輸入是經(jīng)過(guò)交織之后的輸出比特序列。
(4)根據不同的f1和f2可以有不同的結果。f1和f2一共有188種配對,規律性低,本文只能采用一比特一比特按照公式計算出對應位置,然后進(jìn)行交織。
(5)采用查表的方式,每輸入一個(gè)比特加上現在寄存器里面的3個(gè)比特作為一個(gè)狀態(tài)(一共4個(gè)比特16種狀態(tài),輸入比特作為最低位),可以查出一個(gè)輸出比特和下一個(gè)寄存器狀態(tài)。
(6)在尾比特的處理上,每一路的最后3位尾比特與輸入無(wú)關(guān),只與現在寄存器的狀態(tài)有關(guān)(3 bit 一共8種狀態(tài))。本文全部列出了8種狀態(tài)下可能出現的結果。在DSP實(shí)現功能時(shí)直接判斷現在的寄存器處于哪種狀態(tài),然后利用查表可以得出3個(gè)尾比特。
(7)最后對四路輸出的尾比特(3×4=12 bit)按標準做一個(gè)賦值處理,然后移位接到之前的比特序列中去就可以得到最終的三路輸出比特序列。
3 Turbo編碼算法的DSP實(shí)現
3.1 硬件
TMS320C6000系列DSP是TI公司推向市場(chǎng)的高性能DSP,綜合了目前性?xún)r(jià)比高、功耗低等優(yōu)點(diǎn)。TMS320C64系列在TMS320C6000×DSP芯片中處于領(lǐng)先水平,它不但提高了時(shí)鐘頻率,而且在體系結構上采用了VelociTI 甚長(cháng)指令集VLIW(Very Long Instruction Word)結構[5],芯片內有8個(gè)獨立功能單元的內核,每個(gè)周期可以并行執行8條32 bit指令,最大峰值速度為4 800 MIPS,2組共64個(gè)32 bit通用寄存器,32 bit尋址范圍,支持8/16/32/40 bit的數據訪(fǎng)問(wèn),芯片內集成大容量SRAM,最大可達8 Mbit。由于其出色的運算能力、高效的指令集、大范圍的尋址能力,使其特別適用于無(wú)線(xiàn)基站、測試儀表等對運算能力和存儲量要求高的應用場(chǎng)合。
3.2 Turbo編碼的DSP實(shí)現
由于碼塊分割完之后可能出現不同碼塊大?。↘+,K-),所以本模塊按每個(gè)碼塊單獨處理。Turbo編碼是作為一個(gè)子函數模塊,因此,本方案定義輸入輸出變量及其調用格式如表1所示。
調用格式:Turbo_Code(int*,int,int,char*,int*),其中int分別表示TxSegOutTurboIn為輸入序列的首地址、TxTurboCodeBitLen;int*分別表示TxSegOutTurboInOffset、TxTurboInterMatrixRows;char*表示TxTurboDataOut為輸出序列首地址。
具體實(shí)現流程描述如下:Turbo編碼時(shí)有反饋的影響,即每個(gè)輸入比特與反饋值做了“異或”后才能作為移位寄存器的下一個(gè)狀態(tài),故在實(shí)際DSP實(shí)現過(guò)程中使用了逐位比特處理的方式。C語(yǔ)言編寫(xiě)主函數main( ),使用匯編編寫(xiě)Turbo編碼的實(shí)現函數。因為DSP C6455可以直接存取處理32bit,在具體實(shí)現中,輸入編碼比特序列、輸入序列比特長(cháng)度K、用于計算交織查表的指數可以作為函數的輸入。在內存中定義了三段長(cháng)度為碼塊K+4的Xk、Zk、Zkp作為暫時(shí)存放輸出序列的內存空間,并且建立了4張查找表,分別為:(1)交織表格TxInterleaver,交織表格TxInterleaver占用內存空間為188 B,每個(gè)字有32 bit,碼塊長(cháng)度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è)標識來(lái)查表當前碼塊需要交織時(shí)的參數,這樣不僅減少任務(wù)繁瑣,而且減少了系統的代碼量,更給代碼測試和維護降低了難度。在匯編函數中,利用32作為內循環(huán)次數,可以處理完一字(32 bit)就存放在寄存器中。外循環(huán)次數使用輸入比特所占的雙字個(gè)數N-1來(lái)控制,而可能出現的多出的比特數則需要另作一次(N-32×N)的循環(huán),得到編碼結果。
外循環(huán)中,在每次內循環(huán)之前從輸入比特序列中取出32 bit輸入比特放入一個(gè)寄存器作為一個(gè)內循環(huán)的輸入,這次內循環(huán)結束后,取出下一個(gè)32 bit輸入比特更新這個(gè)寄存器,為下一次內循環(huán)做準備。每次內循環(huán)結束之后,將編碼好的32 bit做好存放處理,同時(shí)控制外循環(huán)次數的寄存器減1,直到循環(huán)結束。
內循環(huán)中,編碼過(guò)程采用查表的方式,每輸入一個(gè)比特加上現在寄存器里面的3個(gè)比特作為一個(gè)狀態(tài),一共4個(gè)比特16種狀態(tài),輸入比特作為最低位,可以查出一個(gè)輸出比特和下一個(gè)寄存器狀態(tài)。需要注意的是,考慮到下面的速率匹配中需要加入null bit而1 bit的信息不能表示出null bit,所以輸出1 bit的信息就用8 bit的內存空間來(lái)存放??紤]到Turbo編碼器上下兩部分處理方法一樣,所以在處理上半部分編碼器時(shí)同時(shí)并行處理下半部分,而下半部分輸入是經(jīng)過(guò)交織之后的輸出比特序列。圖2給出了Turbo編碼實(shí)現編碼流程圖。
值得注意的是,交織器是Turbo編碼的重要部分,Turbo編碼交織器采用二次多項式(QPP)交織器,其位置對應關(guān)系如下:π(x)=(f1x+f2x) mod K
所以可以得出:在DSP中實(shí)現時(shí)可以不使用乘法和除法取得對應位置,代替使用比較、加法和移位來(lái)獲得相應的對應位置。
具體做法如下:
(1)根據不同的f1、f2可以有不同的結果,f1、f2一共有188種配對,規律性低,本文只能采用一比特一比特按照公式計算出對應位置,然后進(jìn)行交織。
(2)輸入比特序列作為交織塊的輸入,其長(cháng)度K用來(lái)控制交織的循環(huán)次數。因為在DSP C6455中寄存器的大小為32 bit,這里32也作為一個(gè)循環(huán)次數,控制以整雙字處理完之后的存取。
(3)進(jìn)入循環(huán)之后,首先判斷π(x)和g(x)的值是否大于或等于輸入比特序列長(cháng)度K,如果≥K,應該減去K之后再次判斷,直到K之后,進(jìn)入下一階段。因為在DSP中存取比特都只能在32 bit之內處理,所以還要判斷π(x)的值是否小于32,如果不是,則需要減去32,同時(shí)在控制雙字偏移的寄存器需要加1,使取值指針指向下一個(gè)雙字,以達到從下一個(gè)雙字中取值的目的。此時(shí)需要繼續做判斷直到π(x)32為止。
(4)得到了控制雙字偏移的值和比特偏移的值π(x)之后,便可以從內存中輸入的比特序列中取出一個(gè)比特作為交織之后的輸出比特。通過(guò)“異或”移位,完成32次循環(huán)之后,寄存器32 bit可以剛好存放下32 bit交織輸出比特,然后存放進(jìn)內存。注意每做一次交織比特,控制輸入總長(cháng)度的寄存器應該減1直到為0時(shí),跳出交織循環(huán),存放輸出數據,完成交織。
4 性能分析與總結
在DSP軟件實(shí)現中,通過(guò)指令并行,盡量?jì)?yōu)化程序循環(huán)體,減少或消除程序中的’NOP’指令[6]。對于不同大小的碼塊長(cháng)度,根據所用的環(huán)境,通過(guò)程序仿真運行,可以得到統計結果如表2所示。
表2數據長(cháng)度僅為個(gè)別舉例,但不失一般性。從表中可以看出,雖然查表法的運算量較大,但是當運用TMS320C64× DSP芯片實(shí)現時(shí),由于處理器的超高主頻一般為1 GHz,一個(gè)指令周期耗時(shí)為1 ns,其運算速率也非???,完全可以忽略它的計算量。因此,本實(shí)現方案采用查表法不僅簡(jiǎn)化了程序實(shí)現方法,還減少了模塊程序代碼,節約了系統存儲空間。
本文從理論分析出發(fā),根據TD-LTE系統特性,提出了一種簡(jiǎn)單有效的Turbo編碼實(shí)現算法,詳細介紹了該算法在DSP的實(shí)現方法,并在TMS320C64×芯片上加以實(shí)現。程序運行結果表明,該算法能夠滿(mǎn)足TD-LTE系統的需求,具有可行性和高效性,并已應用于LTE-TDD無(wú)線(xiàn)綜合測試儀表的開(kāi)發(fā)中。
評論