何登平,高 偉,余利成,李小文
(重慶郵電大學(xué)重慶市移動(dòng)通信技術(shù)重點(diǎn)實(shí)驗(yàn)室,重慶400065)
在TD-LTE系統(tǒng)中,速率匹配是指?jìng)鬏斝诺郎系谋忍乇恢匕l(fā)或打孔。在信道編碼后,如果1個(gè)碼字codeword在1個(gè)TTI(子幀1 ms)內(nèi)使用的RB數(shù)目、symbol數(shù)目確定以后,該信道的物理資源承載能力,即能夠傳輸?shù)谋忍財(cái)?shù)就確定了,如果碼字的長(zhǎng)度超過(guò)信道的承載能力,則需要進(jìn)行速度匹配,刪除一些冗余。
速率匹配的作用是確保在傳輸信道復(fù)用后總的比特率與所分配的專用物理信道的總比特率是相同的。為了匹配物理信道的承載能力,輸入序列中的一些比特將被重發(fā)或者打孔,以確保在傳輸信道復(fù)用后總的比特率與所分配的物理信道的總的信道比特率相一致[1]。
本文對(duì)Turbo編碼的速率匹配的算法進(jìn)行了分析并設(shè)計(jì)了一種在Xilinx公司的Virtex-6芯片上的實(shí)現(xiàn)方法,并對(duì)仿真結(jié)果與實(shí)際結(jié)果進(jìn)行了對(duì)比分析。
速率匹配算法從速率為1/3的Turbo編碼器中通過(guò)打孔或重復(fù)傳輸比特。如圖1所示,turbo編碼器(系統(tǒng)部分,校驗(yàn)0和校驗(yàn)1)3個(gè)輸出流的每一個(gè)用其自己的交織器(稱為子塊交織器)重新排列。LTE中12個(gè)尾比特也被同等的分配到3個(gè)流中,使得子塊大小Ks=K+4,其中K是QPP交織器的大小。通過(guò)將重排的系統(tǒng)比特與2個(gè)重排的檢驗(yàn)流的交錯(cuò)連接續(xù)形成輸出緩沖[2]。
圖1 Turbo速率匹配原理圖
子塊交織器采用交織深度位32的“行入列出”的塊交織器[3]。
1)每個(gè)流中的比特逐行寫(xiě)入具有32列的矩陣(行數(shù)由流長(zhǎng)度決定),為完全填補(bǔ)矩陣,空比特也被填充到每個(gè)流前面。設(shè)定子塊交織的列數(shù)為=32,然后根據(jù)交織長(zhǎng)度D確定子塊交織的列數(shù),即=。對(duì)于前兩路數(shù)據(jù)流,變換后的第j列對(duì)應(yīng)于變換前的第P(j)列。j和P(j)的對(duì)應(yīng)關(guān)系如表1所示[4]。
表1 列交織表1
對(duì)于第二校驗(yàn)碼采用了與前兩個(gè)分量碼不同的交織公式,添加了1位偏移量,這樣可以避免在速率匹配的過(guò)程中,對(duì)應(yīng)于同一個(gè)信息比特的2個(gè)校驗(yàn)比特被同時(shí)打孔,起到保護(hù)編碼信息的對(duì)偶互補(bǔ)性的作用。
2)Turbo編碼的3個(gè)分量碼(包括1個(gè)系統(tǒng)碼與2個(gè)校驗(yàn)碼)各自經(jīng)過(guò)子塊交織之后形成了3個(gè)長(zhǎng)度為,的數(shù)據(jù)流,將這3個(gè)數(shù)據(jù)流進(jìn)行連接,形成長(zhǎng)度為Kw=3K∏的circular buffer,連接的規(guī)則為:wk=,對(duì)于下行共享信道的發(fā)送而言(采用Turbo編碼),每個(gè)碼塊的軟緩沖器大小為Ncb=,其中C表示一個(gè)傳輸塊在碼塊分割的過(guò)程中所形成的碼塊數(shù)目。終端用于每個(gè)傳輸塊的接受緩存的大小NIR,由終端的物理緩存大小Nsoft、HARQ進(jìn)程的數(shù)目MDL_HARQ以及MIMO模式中所指的傳輸塊數(shù)目KMIMO={1,2}所決定,數(shù)學(xué)表達(dá)式為NIR=其中,Mlimit=8用于TDD的場(chǎng)景,在TDD情況下,根據(jù)上下行時(shí)間比例配置的不同,支持下行數(shù)據(jù)連續(xù)傳輸所需要的HARQ進(jìn)程的數(shù)目。在每次數(shù)據(jù)發(fā)送過(guò)程中,根據(jù)本次HARQ傳輸中所對(duì)應(yīng)的RV和比特?cái)?shù)目選取本次發(fā)送的比特序列,其中RV(冗余版本)的數(shù)值rvidx={0,1,2,3},數(shù)學(xué)表達(dá)式位k0=。用E表示第r個(gè)編碼塊速率匹配后輸出序列的長(zhǎng)度[5]。
參數(shù)確定后就開(kāi)始打孔和重復(fù)過(guò)程,判斷當(dāng)前數(shù)據(jù)是否是NULL比特,如果是則跳過(guò),如果不是則輸出,直到輸出數(shù)據(jù)達(dá)到E為止。如果所要取的數(shù)據(jù)在軟緩沖期中的位置為Ncb,則跳到位置0取數(shù)據(jù)。
根據(jù)上面介紹的原理可以看出,對(duì)于Turbo的子塊交織三路原理是相同的,唯一的區(qū)別只是其交織表的不一樣。對(duì)于其具體的實(shí)現(xiàn)方式,其算法描述如下。
并且由于Turbo編碼后的輸出數(shù)據(jù)為三路,采用3個(gè)雙端口RAM進(jìn)行數(shù)據(jù)的存儲(chǔ),同時(shí)將數(shù)據(jù)存儲(chǔ)。完成NULL比特與,,級(jí)聯(lián)后即可以分別進(jìn)行子塊交織的過(guò)程。
相關(guān)參數(shù)確定以后,即可以實(shí)現(xiàn)子塊交織的過(guò)程,子塊交織的具體流程:
1)首先設(shè)置一個(gè)外部大循環(huán)sb_inter_v,其取值范圍為0,1,2。當(dāng)sb_inter_v為0和1時(shí),進(jìn)入對(duì),序列的子塊交織過(guò)程中,而當(dāng)sb_inter_v為2時(shí)則進(jìn)入對(duì)序列的子塊交織過(guò)程中。
4)若sb_inter_v=3,則跳出大循環(huán),完成了子塊交織的大循環(huán)。
在進(jìn)行上述的子塊交織過(guò)程的同時(shí),將計(jì)算出的交織后的地址同時(shí)傳遞出來(lái),根據(jù)不同的sb_inter_v值將sb_inter_addra值傳遞給sb_inter_addra_0,sb_inter_addra_1,sb_inter_addra_2,這3個(gè)地址對(duì)應(yīng)于Turbo編碼后的3路數(shù)據(jù)輸出。Turbo編碼后的三路數(shù)據(jù)分別存儲(chǔ)于turbo_ram_0,turbo_ram_1,turbo_ram_2中。根據(jù)地址得到的輸出值,傳遞至下一級(jí)比特收集的RAM中去。完成3路數(shù)據(jù)的子塊交織過(guò)程。
在實(shí)現(xiàn)比特收集修剪的操作過(guò)程中,要對(duì)經(jīng)過(guò)子塊交織后的輸出的比特信息收集,即實(shí)現(xiàn)一個(gè)循環(huán)緩沖器的功能。通過(guò)循環(huán)緩沖器,將生成的三路數(shù)據(jù)按照比特收集的規(guī)則對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的處理。在采用FPGA實(shí)現(xiàn)該過(guò)程的時(shí)候,由于需要收集的數(shù)據(jù)量比較大,且存儲(chǔ)的位置是固定的,但是數(shù)據(jù)經(jīng)過(guò)傳輸處理后,不能夠?qū)崟r(shí)地去處理數(shù)據(jù),如果不采用RAM對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)緩存的話,則數(shù)據(jù)必然會(huì)出現(xiàn)丟失的情況。在這里采用一個(gè)雙端口RAM對(duì)數(shù)據(jù)進(jìn)行緩存處理操作。
從圖2中可以看出,sb_inter_x_index信號(hào)用來(lái)進(jìn)行列坐標(biāo)計(jì)數(shù)過(guò)程,實(shí)現(xiàn)取32次列操作的過(guò)程。sb_inter_x
圖4 比特收集仿真的整體波形圖(截圖)
如圖4,該圖為比特收集的仿真波形圖,經(jīng)過(guò)Turbo編碼后的數(shù)據(jù)已經(jīng)存儲(chǔ)在對(duì)應(yīng)的雙端口RAM中。子塊交織取出的數(shù)據(jù)均存放置RAM(sb_inter_ram_18450)中,同時(shí)根據(jù)速率匹配參數(shù)計(jì)算得到E的值與k0的值,然后根據(jù)k0的值依次從RAM中取數(shù),并且判斷所取數(shù)據(jù)是否為信號(hào)用來(lái)進(jìn)行指示進(jìn)過(guò)列變換后的列坐標(biāo)順序。其列坐標(biāo)第一個(gè)地址數(shù)據(jù)根據(jù)實(shí)現(xiàn)存儲(chǔ)的ROM取出得到。實(shí)現(xiàn)交織過(guò)程后對(duì)矩陣中的數(shù)據(jù)進(jìn)行輸出,例如對(duì)于第1路數(shù)據(jù)完成交織過(guò)程后,取出的第1列數(shù)據(jù)首地址為0,第1列第2個(gè)數(shù)據(jù)地址則為32,依次往下取出該列的數(shù)據(jù)一直到預(yù)先計(jì)算的行數(shù)r_tc_sub=24。然后需要取出第2列數(shù)據(jù),根據(jù)子塊交織列變換表,可知,第2列需取出原先第16列的地址數(shù)據(jù),該列的地址數(shù)據(jù)首地址為16。依次取出為16,48,80,…。依次類推可以分別取出32列經(jīng)過(guò)交織后的矩陣地址數(shù)據(jù)。圖3是相對(duì)應(yīng)的chipscope的實(shí)現(xiàn)圖,通過(guò)對(duì)比證明了程序的正確性。3,即是否為填充比特,如果是填充比特,則跳過(guò)繼續(xù)取下一個(gè)地址的數(shù)據(jù),如果不是填充比特,則將取出的數(shù)據(jù)存儲(chǔ)起來(lái),作為比特收集的輸出。圖5是比特收集的chipscope實(shí)現(xiàn)圖,通過(guò)與圖4的仿真圖對(duì)比可以驗(yàn)證程序的正確性。
圖5 比特收集實(shí)現(xiàn)的整體波形圖(截圖)
速率匹配算法的FPGA實(shí)現(xiàn)經(jīng)過(guò)Modelsim仿真與chipscope實(shí)現(xiàn)驗(yàn)證,結(jié)果與MATLAB仿真一致。同時(shí),在進(jìn)行FPGA程序設(shè)計(jì)時(shí),要考慮到消耗的cycle數(shù)。由于速率匹配實(shí)現(xiàn)的時(shí)間較長(zhǎng),而Turbo編碼的時(shí)間相對(duì)來(lái)說(shuō)比較短,因此,在速率匹配中用了6個(gè)深度為6 180的RAM,前3個(gè)RAM用于存儲(chǔ)第1次Turbo編碼的輸出,后3個(gè)RAM用于存儲(chǔ)第2次Turbo編碼的輸出,這樣,第1個(gè)碼塊在做速率匹配的時(shí)候,后3個(gè)RAM存儲(chǔ)第2個(gè)碼塊Turbo編碼的輸出。經(jīng)過(guò)驗(yàn)證,在碼塊分割結(jié)束之后輸出51 264個(gè)數(shù)據(jù),速率匹配消耗的cycle數(shù)為118 350。
總之,本實(shí)現(xiàn)方法可以滿足TD-LTE系統(tǒng)實(shí)時(shí)處理的需要,并已經(jīng)應(yīng)用到國(guó)家科技重大專項(xiàng)項(xiàng)目“TD-LTE射頻一致性測(cè)試儀表”開(kāi)發(fā)中。
[1]李小文,王振宇.TD-LTE系統(tǒng)Turbo速率匹配算法及DSP實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2012(5):52-55.
[2]STEFANIA S.LTE-The UMTS Long Term Evolution From Theory to Practice[M].馬霓,譯.北京:人民郵電出版社,2009.
[3]沈嘉,索士強(qiáng),全海洋,等.3GPP長(zhǎng)期演進(jìn)(LTE)技術(shù)原理與系統(tǒng)設(shè)計(jì)[M].北京:人民郵電出版社,2005.
[4]3GPP TS 36.212 v9.1.0,Rate matching(Release 9)[S].2009.
[5]趙訓(xùn)威,林輝,張明,等.3GPP長(zhǎng)期演進(jìn)(LTE)系統(tǒng)架構(gòu)與技術(shù)規(guī)范[M].北京:人民郵電出版社,2010:72-74.
[6]吳厚航.深入淺出玩轉(zhuǎn)FPGA[M].北京:北京航空航天大學(xué)出版社,2010.