文獻標識碼: A
文章編號: 0258-7998(2011)08-0059-04
信道編碼是消除或降低信息傳輸錯誤概率的有效手段之一。根據Shannon有噪信道編碼定理,在信道傳輸速率R不超過信道容量C的前提下,只有在碼組長度無限的碼集合中隨機地選擇編碼碼字并且在接收端采用最大似然譯碼算法時,才能使誤碼率接近為零。Turbo編碼[1]巧妙地將卷積碼和隨機交織器結合在一起,獲得了接近Shannon理論極限的譯碼性能。
Turbo碼又稱并行級聯卷積碼PCCC(Parallel Concatenated Convolutional Code),它將卷積碼和隨機交織器結合,實現了隨機編碼的思想,在實現隨機編碼思想的同時,通過交織器實現了由短碼構造長碼的方法。Turbo碼由分量碼經由交織器級聯而成。分量碼和交織器設計的好壞是決定Turbo碼性能的關鍵因素。Turbo碼的提出,不僅提供了一個性能優越的編碼方法,還更新了編碼理論研究中的一些概念和方法。由于Turbo碼具有接近Shannon理論極限的性能[2],尤其是低信噪比下的優異性能,使Turbo碼成為第三代移動通信高質量、高速率信道中的首選編碼方法。
1 LTE系統中的Turbo編碼
LTE作為準4 G技術,以正交頻分復用OFDM和多輸入多輸出MIMO技術為基礎,下行采用正交頻分多址(OFDM)技術,上行采用單載波頻分多址(SC-FDMA)技術,在20 MHz頻譜帶寬下能夠提供下行100 Mb/s與上行50 Mb/s的峰值速率。
在LTE系統中,Turbo編碼主要應用于上行共享信道、下行共享信道、尋呼信道和多播信道的信道編碼[3]處理。由MAC層傳來的數據和控制信息比特流經過添加CRC以及碼塊分割后進入編碼單元,編碼完成后進行速率匹配[3-4]。
0。為了讓編碼器從0狀態開始且編碼之后回到0狀態,編碼后的輸出比特數為D=K+4,最后的4個比特被稱為柵格停止尾比特。Turbo編碼器結構如圖1 所示。
2 Turbo編碼算法分析
Turbo編碼原理相對簡單,主要由兩個子編碼器和內交織器組成。每次輸入一個碼塊數據流,兩個子編碼器結構一樣,可以并行處理,其中輸入在進入第二個編碼器之前要先進入一個交織單元,經交織后作為輸入比特序列,然后進入第二個編碼器處理[2]。輸出三路數據,分別為信息比特流、校驗比特流1、校驗比特流2。本文提出采用查表法來實現Turbo編碼的算法。
具體算法描述如下:
(1)碼塊分割完后可能出現不同碼塊大小(K+,K-),算法采用每個碼塊單獨處理。所以需要定義一個標識來查表當前碼塊需要交織時的參數。
(2)Turbo編碼時有反饋的影響,即每個輸入比特與反饋值做了“異或”后才能作為移位寄存器的下一個狀態,故在實際DSP實現過程中使用了逐位比特處理的方式。
(3)由于Turbo編碼器上下兩部分處理方法一樣,所以在處理上半部分編碼器時同時并行處理下半部分,而下半部分輸入是經過交織之后的輸出比特序列。
(4)根據不同的f1和f2可以有不同的結果。f1和f2一共有188種配對,規律性低,本文只能采用一比特一比特按照公式計算出對應位置,然后進行交織。
(5)采用查表的方式,每輸入一個比特加上現在寄存器里面的3個比特作為一個狀態(一共4個比特16種狀態,輸入比特作為最低位),可以查出一個輸出比特和下一個寄存器狀態。
(6)在尾比特的處理上,每一路的最后3位尾比特與輸入無關,只與現在寄存器的狀態有關(3 bit 一共8種狀態)。本文全部列出了8種狀態下可能出現的結果。在DSP實現功能時直接判斷現在的寄存器處于哪種狀態,然后利用查表可以得出3個尾比特。
(7)最后對四路輸出的尾比特(3×4=12 bit)按標準做一個賦值處理,然后移位接到之前的比特序列中去就可以得到最終的三路輸出比特序列。
3 Turbo編碼算法的DSP實現
3.1 硬件
TMS320C6000系列DSP是TI公司推向市場的高性能DSP,綜合了目前性價比高、功耗低等優點。TMS320C64系列在TMS320C6000×DSP芯片中處于領先水平,它不但提高了時鐘頻率,而且在體系結構上采用了VelociTI 甚長指令集VLIW(Very Long Instruction Word)結構[5],芯片內有8個獨立功能單元的內核,每個周期可以并行執行8條32 bit指令,最大峰值速度為4 800 MIPS,2組共64個32 bit通用寄存器,32 bit尋址范圍,支持8/16/32/40 bit的數據訪問,芯片內集成大容量SRAM,最大可達8 Mbit。由于其出色的運算能力、高效的指令集、大范圍的尋址能力,使其特別適用于無線基站、測試儀表等對運算能力和存儲量要求高的應用場合。
3.2 Turbo編碼的DSP實現
由于碼塊分割完之后可能出現不同碼塊大?。↘+,K-),所以本模塊按每個碼塊單獨處理。Turbo編碼是作為一個子函數模塊,因此,本方案定義輸入輸出變量及其調用格式如表1所示。
調用格式:Turbo_Code(int*,int,int,char*,int*),其中int分別表示TxSegOutTurboIn為輸入序列的首地址、TxTurboCodeBitLen;int*分別表示TxSegOutTurboInOffset、TxTurboInterMatrixRows;char*表示TxTurboDataOut為輸出序列首地址。
具體實現流程描述如下:Turbo編碼時有反饋的影響,即每個輸入比特與反饋值做了“異或”后才能作為移位寄存器的下一個狀態,故在實際DSP實現過程中使用了逐位比特處理的方式。C語言編寫主函數main( ),使用匯編編寫Turbo編碼的實現函數。因為DSP C6455可以直接存取處理32bit,在具體實現中,輸入編碼比特序列、輸入序列比特長度K、用于計算交織查表的指數可以作為函數的輸入。在內存中定義了三段長度為碼塊K+4的Xk、Zk、Zkp作為暫時存放輸出序列的內存空間,并且建立了4張查找表,分別為:(1)交織表格TxInterleaver,交織表格TxInterleaver占用內存空間為188 B,每個字有32 bit,碼塊長度K、f1、f2各自所占比特為13、9、10;(2)寄存器狀態和輸出比特表格turbo_coding,一共4個比特16種狀態,占用16個字;(3)尾比特狀態和輸出比特表格1turbo_Xk_tail,一共3個比特8種狀態,占用4個字;(4)尾比特狀態和輸出比特表格2turbo_Zk_tail,一共3個比特8種狀態,占用4個字。
定義一個標識來查表當前碼塊需要交織時的參數,這樣不僅減少任務繁瑣,而且減少了系統的代碼量,更給代碼測試和維護降低了難度。在匯編函數中,利用32作為內循環次數,可以處理完一字(32 bit)就存放在寄存器中。外循環次數使用輸入比特所占的雙字個數N-1來控制,而可能出現的多出的比特數則需要另作一次(N-32×N)的循環,得到編碼結果。
外循環中,在每次內循環之前從輸入比特序列中取出32 bit輸入比特放入一個寄存器作為一個內循環的輸入,這次內循環結束后,取出下一個32 bit輸入比特更新這個寄存器,為下一次內循環做準備。每次內循環結束之后,將編碼好的32 bit做好存放處理,同時控制外循環次數的寄存器減1,直到循環結束。
內循環中,編碼過程采用查表的方式,每輸入一個比特加上現在寄存器里面的3個比特作為一個狀態,一共4個比特16種狀態,輸入比特作為最低位,可以查出一個輸出比特和下一個寄存器狀態。需要注意的是,考慮到下面的速率匹配中需要加入null bit而1 bit的信息不能表示出null bit,所以輸出1 bit的信息就用8 bit的內存空間來存放??紤]到Turbo編碼器上下兩部分處理方法一樣,所以在處理上半部分編碼器時同時并行處理下半部分,而下半部分輸入是經過交織之后的輸出比特序列。圖2給出了Turbo編碼實現編碼流程圖。
值得注意的是,交織器是Turbo編碼的重要部分,Turbo編碼交織器采用二次多項式(QPP)交織器,其位置對應關系如下:π(x)=(f1x+f2x) mod K
所以可以得出:在DSP中實現時可以不使用乘法和除法取得對應位置,代替使用比較、加法和移位來獲得相應的對應位置。
具體做法如下:
(1)根據不同的f1、f2可以有不同的結果,f1、f2一共有188種配對,規律性低,本文只能采用一比特一比特按照公式計算出對應位置,然后進行交織。
(2)輸入比特序列作為交織塊的輸入,其長度K用來控制交織的循環次數。因為在DSP C6455中寄存器的大小為32 bit,這里32也作為一個循環次數,控制以整雙字處理完之后的存取。
(3)進入循環之后,首先判斷π(x)和g(x)的值是否大于或等于輸入比特序列長度K,如果≥K,應該減去K之后再次判斷,直到<K之后,進入下一階段。因為在DSP中存取比特都只能在32 bit之內處理,所以還要判斷π(x)的值是否小于32,如果不是,則需要減去32,同時在控制雙字偏移的寄存器需要加1,使取值指針指向下一個雙字,以達到從下一個雙字中取值的目的。此時需要繼續做判斷直到π(x)<32為止。
(4)得到了控制雙字偏移的值和比特偏移的值π(x)之后,便可以從內存中輸入的比特序列中取出一個比特作為交織之后的輸出比特。通過“異或”移位,完成32次循環之后,寄存器32 bit可以剛好存放下32 bit交織輸出比特,然后存放進內存。注意每做一次交織比特,控制輸入總長度的寄存器應該減1直到為0時,跳出交織循環,存放輸出數據,完成交織。
4 性能分析與總結
在DSP軟件實現中,通過指令并行,盡量優化程序循環體,減少或消除程序中的’NOP’指令[6]。對于不同大小的碼塊長度,根據所用的環境,通過程序仿真運行,可以得到統計結果如表2所示。
表2數據長度僅為個別舉例,但不失一般性。從表中可以看出,雖然查表法的運算量較大,但是當運用TMS320C64× DSP芯片實現時,由于處理器的超高主頻一般為1 GHz,一個指令周期耗時為1 ns,其運算速率也非??欤耆梢院雎运挠嬎懔?。因此,本實現方案采用查表法不僅簡化了程序實現方法,還減少了模塊程序代碼,節約了系統存儲空間。
本文從理論分析出發,根據TD-LTE系統特性,提出了一種簡單有效的Turbo編碼實現算法,詳細介紹了該算法在DSP的實現方法,并在TMS320C64×芯片上加以實現。程序運行結果表明,該算法能夠滿足TD-LTE系統的需求,具有可行性和高效性,并已應用于LTE-TDD無線綜合測試儀表的開發中。
參考文獻
[1] 王新梅.糾錯碼原理與方法[M].西安:西安電子科技大學出版社,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].田黎育,何佩琨,朱夢宇,譯.北京:清華大學出版社,2006:32-50.