文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)05-0052-04
在TD-LTE系統(tǒng)中,速率匹配是指?jìng)鬏斝诺郎系谋忍乇恢匕l(fā)或打孔。一個(gè)傳輸信道中的數(shù)據(jù)量在不同的傳輸時(shí)間間隔內(nèi)可以發(fā)生變化,而所配置的物理信道容量是固定的。為了匹配物理信道的承載能力,輸入序列中的一些比特將被重發(fā)或者打孔,以確保在傳輸信道復(fù)用后總的比特率與所分配的物理信道的總的信道比特率相一致。當(dāng)輸入序列的數(shù)據(jù)量超過(guò)物理信道的承載能力時(shí),需要對(duì)輸入序列打孔;反之則需要重復(fù)。高層給每一個(gè)傳輸信道配置一個(gè)速率匹配特性。當(dāng)計(jì)算重發(fā)或打孔的比特?cái)?shù)時(shí),需要使用速率匹配特性。TD-LTE中根據(jù)編碼方式的不同,速率匹配分為卷積編碼和Turbo編碼兩種匹配方式。
本文對(duì)Turbo編碼的速率匹配算法進(jìn)行了分析并設(shè)計(jì)了一種在TI公司DSP芯片TMS320C64x上的實(shí)現(xiàn)方法。
1 Turbo速率匹配算法
在TD-LTE系統(tǒng)中,發(fā)送端對(duì)各碼塊分別進(jìn)行速率匹配,速率匹配模塊包括子塊交織、比特收集、循環(huán)緩沖器生成、比特選擇和修剪。具體的過(guò)程是Turbo碼的三路輸出,分別經(jīng)過(guò)子塊交織器后,把這三路數(shù)據(jù)串行收集在一起, 經(jīng)過(guò)打孔或重復(fù)過(guò)程得到物理信道要傳輸?shù)谋忍亍H鐖D1所示。


2 Turbo速率匹配的實(shí)現(xiàn)
2.1 硬件簡(jiǎn)介
TMS320C6000最初是為了移動(dòng)通信基站的信號(hào)處理而推出的超級(jí)處理芯片。C64x系列DSP主要的特點(diǎn)是在體系結(jié)構(gòu)上采用了VelocoTI甚長(zhǎng)指令集VLIW(Very Long Instruction Word)。在VLIW體系結(jié)構(gòu)的DSP中,是由一個(gè)超長(zhǎng)的機(jī)器指令字來(lái)驅(qū)動(dòng)內(nèi)部的多個(gè)功能單元。由于每條指令的字段之間是相互獨(dú)立的,故可以單周期發(fā)射多條指令,從而實(shí)現(xiàn)更高的指令級(jí)并行效率。CPU采用哈佛結(jié)構(gòu),程序總線和數(shù)據(jù)總線分開(kāi),取指令與執(zhí)行指令可并行運(yùn)行。程序總線寬度為256 bit,每一次取指令操作都是取8條指令,稱為一個(gè)取指包。C64x系列DSP芯片的大容量、高運(yùn)算能力的優(yōu)點(diǎn)使其在無(wú)線基站、終端等場(chǎng)合下得到廣泛的應(yīng)用,特別是運(yùn)算精度能滿足綜合測(cè)試儀表的開(kāi)發(fā)條件。
2.2 子塊交織和比特收集
將速率匹配的實(shí)現(xiàn)分為兩個(gè)模塊來(lái)進(jìn)行,分別是子塊交織收集模塊和比特選擇、修剪模塊。這兩個(gè)模塊都采用匯編實(shí)現(xiàn),一些參數(shù)的計(jì)算用C語(yǔ)言實(shí)現(xiàn)。
為了區(qū)分NULL比特和有用比特,輸入數(shù)據(jù)按照一個(gè)比特占8 bit來(lái)存儲(chǔ),NULL比特存儲(chǔ)為0FH,0存儲(chǔ)為00H,1存儲(chǔ)為01H。在輸入數(shù)據(jù)時(shí),Turbo編碼模塊已經(jīng)加好NULL比特,而且將三路輸出級(jí)聯(lián)。子塊交織后的數(shù)據(jù)仍然是一個(gè)比特占8 bit,比特選擇和修剪后的輸出數(shù)據(jù)按照一個(gè)比特占1位存儲(chǔ)。
(1)首先計(jì)算每一路輸入總比特?cái)?shù)KΠ。然后將輸入數(shù)組首地址加上KΠ,得到第二路數(shù)據(jù)的首地址,再加上KΠ得到第三路數(shù)據(jù)的首地址。讓三個(gè)地址指針?lè)謩e指向三路輸入數(shù)組的首地址。輸出數(shù)組的首地址加KΠ得到第二路的首地址,再加上1得到第三路的首地址,第二路和第三路是交叉放置的,每次存數(shù)據(jù)時(shí),地址偏移為2。
(2)建立一個(gè)32次的外循環(huán),每次外循環(huán)處理交織矩陣中一列的數(shù)據(jù)。依次取出列交織表的各個(gè)元素作為index,第一路和第二路從列交織表1中取index,第三路從列交織表2中取index。將地址指針偏移index,同時(shí)將指針指向的數(shù)據(jù)取出來(lái),這相當(dāng)于取交織矩陣中第一行第index列的數(shù)據(jù),將取出來(lái)的數(shù)據(jù)放到輸出數(shù)組中。
(3)建立一個(gè)R-1次的內(nèi)循環(huán),嵌套在外循環(huán)中,每次內(nèi)循環(huán)處理一列中的一個(gè)數(shù)據(jù)。每次循環(huán)地址指針偏移32,取出對(duì)應(yīng)的數(shù)據(jù),并依次存入輸出數(shù)組。R-1次內(nèi)循環(huán)結(jié)束后,將地址指針重新指向輸入數(shù)組的首地址。
(4)完成32次的外循環(huán)后,將第三路輸出的倒數(shù)第R個(gè)數(shù)放到最后一個(gè)數(shù)的位置,然后將倒數(shù)前R-1個(gè)數(shù)據(jù)依次往前移一位。
以上步驟完成了子塊交織和比特收集。子塊交織和比特收集的流程圖如圖2所示。

在設(shè)計(jì)之初,考慮了兩種比特選擇和修剪方案,一種是先將循環(huán)緩沖器中的非NULL比特取出,然后將取得的非NULL拼接成長(zhǎng)度為E的輸出數(shù)組;另外一種是直接從輸入數(shù)組中依次循環(huán)地取非NULL比特,直到取夠E個(gè)數(shù)據(jù)為止。第一種方案的不足是當(dāng)軟緩沖器中的非NULL比特?cái)?shù)比E大時(shí),多取得的數(shù)據(jù)會(huì)浪費(fèi);第二種方案的不足是當(dāng)E比軟緩沖器中的非NULL比特大得多時(shí),會(huì)浪費(fèi)處理時(shí)間。綜合以上兩種情況,在程序的開(kāi)始部分,先判斷E是否大于Ncb,若大于,則程序跳轉(zhuǎn),采用第一種方案;若不大于則采用第二種方案。
比特選擇和修剪模塊的輸入是輸入數(shù)組首地址、參數(shù)首地址、輸出數(shù)組首地址。若E大于Ncb,則按如下步驟進(jìn)行:
(1)首先將參數(shù)從參數(shù)數(shù)組里面取出來(lái),得到E、Ncb、k0的值,讓指針指向輸入數(shù)據(jù)的第k0位。
(2)設(shè)置兩個(gè)計(jì)數(shù)器(計(jì)數(shù)器0和計(jì)數(shù)器1),初始值都設(shè)置為0。兩個(gè)計(jì)數(shù)器都是用來(lái)統(tǒng)計(jì)取了多少非NULL比特,不過(guò)計(jì)數(shù)器0是用來(lái)統(tǒng)計(jì)總共取了多少非NULL比特,而計(jì)數(shù)器1非NULL比特達(dá)到32后,就會(huì)被清零,實(shí)際上它是用來(lái)判斷取得的非NULL比特?cái)?shù)是否達(dá)到了32個(gè),如果達(dá)到了就將這32比特?cái)?shù)據(jù)存入內(nèi)存。
(3)建立一個(gè)Ncb次的循環(huán)。循環(huán)內(nèi),依次從k0取出輸入數(shù)據(jù),然后判斷是否為NULL比特。如果是,則對(duì)該數(shù)據(jù)不做操作;如果不是,將臨時(shí)存儲(chǔ)數(shù)據(jù)的寄存器左移一位,與取得的數(shù)據(jù)相或。同時(shí)兩個(gè)計(jì)數(shù)器都加1。判斷計(jì)數(shù)器1是否為32,如果是,則將計(jì)數(shù)器1清零,同時(shí)將臨時(shí)儲(chǔ)存數(shù)據(jù)的寄存器中的數(shù)據(jù)存入輸出數(shù)組,然后清零該寄存器。判斷當(dāng)前指針是否指向輸入數(shù)組的第Ncb個(gè),如果是,則將指針重新指向輸入數(shù)組的首地址,繼續(xù)讀下一個(gè)數(shù)進(jìn)入下一次循環(huán)。當(dāng)循環(huán)次數(shù)達(dá)到Ncb次時(shí),則跳出循環(huán)。
(4)結(jié)束上面循環(huán)后,判斷計(jì)數(shù)器1是否為0,如果不為0,說(shuō)明上面還有不到32 bit的數(shù)沒(méi)有存入輸出數(shù)組,將其存入輸出數(shù)組。
(5)此時(shí)計(jì)數(shù)器0中的數(shù)就是軟緩沖器中非NULL比特的數(shù)目,記為len。用E除以len,得到商為a,余數(shù)為b。這時(shí)只需要在上面處理完的輸出數(shù)組后拼接上面得到的數(shù)據(jù)a-1次,再拼接b比特就可以完成速率匹配。
(6)先用len除以32,得到商為c,余數(shù)為d。這樣在拼接時(shí),先建立一個(gè)a-1次的外循環(huán),每次外循環(huán)拼接長(zhǎng)度為len的數(shù)據(jù),在每次外循環(huán)中建立一個(gè)c次的內(nèi)循環(huán),每次內(nèi)循環(huán)拼接32 bit的數(shù)據(jù),在完成c次的內(nèi)循環(huán)后,在外循環(huán)中處理多余的d比特。在拼接之前,要先判斷d是否等于0,若等于,則程序跳轉(zhuǎn),每次內(nèi)循環(huán)只需要依次將一個(gè)字的數(shù)據(jù)存入輸出數(shù)組;若不等于,則說(shuō)明輸出數(shù)組中最后的一個(gè)字沒(méi)有被存滿,在每次內(nèi)循環(huán)中,要先將待拼接的數(shù)據(jù)右移,與輸出數(shù)組中最后一個(gè)字中的數(shù)據(jù)拼接成一整個(gè)字的數(shù)據(jù),再將待拼接的數(shù)據(jù)左移,等待下一次循環(huán)中拼接。

E大于Ncb時(shí)流程圖如圖3所示。

若E不大于Ncb,處理步驟與上面類似,只需要前4步處理,不同之處是步驟3中的循環(huán)次數(shù)不固定,直到取得E個(gè)非NULL比特后就跳出循環(huán)。
3 性能分析
在進(jìn)行DSP程序設(shè)計(jì)時(shí),需要對(duì)程序進(jìn)行優(yōu)化,盡量減少或者消除程序中的“NOP”指令,特別是循環(huán)體內(nèi)的“NOP”指令。通過(guò)在CCS3.3上運(yùn)行程序,在Ncb=Kw時(shí),統(tǒng)計(jì)得到各條件下的速率匹配仿真執(zhí)行結(jié)果,如表3所示,表中數(shù)據(jù)的長(zhǎng)度為Turbo編碼后每一路數(shù)據(jù)的長(zhǎng)度。

表3僅列舉了幾種典型的數(shù)據(jù)長(zhǎng)度,且不失一般性,通過(guò)分析可以看出:比特選擇和修剪時(shí),數(shù)據(jù)長(zhǎng)度為1 124時(shí),只需依次取出E個(gè)非NULL比特,占用周期較少;數(shù)據(jù)長(zhǎng)度為3 140而E的大小不同時(shí),拼接軟緩沖器中的非NULL比特消耗了一部分周期;E的大小相同而數(shù)據(jù)長(zhǎng)度不同時(shí)對(duì)比發(fā)現(xiàn),將軟緩沖器中的非NULL比特取出消耗了大量cycle。所以也可以看出,當(dāng)E大于Ncb時(shí)先將軟緩沖器中的非NULL比特取出,再進(jìn)行拼接的方法可以節(jié)省處理時(shí)間。
總之,本實(shí)現(xiàn)方法可以滿足TD-LTE系統(tǒng)實(shí)時(shí)處理的需要并已經(jīng)應(yīng)用到國(guó)家科技重大專項(xiàng)項(xiàng)目“TD-LTE無(wú)線綜合測(cè)試儀表”開(kāi)發(fā)中。
參考文獻(xiàn)
[1] 3GPP TS 36.212 v9.1.0:Rate matching(release 9)[S]. 2009-12.
[2] 沈嘉,索士強(qiáng),全海洋,等.3GPP長(zhǎng)期演進(jìn)(LTE)技術(shù)原理與系統(tǒng)設(shè)計(jì)[M].北京:人民郵電出版社,2005,2008.
[3] Texas Instruments Incorporated.TMS320C6000系列DSP編程工具與指南[M].田黎育,何佩琨,朱夢(mèng)宇,譯.北京:清華大學(xué)出版社,2006:32-50.
