李小文,羅 佳
(重慶郵電大學通信與信息工程學院,重慶 400065)
PDCCH(Physical Downlink Control Channel,物理下行控制信道)承載下行控制信息DCI(Downlink Control Information,下行控制信息)[1],包括用于下行和上行數據傳輸的調度信息和上行功率控制信息等,是接收端用戶實現數據解調的重要依據[1-2]。針對PDCCH所承載的調度信息和不同數據的傳輸模式,TD-LTE定義了11種不同的DCI格式[3],每種格式的用途各不相同,每種DCI格式的比特長度是根據系統帶寬和基站配置的天線端口數具體計算所得[2-3]。
為了支持鏈路自適應技術,并盡量降低終端盲檢測DCI格式的復雜度,PDCCH以控制信道單元(Control Channel Element,CCE)為基本單元來進行資源分配[2]。每個CCE由9個REG組成,每個REG包含4個RE,每個RE對應2 bit(PDCCH采用QPSK調制,1個符號對應2 bit),即一個CCE對應36個RE,72 bit。根據承載的DCI比特長度和信道狀況,基站可以選擇使用1/2/4/8個CCE來承載一個DCI,稱為 CCE 聚合等級(CCE Aggregation level)[2],這4 種聚合等級對應4種PDCCH格式0/1/2/3,如表1所示。
而且為了進一步簡化譯碼的過程,LTE對CCE進行連續編號,0~NCCE-1。并且要求帶有PDCCH格式的DCI格式的第一個CCE序號i應滿足i mod n=0[2]。下行可用的總CCE資源NCCE=,NREG為下行子幀控制區域除去給CSRS、PCFICH和PHICH分配的資源后,剩下資源對應的REG個數[2]。

表1 TD-LTE系統支持的PDCCH格式
接收端是發送端的逆過程,PDCCH接收端處理流程如圖1所示。首先,接收端接收到發送端的數據后,進行解資源映射,將資源柵格中映射有PDCCH的信息提取出來。從初始位置開始判斷資源粒子(k′,l′)代表的資源粒子組有沒有被分配給PCFICH以及PHICH使用,如果沒被占用則取出此資源粒子組。如果被占用則判斷下一個OFDM符號的資源粒子組有沒有被分配給PCFICH以及PHICH使用,直到L個OFDM符號,L由PCFICH的值決定。再回到第一個OFDM符號繼續判斷,以此類推,先時域后頻域依次取出PDCCH資源粒子組。

圖1 接收端PDCCH處理流程
將解映射得到的數據進行解四元符號組循環移位,發送端移位公式為

式中:Mquad=Msymb/4是四元符號組的數目;是小區ID號;是發送端移位后的數據;w(p)是發送端移位前的數據。根據式(1),接收端只需把發送端移到前面的個數據重新移到序列后面即可。
把上面得到的數據進行解四元符號組交織,完成發送端交織前數據流的恢復。解交織的過程為:已知交織矩陣的列數為32,再根據四元符號組的數目,得到交織矩陣的行數和要添加NULL比特數。根據表2中列排列形式的值,依次判斷該值是否大于要添加的NULL比特數,如果小于說明交織矩陣該列的第1行為NULL比特,此列的剩余行為數據,剩余行的數據依次從四元符號組序列中讀取(每個數據為一個四元符號組),依次類推可得到交織前的矩陣。然后按行讀取,去除NULL比特,就得到所需數據。

表2 交織列變換表
由于本方案的解預編碼和層映射模塊放在了信號檢測模塊完成,所以經過解四元符號組移位和交織后的數據進入解調模塊。
PDCCH是采用QPSK方式進行調制(表3),接收端采用Max-Log-Map算法進行軟解調[4],直接將接收數據的實部、虛部分別代入下式,即


表3 QPSK調制映射
接收端采用的是軟解調,所以要根據發送端偽隨機序列c(i)的值來解擾。如果c(i)的值為1,則解調出來的數據d(i)乘以-1,如果c(i)的值為0,則接收到的數據d(i)乘以1。
通過以上各個模塊,到解擾后可以得到一串數據,這串數據一般包含著多PDCCH信道的數據,即發送端信道復用的數據,得到這串數據,接下來的工作就是盲檢,通過盲檢測得到正確的發送端發送的DCI信息比特流。
1)根據PCFICH的CFI解碼過程得到的CFI值,確定控制區域所占的OFDM符號個數,然后根據公式NCCE=計算得到可用于PDCCH的總的CCE數。
2)根據UE所處的狀態,找到對應的RNTI類型,再查詢協議36.213表7.1-5[5]和表4確定UE需要監視的DCI格式及其對應的CCE搜索空間類型,然后根據公式計算所需檢測的DCI格式對應的CCE搜索空間的起始位置[4]。

表4 PDCCH搜索空間
3)選取聚合等級為L∈{1,2,4,8}的CCE資源,進行DCI盲檢測。根據DCI格式支持的搜索空間類型,按照先公共搜索空間后UE專用搜索空間的順序進行盲檢測(圖2),接著計算對應搜索空間的起始位置,然后在對應搜索空間內按L由小到大(或由大到小)的順序讀取L個CCE數據,再進行解速率匹配,即恢復發送端咬尾卷積編碼后的三路輸出,然后Viterbi譯碼,即恢復發送端信息添加CRC后的比特流,最后進行CRC解擾及校驗,如果CRC校驗成功,則記錄此DCI格式信息,否則起始位置向后偏移L個CCE,重復上述過程,執行下一次檢測,如此循環,直到檢測完該聚合等級L對應的所有PDCCH候選。若檢測完一個聚合等級仍然沒有CRC校驗成功,則進行下一個聚合等級L的檢測,直到UE獲得了所需的DCI格式或者所有的聚合等級檢測完為止。

圖2 公共搜索空間及UE專用搜索空間的PDCCH候選盲檢測嘗試
將盲檢測成功時記錄下的DCI格式信息進行比特分離,即將DCI信息比特流按照發送端的比特位構成完成相應的分離,為PDSCH完成數據解析做準備。例如,對于DCI 0包含的比特信息有:資源分配類型指示位、資源塊分配、子集選擇、偏移量、調制編碼方式、HARQ進程號、新數據指示、冗余版本號、PUCCH功率控制、下行任務索引指示位 DAI[3]。
PDCCH信道的解資源映射作為一個單獨的程序,然后進入PDCCH信道的主程序,主程序主要包括:解四元符號組循環移位和交織模塊、解調模塊、解擾模塊、盲檢測模塊、解速率匹配模塊、Viterbi譯碼模塊、CRC校驗模塊、DCI比特分離模塊。由于本方案的解預編碼和層映射模塊放在了信號檢測模塊完成,所以就不再寫入PDCCH信道的主程序了。
首先,求出需要解出的四元符號組個數M,可得M=TxPDCCHSeqLen/4。對于這4個OFDM符號,每個所包含的RE個數存入REG矩陣(根據天線端口數的不同而不同)。求出前4個OFDM符號中沒有被PCFICH和PHICH占用的REG 編號,分別存入矩陣N1,N2,N3,N4中,將PDCCH所占用OFDM符號的頻域起始位置統一初始化為1,即j_freq(1,i)=1。從第一個OFDM符號開始判斷,令i=1,判斷第i個OFDM符號的時頻域位置情況,當滿足當下REG序號沒有被PCFICH或PHICH占用,且當下頻域是PDCCH占用的OFDM符號中的最小時,完成當下REG中PDCCH的數據提取,完成解映射。若時頻大小不滿足此條件,則進入下一個OFDM符號的判斷,依次循環判斷,直至M個四元符號組都完成解映射。PDCCH資源映射過程如圖3所示,解映射是一樣的規則。

圖3 PDCCH資源映射過程
在DSP實現中,為驗證數據的正確性,將MATLAB仿真過程信號檢測模塊的輸出數據流轉換成CCS數據導入解資源映射模塊,并將運行輸出結果導出,分別取出其實部、虛部的表示,在MATLAB中分別進行轉換、合并,最后將輸出數據與MATLAB中PDCCH解資源映射輸出數據進行相除,得到其數據比對值。由圖4可看出比對值呈一條直線,說明CCS與MATLAB每個點的相對大小是一致的,正確完成了PDCCH的解資源映射,驗證了本實現方案的正確性和可行性。在信號檢測模塊,由于要進行數據的計算,所以在轉化時的量化操作會存在精度損失,但是只要波動平緩,不出現某個點或某些點的嚴重偏離,就說明精度損失是一致的[6-7],數據得到正確的計算。

圖4 數據比對值
輸入的數據序列長度為RxWp_shiftlen,四元組符號個數GroupNum=RxWp_shiftlen/4,提取這部分需要恢復移至前面的數據段:((GroupNum-j)×4+1):RxWp_shiftlen,同樣需要將發送端移至前面的數據段移至后面,提取這部分需要恢復移至后面的數據段:1:(GroupNum-j)×4,這樣重新移位拼組后得到最終的Rxfour_map()序列,即恢復發送端循環移位之前的序列。
首先得到輸入序列的長度TxPre_OutLen=length(dk),四元符號組個數Mquad=TxPre_OutLen/4,交織矩陣列數:colm=32,行數R=ceil(Mquad/32),空比特個數N=R×colm-Mquad,從交織表的第1列開始處理,i=1,對于第i列,由交織后序列(即輸入序列)及交織表計算得到發送端四元符號組交織前的數據流相應元素的存放位置c。分兩種情況計算:對于交織表的當下列k≤空比特個數N,c=((32-N+k-1)×4+d)+(b-1)×32×4,其中,b表示已處理的行數,d表示四元符號組元素序號;對于交織表的當下列k>空比特個數N,c=(k-N-1)×4+d+(b-1)×32×4。依次處理,直至處理完32列,即i=32。
解調部分采用軟解調,用16 bit表示1個輸入的軟信息,高8位為符號擴展位,低8位為有符號的軟信息。首先判斷是單天線、雙天線還是四天線,由于單天線和雙、四天線在預編碼上的處理不同,所以需要分別對判斷值賦值。解調時,復值符號的實部解調為奇比特位,虛部解調為偶比特位。得到的軟比特信息按先前的發送數據順序排列。


將0x80000001作為x1初始的32 bit賦給另一個寄存器。計算生成輸出序列長度循環次數放在寄存器B0中,x1,x2生成1600 bit所需要的循環次數放在B1中,按32 bit為單位,分別計算x1以及x2序列,并用新生成的32 bit去更新兩個32 bit寄存器,同時再將新生成的兩個32 bit數進行異或。根據計數器的值判斷生成的比特數是否為1600,若是,則將上面異或得到的結果作為擾碼序列的一個字輸出,作為尾比特進行處理。若c(i)的值為1,令解調輸出序列乘以-1;如果c(i)的值為0,令解調輸出序列乘以1,完成解擾。
在DSP軟件實現時,依據DCI格式支持的搜索空間類型:DCI 1C、3、3A 只支持公共搜索空間;DCI 1、1B、1C、1D、2、2A、2B只支持UE 專用搜索空間;DCI 0、1A 支持兩種搜索空間,本文設計了3個子函數分別對應上述3種情況的DCI格式盲檢測:int Blind_detectDCIcommonspace(void),int Blind_detectDCI_UEspecific(void),int Blind_detectDCI1A(void)。同時,將 RNTI值、傳輸模式[4]均設為枚舉型,將RNTI、傳輸模式、DCI格式都依次編號。
本文采用C語言對上述3個函數進行具體的DSP設計和實現,下面以DCI 1A為例,它支持2個搜索空間,其盲檢測過程對應子函數:int Blind_detectDCI1A(void),它的程序具體實現步驟為:
1)先搜索公共搜索空間。其搜索的起始位置編號為0的CCE,然后從該位置取8個CCE的數據,接著以格式1A的比特長度和8個CCE對應的比特長度進行解速率匹配,再進行Viterbi譯碼和16位CRC校驗。
2)若CRC校驗成功,則表明檢測到的DCI格式的比特長度跟DCI格式1A一樣,但是由于格式0和格式1A的長度相同,所有需要進一步判斷檢測到的數據首個比特的flag標志位,如flag為1,則判為格式1A,否則判為格式0,則轉入下一步。
3)若CRC校驗失敗,則CCE起始位置偏移8個CCE,再取8個CCE的數據,同理通過解速率匹配、Viterbi譯碼、16位CRC校驗模塊,如此循環,直到CRC校驗成功或循環次數達到PDCCH候選集2為止,若CRC校驗成功,則返回相應的DCI格式標志位為1。
4)若聚合等級L=8搜索完后,仍沒有成功,則重新設定搜索起始位置為編號為0的CCE,再按照步驟1、2、3的算法進行聚合等級L=4搜索。
5)若DCI格式1A在公共搜索空間搜索沒有成功,則轉入UE專用搜索空間進行搜索,即分別計算每個聚合等級L=8、4、2、1的起始位置,然后以該起始位置依次取L個CCE數據進行類似上述公共空間的盲檢測循環,直至搜索到DCI格式1A。
在CCS中實現時,將DCI 0的數據輸出首地址存為RxDCI0,將其他的DCI格式數據輸出首地址存為RxDCI1,直接尋址即可對數據流進行操作。對11種DCI格式分別依次賦值以區分盲檢測出的是哪種DCI格式,為DCI比特分離做準備,節省了寄存器的使用。
與發送端相對應,接收到解擾后的數據進行解速率匹配,然后解卷積編碼的子塊交織,最后得到3路比特流,作為Viterbi譯碼器的輸入數據。
輸入數據的首地址為RxDeRateMatch_InputData,輸入數據長度RxDeRateMatch_E分別存入寄存器A4,B4中。
1)解速率匹配:從盲檢搜索得到一串長度為E的數據,如果E≥K′(K′為比特收集的長度)說明發送端將數據重復了,則直接截取前K′個值作為解速率匹配用即可;如果E<K′,說明發送端將數據截短了,則將數據后面添加(K′-E)個0,然后再作為解速率匹配用的數據。
2)從1)得到的數據即為發送端比特收集后的K′個數據(K′=3D),因為發送端是打掉了NULL比特的(實際DSP實現時根本沒加入NULL比特),所以只需將這K′個數據拆分成相等的3路數據(K′/3),各自進行解子塊交織即可。在解子塊交織時可像發送端一樣,3路通過偏移地址并行操作,一并完成,最后輸出的數據仍然存放在一個首地址指示的存儲空間即可,以備Viterbi譯碼模塊調用。
3)解交織:首先應該有一個DCI格式的原始數據的長度值L,按照發送端添加CRC長度得到卷積編碼前的長度,亦即編碼后各路碼流的長度D,根據D≤(其中=32),求出交織矩陣的行數,然后求出NULL比特的個數:N=-D,從而構造
D出交織矩陣,將步驟2)中的K′/3個數據按列讀入、按行讀出進行反交織,最后解出各路數據。
Viterbi譯碼算法作為一種最大似然算法,譯碼的基本原理如圖5所示,依次標準的Viterbi譯碼算法總共分4個部分組成:分支和累積度量計算、加比選操作、幸存路徑存儲、路徑回溯。

圖5 Viterbi譯碼基本原理圖
根據MATLAB仿真程序算法,入口參數有:待譯碼的3路輸入數據的首地址、輸入數據長度(單路的長度)、輸出數據首地址、路徑度量state_metric動態表首地址、幸存路徑survivor_state動態表首地址、幸存路徑狀態序列state_sequence首地址。
需要開辟的空間(最小單元1 byte,每個數據占1 byte):
1)輸入矩陣input(當前狀態,下一狀態)=輸入比特,可由狀態轉移矩陣求得規律如下:
判斷公式:(下一狀態-(當前狀態>>1))>0,則輸出1;否則,輸出0。輸出矩陣output(當前狀態,輸入比特)=常量表64×2,DSP中存儲:在DSP實現中只需存儲0,2,4,6,8,…,60,62 行的第一個元素即可,共32 個值。
2)路徑度量state_metric一維表64×2。
3)幸存路徑survivor_state(當前時刻狀態,當前時刻)=64×3×K,K為碼塊長度,加比選遺留下所有路徑,DSP中存儲:先存第1列,再存第2列,以此類推,依據此表回溯,得到幸存路徑狀態序列state_sequence。
查找規則:前一時刻狀態的偏移地址=當前時刻×64+當前時刻狀態。
4)幸存路徑狀態序列state_sequence,一維表,即最后檢查此表碼塊首末狀態是否相同,按照此表譯碼輸出。
在DSP軟件實現中,在碼塊大小為50 bit時,通過在CCS3.3上仿真運行程序,在理想信道情況下,整個譯碼過程耗時46256個指令周期,此時因為輸入數據沒有錯誤,譯碼程序只迭代了一次就得到了正確譯碼輸出;在信道條件極差的情況下,譯碼程序需迭代3次才能譯碼輸出,此時譯碼耗時為132455個指令周期。TMS320C64x芯片的主頻一般為1 GHz,一個指令周期耗時為1 ns,因此本DSP實現可達到約377.49~1080.90 kbit/s的譯碼速率,且誤比特率相當低,滿足系統的譯碼要求。
計算得到輸入比特流長度lengthdecoder,通過CRC類型得知校驗多項式CrcPoly及多項式長度Lengthgen,根據加擾情況來確定加擾序列RNTI,并根據RNTI,將CRC序列進行解擾,將解擾后的CRC序列部分再次拼接到信息序列后,將組合后的序列和CRC校驗多項式進行按位異或,若結果為0,則CRC校驗正確,說明DCI為發送端所發送的;否則,盲檢測失敗。如果存在另一種DCI格式,則進入下一個DCI格式的判斷。
此程序的實現主要是利用移位的思想以及用于比特位存儲的寄存器的分配方式。對于DCI格式的每個信息,都設置為全局變量。通過尋址的方式來進行這些相應信息的比特位存儲。比如,在提取MCS信息后,將MCS這個全局變量的地址進行臨時存放,然后將信息存到這個地址指向的寄存器存儲空間即可。同理進行其他信息存儲的操作。
通過程序運行及調試,比對DCI的每個信息構成,得出的最終結果與發送端的DCI信息一致,從而驗證了UE端PDCCH處理方案的可行性。
在DSP實現中,通過指令并行,盡量優化程序循環體,減少或消除程序中的“NOP”指令[6-7],以常規 CP 為例,各個模塊的運算cycles數統計如表5所示。

表5 各模塊的執行周期數 cycle
可看出,當運用TMS320C64x DSP芯片實現時,完全可以滿足LTE系統實時性信號處理的要求。
本文從理論分析出發,根據TD-LTE系統特性,提出了一種簡單的DCI接收的實現方案,詳細講述了在DSP中的實現方法,并在TMS320C64x DSP芯片上加以實現。程序運行結果表明,提出的方案能夠滿足TD-LTE系統的需求,具有可行性和高效性。該方案已經應用于TD-LTE射頻一致性測試系統的開發中[8]。
[1]沈嘉,索士強,全海洋,等.3GPP長期演進(LTE)技術原理與系統設計[M].北京:人民郵電出版社,2008:280-315.
[2]3GPP TS 36.211 v9.1.0,3rd Generation partnership project;technical specification group radio access network;evolved universal terrestrial radio access(E-UTRA);physical channels and modulation(Release 9)[S].2010.
[3]3GPP TS 36.212 v9.1.0,3rd Generation partnership project;technical specification group radio access network;evolved universal terrestrial radio access(E-UTRA);multiplexing and channel coding(Release 9)[S].2010.
[4]張紅霜.LTE系統中的軟解調研究[J].電子測試,2010(6):6-9.
[5]3GPP TS 36.213 v9.0.0,3rd Generation partnership project;technical specification group radio access network.evolved universal terrestrial radio access(E-UTRA).physical layer procedures(Release 9)[S].2009.
[6]TI Incorporated.TMS320C64x/C6-4x+DSP CPU and Instruction Set ReferenceGuide[EB/OL].[2012-12-20].Http://www.ti.com.cn,2008.
[7]TI Incorporated.TMS320C6000系列DSP編程工具與指南[M].田黎育,何佩琨,朱夢宇,譯.北京:清華大學出版社,2006.
[8]3GPP TS 36.521 v9.1.0,3rd Generation partnership project;technical specification group radio access network;evolved universal terrestrial radio access(E-UTRA);user equipment(UE)conformance specification Radio transmission and reception Part 1:conformance testing;(Release 9)[S].2010.