李小文,王振宇
(重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶 400065)
在TD-LTE系統(tǒng)中,速率匹配是指傳輸信道上的比特被重發(fā)或打孔。一個傳輸信道中的數(shù)據(jù)量在不同的傳輸時間間隔內(nèi)可以發(fā)生變化,而所配置的物理信道容量是固定的。為了匹配物理信道的承載能力,輸入序列中的一些比特將被重發(fā)或者打孔,以確保在傳輸信道復(fù)用后總的比特率與所分配的物理信道的總的信道比特率相一致。當(dāng)輸入序列的數(shù)據(jù)量超過物理信道的承載能力時,需要對輸入序列打孔;反之則需要重復(fù)。高層給每一個傳輸信道配置一個速率匹配特性。當(dāng)計算重發(fā)或打孔的比特數(shù)時,需要使用速率匹配特性。TD-LTE中根據(jù)編碼方式的不同,速率匹配分為卷積編碼和Turbo編碼兩種匹配方式。
本文對Turbo編碼的速率匹配算法進行了分析并設(shè)計了一種在TI公司DSP芯片TMS320C64x上的實現(xiàn)方法。
在TD-LTE系統(tǒng)中,發(fā)送端對各碼塊分別進行速率匹配,速率匹配模塊包括子塊交織、比特收集、循環(huán)緩沖器生成、比特選擇和修剪。具體的過程是Turbo碼的三路輸出,分別經(jīng)過子塊交織器后,把這三路數(shù)據(jù)串行收集在一起,經(jīng)過打孔或重復(fù)過程得到物理信道要傳輸?shù)谋忍?。如圖1所示。
各碼塊采用深度為32的“行入列出”塊交織器獨立進行交織,如果各碼塊的數(shù)據(jù)大小不能填滿交織矩陣,則在各碼塊輸入數(shù)據(jù)前端添加NULL比特,再進行子塊交織。設(shè)Turbo編碼器的各路輸出數(shù)據(jù)個數(shù)都為D,各子塊交織器的輸出數(shù)據(jù)個數(shù)為 KΠ,KΠ=R×C,其中 C=32為交織器列數(shù),R為交織器行數(shù),ND=KΠ-D為交織器添加的NULL比特數(shù)。交織方法為按行寫入,經(jīng)列變換,再按列讀出。對于前兩路數(shù)據(jù)流,變換后的第j列對應(yīng)于變換前的第P(j)列。j和P(j)的對應(yīng)關(guān)系如表 1所示。對于第三路數(shù)據(jù)流,輸出位置k和輸入位置π(k)的關(guān)系是:
表1 列交織表1
子塊交織之后進行比特收集,將第一路經(jīng)子塊交織后的數(shù)據(jù)流放在循環(huán)緩沖器的前面,后面間隔放置第二路和第三路數(shù)據(jù),比特收集后數(shù)據(jù)的長度為Kw=3 KΠ。每個傳輸塊的軟緩沖器大小為:其中,Nsoft是軟信道比特的總數(shù)。如果UE被設(shè)置為基于傳輸模式 3、4或 8進行 PDSCH傳輸,則 KMIMO等于 2;否則等于1。MDL_HARQ是DLHARQ進程的最大個數(shù)。Mlimit等于8。每個碼塊的軟緩沖器的大小為:
其中C為碼塊個數(shù)。用E表示第r個編碼塊速率匹配后輸出序列的長度,rvidx表示本次傳輸?shù)娜哂喟姹咎枺╮vidx=0,1,2,3)。用G表示對于一個傳輸塊,其信道可以傳輸?shù)目偟谋忍財?shù),G經(jīng)過一系列變化求出每個碼塊經(jīng)過速率匹配后的長度 E。由公式)確定每次從軟緩沖器中取數(shù)的起點位置k0,之所以從位置k0開始取數(shù)據(jù),是為了提高在高碼率情況下的解碼性能。
參數(shù)確定后就開始打孔和重復(fù)過程,判斷當(dāng)前數(shù)據(jù)是否是NULL比特,如果是則跳過,否則輸出,直到輸出數(shù)據(jù)達到E為止。如果所要取的數(shù)據(jù)在軟緩沖期中的位置為Ncb,則跳到位置0取數(shù)據(jù)。
TMS320C6000最初是為了移動通信基站的信號處理而推出的超級處理芯片。C64x系列DSP主要的特點是在體系結(jié)構(gòu)上采用了VelocoTI甚長指令集VLIW(Very Long Instruction Word)。在 VLIW 體系結(jié)構(gòu)的 DSP中,是由一個超長的機器指令字來驅(qū)動內(nèi)部的多個功能單元。由于每條指令的字段之間是相互獨立的,故可以單周期發(fā)射多條指令,從而實現(xiàn)更高的指令級并行效率。CPU采用哈佛結(jié)構(gòu),程序總線和數(shù)據(jù)總線分開,取指令與執(zhí)行指令可并行運行。程序總線寬度為256 bit,每一次取指令操作都是取8條指令,稱為一個取指包。C64x系列DSP芯片的大容量、高運算能力的優(yōu)點使其在無線基站、終端等場合下得到廣泛的應(yīng)用,特別是運算精度能滿足綜合測試儀表的開發(fā)條件。
將速率匹配的實現(xiàn)分為兩個模塊來進行,分別是子塊交織收集模塊和比特選擇、修剪模塊。這兩個模塊都采用匯編實現(xiàn),一些參數(shù)的計算用C語言實現(xiàn)。
為了區(qū)分NULL比特和有用比特,輸入數(shù)據(jù)按照一個比特占8 bit來存儲,NULL比特存儲為0FH,0存儲為00H,1存儲為01H。在輸入數(shù)據(jù)時,Turbo編碼模塊已經(jīng)加好NULL比特,而且將三路輸出級聯(lián)。子塊交織后的數(shù)據(jù)仍然是一個比特占8 bit,比特選擇和修剪后的輸出數(shù)據(jù)按照一個比特占1位存儲。
子塊交織模塊的輸入變量分別是輸入數(shù)組首地址、輸出數(shù)組首地址、交織矩陣行數(shù)和輸出數(shù)組長度。此外還要用到如表1和表2的兩個列交織表。第三路數(shù)據(jù)的處理不同于前兩路,因為公式計算太復(fù)雜,所以首先由公式得到交織表2,第三路數(shù)據(jù)按照交織表2進行交織,然后把最后一列中第一個數(shù)據(jù)放到最后面,其余數(shù)據(jù)向前移一位,這樣就實現(xiàn)了與公式一樣的變換。三路數(shù)據(jù)同時進行交織,實現(xiàn)步驟如下:
表2 列交織表2
(1)首先計算每一路輸入總比特數(shù)KΠ。然后將輸入數(shù)組首地址加上KΠ,得到第二路數(shù)據(jù)的首地址,再加上KΠ得到第三路數(shù)據(jù)的首地址。讓三個地址指針分別指向三路輸入數(shù)組的首地址。輸出數(shù)組的首地址加KΠ得到第二路的首地址,再加上1得到第三路的首地址,第二路和第三路是交叉放置的,每次存數(shù)據(jù)時,地址偏移為2。
(2)建立一個32次的外循環(huán),每次外循環(huán)處理交織矩陣中一列的數(shù)據(jù)。依次取出列交織表的各個元素作為index,第一路和第二路從列交織表 1中取index,第三路從列交織表2中取index。將地址指針偏移index,同時將指針指向的數(shù)據(jù)取出來,這相當(dāng)于取交織矩陣中第一行第index列的數(shù)據(jù),將取出來的數(shù)據(jù)放到輸出數(shù)組中。
(3)建立一個R-1次的內(nèi)循環(huán),嵌套在外循環(huán)中,每次內(nèi)循環(huán)處理一列中的一個數(shù)據(jù)。每次循環(huán)地址指針偏移32,取出對應(yīng)的數(shù)據(jù),并依次存入輸出數(shù)組。R-1次內(nèi)循環(huán)結(jié)束后,將地址指針重新指向輸入數(shù)組的首地址。
(4)完成32次的外循環(huán)后,將第三路輸出的倒數(shù)第R個數(shù)放到最后一個數(shù)的位置,然后將倒數(shù)前R-1個數(shù)據(jù)依次往前移一位。
以上步驟完成了子塊交織和比特收集。子塊交織和比特收集的流程圖如圖2所示。
圖2 子塊交織和比特收集流程圖
在比特選擇和修剪之前,首先從高層獲得參數(shù)Kw、Nsoft、KMIMO、MDL_HARQ、G、Qm、NL、rvidx等,然后計算得到 E、k0和Ncb。
在設(shè)計之初,考慮了兩種比特選擇和修剪方案,一種是先將循環(huán)緩沖器中的非NULL比特取出,然后將取得的非NULL拼接成長度為E的輸出數(shù)組;另外一種是直接從輸入數(shù)組中依次循環(huán)地取非NULL比特,直到取夠E個數(shù)據(jù)為止。第一種方案的不足是當(dāng)軟緩沖器中的非NULL比特數(shù)比E大時,多取得的數(shù)據(jù)會浪費;第二種方案的不足是當(dāng)E比軟緩沖器中的非NULL比特大得多時,會浪費處理時間。綜合以上兩種情況,在程序的開始部分,先判斷E是否大于Ncb,若大于,則程序跳轉(zhuǎn),采用第一種方案;若不大于則采用第二種方案。
比特選擇和修剪模塊的輸入是輸入數(shù)組首地址、參數(shù)首地址、輸出數(shù)組首地址。若E大于Ncb,則按如下步驟進行:
(1)首先將參數(shù)從參數(shù)數(shù)組里面取出來,得到E、Ncb、k0的值,讓指針指向輸入數(shù)據(jù)的第k0位。
(2)設(shè)置兩個計數(shù)器(計數(shù)器 0和計數(shù)器 1),初始值都設(shè)置為0。兩個計數(shù)器都是用來統(tǒng)計取了多少非NULL比特,不過計數(shù)器0是用來統(tǒng)計總共取了多少非NULL比特,而計數(shù)器 1非NULL比特達到 32后,就會被清零,實際上它是用來判斷取得的非NULL比特數(shù)是否達到了32個,如果達到了就將這32比特數(shù)據(jù)存入內(nèi)存。
(3)建立一個Ncb次的循環(huán)。循環(huán)內(nèi),依次從k0取出輸入數(shù)據(jù),然后判斷是否為NULL比特。如果是,則對該數(shù)據(jù)不做操作;如果不是,將臨時存儲數(shù)據(jù)的寄存器左移一位,與取得的數(shù)據(jù)相或。同時兩個計數(shù)器都加1。判斷計數(shù)器 1是否為32,如果是,則將計數(shù)器 1清零,同時將臨時儲存數(shù)據(jù)的寄存器中的數(shù)據(jù)存入輸出數(shù)組,然后清零該寄存器。判斷當(dāng)前指針是否指向輸入數(shù)組的第Ncb個,如果是,則將指針重新指向輸入數(shù)組的首地址,繼續(xù)讀下一個數(shù)進入下一次循環(huán)。當(dāng)循環(huán)次數(shù)達到Ncb次時,則跳出循環(huán)。
(4)結(jié)束上面循環(huán)后,判斷計數(shù)器 1是否為 0,如果不為0,說明上面還有不到32 bit的數(shù)沒有存入輸出數(shù)組,將其存入輸出數(shù)組。
(5)此時計數(shù)器0中的數(shù)就是軟緩沖器中非NULL比特的數(shù)目,記為len。用 E除以 len,得到商為a,余數(shù)為b。這時只需要在上面處理完的輸出數(shù)組后拼接上面得到的數(shù)據(jù)a-1次,再拼接b比特就可以完成速率匹配。
(6)先用 len除以 32,得到商為 c,余數(shù)為 d。這樣在拼接時,先建立一個a-1次的外循環(huán),每次外循環(huán)拼接長度為len的數(shù)據(jù),在每次外循環(huán)中建立一個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)只需要依次將一個字的數(shù)據(jù)存入輸出數(shù)組;若不等于,則說明輸出數(shù)組中最后的一個字沒有被存滿,在每次內(nèi)循環(huán)中,要先將待拼接的數(shù)據(jù)右移,與輸出數(shù)組中最后一個字中的數(shù)據(jù)拼接成一整個字的數(shù)據(jù),再將待拼接的數(shù)據(jù)左移,等待下一次循環(huán)中拼接。
(7)第6步已經(jīng)完成了a-1次拼接,然后再處理剩下的b比特即可。與上面的方法類似,只要從輸出數(shù)組的最開始,拼接個32 bit的數(shù)據(jù)即可。這里多拼接的數(shù)據(jù),最多不會超過一個字,所以不會多占內(nèi)存。
E大于Ncb時流程圖如圖3所示。
若E不大于Ncb,處理步驟與上面類似,只需要前4步處理,不同之處是步驟3中的循環(huán)次數(shù)不固定,直到取得E個非NULL比特后就跳出循環(huán)。
圖3 比特選擇和修剪流程圖
在進行DSP程序設(shè)計時,需要對程序進行優(yōu)化,盡量減少或者消除程序中的“NOP”指令,特別是循環(huán)體內(nèi)的“NOP”指令。通過在 CCS3.3上運行程序,在Ncb=Kw時,統(tǒng)計得到各條件下的速率匹配仿真執(zhí)行結(jié)果,如表3所示,表中數(shù)據(jù)的長度為Turbo編碼后每一路數(shù)據(jù)的長度。
表3 不同數(shù)據(jù)長度的處理cycle數(shù)
表3僅列舉了幾種典型的數(shù)據(jù)長度,且不失一般性,通過分析可以看出:比特選擇和修剪時,數(shù)據(jù)長度為1 124時,只需依次取出E個非NULL比特,占用周期較少;數(shù)據(jù)長度為3 140而E的大小不同時,拼接軟緩沖器中的非NULL比特消耗了一部分周期;E的大小相同而數(shù)據(jù)長度不同時對比發(fā)現(xiàn),將軟緩沖器中的非NULL比特取出消耗了大量cycle。所以也可以看出,當(dāng)E大于Ncb時先將軟緩沖器中的非NULL比特取出,再進行拼接的方法可以節(jié)省處理時間。
總之,本實現(xiàn)方法可以滿足TD-LTE系統(tǒng)實時處理的需要并已經(jīng)應(yīng)用到國家科技重大專項項目“TD-LTE無線綜合測試儀表”開發(fā)中。
[1]3GPP TS 36.212 v9.1.0:Rate matching(release 9)[S].2009-12.
[2]沈嘉,索士強,全海洋,等.3GPP長期演進(LTE)技術(shù)原理與系統(tǒng)設(shè)計[M].北京:人民郵電出版社,2005,2008.
[3]Texas Instruments Incorporated.TMS320C6000系列DSP編程工具與指南[M].田黎育,何佩琨,朱夢宇,譯.北京:清華大學(xué)出版社,2006:32-50.