何登平,高 偉,余利成,李小文
(重慶郵電大學重慶市移動通信技術重點實驗室,重慶400065)
在TD-LTE系統中,速率匹配是指傳輸信道上的比特被重發或打孔。在信道編碼后,如果1個碼字codeword在1個TTI(子幀1 ms)內使用的RB數目、symbol數目確定以后,該信道的物理資源承載能力,即能夠傳輸的比特數就確定了,如果碼字的長度超過信道的承載能力,則需要進行速度匹配,刪除一些冗余。
速率匹配的作用是確保在傳輸信道復用后總的比特率與所分配的專用物理信道的總比特率是相同的。為了匹配物理信道的承載能力,輸入序列中的一些比特將被重發或者打孔,以確保在傳輸信道復用后總的比特率與所分配的物理信道的總的信道比特率相一致[1]。
本文對Turbo編碼的速率匹配的算法進行了分析并設計了一種在Xilinx公司的Virtex-6芯片上的實現方法,并對仿真結果與實際結果進行了對比分析。
速率匹配算法從速率為1/3的Turbo編碼器中通過打孔或重復傳輸比特。如圖1所示,turbo編碼器(系統部分,校驗0和校驗1)3個輸出流的每一個用其自己的交織器(稱為子塊交織器)重新排列。LTE中12個尾比特也被同等的分配到3個流中,使得子塊大小Ks=K+4,其中K是QPP交織器的大小。通過將重排的系統比特與2個重排的檢驗流的交錯連接續形成輸出緩沖[2]。

圖1 Turbo速率匹配原理圖
子塊交織器采用交織深度位32的“行入列出”的塊交織器[3]。
1)每個流中的比特逐行寫入具有32列的矩陣(行數由流長度決定),為完全填補矩陣,空比特也被填充到每個流前面。設定子塊交織的列數為=32,然后根據交織長度D確定子塊交織的列數,即=。對于前兩路數據流,變換后的第j列對應于變換前的第P(j)列。j和P(j)的對應關系如表1所示[4]。

表1 列交織表1
對于第二校驗碼采用了與前兩個分量碼不同的交織公式,添加了1位偏移量,這樣可以避免在速率匹配的過程中,對應于同一個信息比特的2個校驗比特被同時打孔,起到保護編碼信息的對偶互補性的作用。
2)Turbo編碼的3個分量碼(包括1個系統碼與2個校驗碼)各自經過子塊交織之后形成了3個長度為,的數據流,將這3個數據流進行連接,形成長度為Kw=3K∏的circular buffer,連接的規則為:wk=,對于下行共享信道的發送而言(采用Turbo編碼),每個碼塊的軟緩沖器大小為Ncb=,其中C表示一個傳輸塊在碼塊分割的過程中所形成的碼塊數目。終端用于每個傳輸塊的接受緩存的大小NIR,由終端的物理緩存大小Nsoft、HARQ進程的數目MDL_HARQ以及MIMO模式中所指的傳輸塊數目KMIMO={1,2}所決定,數學表達式為NIR=其中,Mlimit=8用于TDD的場景,在TDD情況下,根據上下行時間比例配置的不同,支持下行數據連續傳輸所需要的HARQ進程的數目。在每次數據發送過程中,根據本次HARQ傳輸中所對應的RV和比特數目選取本次發送的比特序列,其中RV(冗余版本)的數值rvidx={0,1,2,3},數學表達式位k0=。用E表示第r個編碼塊速率匹配后輸出序列的長度[5]。
參數確定后就開始打孔和重復過程,判斷當前數據是否是NULL比特,如果是則跳過,如果不是則輸出,直到輸出數據達到E為止。如果所要取的數據在軟緩沖期中的位置為Ncb,則跳到位置0取數據。
根據上面介紹的原理可以看出,對于Turbo的子塊交織三路原理是相同的,唯一的區別只是其交織表的不一樣。對于其具體的實現方式,其算法描述如下。
并且由于Turbo編碼后的輸出數據為三路,采用3個雙端口RAM進行數據的存儲,同時將數據存儲。完成NULL比特與,,級聯后即可以分別進行子塊交織的過程。
相關參數確定以后,即可以實現子塊交織的過程,子塊交織的具體流程:
1)首先設置一個外部大循環sb_inter_v,其取值范圍為0,1,2。當sb_inter_v為0和1時,進入對,序列的子塊交織過程中,而當sb_inter_v為2時則進入對序列的子塊交織過程中。
4)若sb_inter_v=3,則跳出大循環,完成了子塊交織的大循環。
在進行上述的子塊交織過程的同時,將計算出的交織后的地址同時傳遞出來,根據不同的sb_inter_v值將sb_inter_addra值傳遞給sb_inter_addra_0,sb_inter_addra_1,sb_inter_addra_2,這3個地址對應于Turbo編碼后的3路數據輸出。Turbo編碼后的三路數據分別存儲于turbo_ram_0,turbo_ram_1,turbo_ram_2中。根據地址得到的輸出值,傳遞至下一級比特收集的RAM中去。完成3路數據的子塊交織過程。
在實現比特收集修剪的操作過程中,要對經過子塊交織后的輸出的比特信息收集,即實現一個循環緩沖器的功能。通過循環緩沖器,將生成的三路數據按照比特收集的規則對數據進行相應的處理。在采用FPGA實現該過程的時候,由于需要收集的數據量比較大,且存儲的位置是固定的,但是數據經過傳輸處理后,不能夠實時地去處理數據,如果不采用RAM對數據進行存儲緩存的話,則數據必然會出現丟失的情況。在這里采用一個雙端口RAM對數據進行緩存處理操作。
從圖2中可以看出,sb_inter_x_index信號用來進行列坐標計數過程,實現取32次列操作的過程。sb_inter_x

圖4 比特收集仿真的整體波形圖(截圖)
如圖4,該圖為比特收集的仿真波形圖,經過Turbo編碼后的數據已經存儲在對應的雙端口RAM中。子塊交織取出的數據均存放置RAM(sb_inter_ram_18450)中,同時根據速率匹配參數計算得到E的值與k0的值,然后根據k0的值依次從RAM中取數,并且判斷所取數據是否為信號用來進行指示進過列變換后的列坐標順序。其列坐標第一個地址數據根據實現存儲的ROM取出得到。實現交織過程后對矩陣中的數據進行輸出,例如對于第1路數據完成交織過程后,取出的第1列數據首地址為0,第1列第2個數據地址則為32,依次往下取出該列的數據一直到預先計算的行數r_tc_sub=24。然后需要取出第2列數據,根據子塊交織列變換表,可知,第2列需取出原先第16列的地址數據,該列的地址數據首地址為16。依次取出為16,48,80,…。依次類推可以分別取出32列經過交織后的矩陣地址數據。圖3是相對應的chipscope的實現圖,通過對比證明了程序的正確性。3,即是否為填充比特,如果是填充比特,則跳過繼續取下一個地址的數據,如果不是填充比特,則將取出的數據存儲起來,作為比特收集的輸出。圖5是比特收集的chipscope實現圖,通過與圖4的仿真圖對比可以驗證程序的正確性。


圖5 比特收集實現的整體波形圖(截圖)
速率匹配算法的FPGA實現經過Modelsim仿真與chipscope實現驗證,結果與MATLAB仿真一致。同時,在進行FPGA程序設計時,要考慮到消耗的cycle數。由于速率匹配實現的時間較長,而Turbo編碼的時間相對來說比較短,因此,在速率匹配中用了6個深度為6 180的RAM,前3個RAM用于存儲第1次Turbo編碼的輸出,后3個RAM用于存儲第2次Turbo編碼的輸出,這樣,第1個碼塊在做速率匹配的時候,后3個RAM存儲第2個碼塊Turbo編碼的輸出。經過驗證,在碼塊分割結束之后輸出51 264個數據,速率匹配消耗的cycle數為118 350。
總之,本實現方法可以滿足TD-LTE系統實時處理的需要,并已經應用到國家科技重大專項項目“TD-LTE射頻一致性測試儀表”開發中。
[1]李小文,王振宇.TD-LTE系統Turbo速率匹配算法及DSP實現[J].電子技術應用,2012(5):52-55.
[2]STEFANIA S.LTE-The UMTS Long Term Evolution From Theory to Practice[M].馬霓,譯.北京:人民郵電出版社,2009.
[3]沈嘉,索士強,全海洋,等.3GPP長期演進(LTE)技術原理與系統設計[M].北京:人民郵電出版社,2005.
[4]3GPP TS 36.212 v9.1.0,Rate matching(Release 9)[S].2009.
[5]趙訓威,林輝,張明,等.3GPP長期演進(LTE)系統架構與技術規范[M].北京:人民郵電出版社,2010:72-74.
[6]吳厚航.深入淺出玩轉FPGA[M].北京:北京航空航天大學出版社,2010.