一、PDCCH簡介
PDCCH是LTE系統中的一種物理信道(Physical Channel),它是DownLink控制信道,並且承載了用於UE上行和下行的控制信息。PDCCH使用了一種稱為「交織」(Interleaving)的技術,可以提高反轉碼(Turbo編碼、LDPC編碼)的效率,以提高整個系統的性能。
PDCCH使用了多重碼流(Multiple Streams)的方式,每個碼流都可以承載一個或多個控制信息,例如:DPCCH、DPCCH、UL-SCH等,每個碼流都有獨立的格子(Resource Blocks)用於傳輸數據,這種格子叫做Control Resource Block(CRB)。
下面是一個簡單的PDCCH結構圖:
+---------------------------+ | CCE | +---------------------------+ | | | PDCCH | | | +---------------------------+ | PCFICH | +---------------------------+
圖中,PCFICH(Physical Control Format Indicator Channel)是PDCCH的同步信道,用於傳輸當前發射的PDCCH所使用的子載波數(即控制信道的帶寬),CCE(Control Channel Element)是將PDCCH映射到物理資源上的最小單位,PDCCH則是承載控制信息的物理信道。
二、PDCCH參數詳解
1. CFI(Control Format Indicator)
CFI用於指示當前所用的PDCCH控制信道的無線資源塊(Resource Block)數量,以便UE可以正確地解碼控制信息。
通過多種傳輸方案,可以同時傳輸不同CFI的PDCCH,例如,在一個2×2 MIMO Antenna中,可以同時傳輸CFI為1和CFI為2的兩個PDCCH。
2. DCI(Downlink Control Information)格式
DCI格式是用於將控制信息傳輸到UE的二進位格式,常用的DCI格式包括:
(1)DCI Format 0
DCI格式0是用於向UE傳輸短控制信息的格式,例如:傳輸調度、傳輸應答、傳輸狀態更新等。DCI格式0的結構圖示如下:
+---------------------------+ | HARQ Process Number | +---------------------------+ | Transport Block | | | +---------------------------+ | Redundancy | | Version Number | +---------------------------+
其中,HARQ Process Number表示用於當前傳輸的提示,Transport Block表示傳輸的數據,Redundancy和Version Number是用於糾錯的冗餘信息。
(2)DCI Format 1
DCI格式1是用於告訴UE哪些資源塊可以用於傳輸數據,而且需要接收到哪些數據,同時還可以傳輸短控制信息。DCI格式1的結構示例如下:
+---------------------------+ | RNTI | +---------------------------+ | Transport Block | | | +---------------------------+ | Antenna Info | +---------------------------+ | DCI Format | +---------------------------+ | Redundancy | +---------------------------+
其中,RNTI(Radio Network Temporary Identifier)是用於標識UE的ID,Transport Block、Antenna Info、DCI Format和Redundancy與DCI格式0相同。
3、調製方式(QAM)
QAM表示傳輸數據的調製方式,常用的調製方式有QPSK、16QAM和64QAM。
4、碼率(Modulation and Coding Scheme)
碼率指將幀中的數據轉化為信號後所使用的碼流速率,常用的碼率有MCS1 ~ MCS28.
三、PDCCH解調和檢測
在UE端,PDCCH需要進行解調和檢測,以正確地解碼控制信息,並執行相關操作。解調和檢測的過程如下:
1、解調(Demodulation)
UE會接收到一個包含PDCCH的信號,然後將其解調成二進位,解調後的結果稱為符號,符號用於執行後續的解碼過程。
2、RAZ(Re-Addition of the Zeros)
該步驟是將PDCCH的碼組中零振幅插入到對應符號位置,以保證每個符號位寬都相等。
3、deinterleaving
該步驟是對RAZ後的數據進行「反交織」操作,以減少誤碼率。反交織使用了一種稱為「循環交織器」(Cyclic Interleaver)的演算法,它將RAZ後的二進位串分組,並將它們放到不同的位置上。下面是一個反交織過程的示例:
Before: 01101010111 After: 01011101101
4、解碼(Decoding)
在解調、RAZ和反交織之後,UE開始將數據解碼成有效信息。解碼使用了LDPC(Low Density Parity Check)技術、Turbo編碼技術等方法。
四、PDCCH代碼示例
1、生成PDCCH碼字
//生成PDCCH的碼字
int[] generatePdcchBits(int cfi, int[] dciBits, int[] cellRNTIBits, int[] nBitsDonlp1)
{
//頭部信息
int[] headerBits = generatePdcchHeaderBits(cfi, cellRNTIBits, nBitsDonlp1);
//計算總長度
int length = headerBits.length + dciBits.length;
//拼接碼字
int[] bits = new int[length];
System.arraycopy(headerBits, 0, bits, 0, headerBits.length);
System.arraycopy(dciBits, 0, bits, headerBits.length, dciBits.length);
//返回碼字
return bits;
}
//生成PDCCH頭部
int[] generatePdcchHeaderBits(int cfi, int[] cellRNTIBits, int[] nBitsDonlp1)
{
//頭部信息的長度和格式
int headerLength = 24;
int headerFormat = 0;
//將頭部信息轉換為二進位碼組
int[] bits = new int[headerLength];
bits[0] = headerFormat; //頭部信息格式
bits[1] = cfi; //控制信道無線資源塊數量
bits[2] = cellRNTIBits[0]; //RNTI位0
bits[3] = cellRNTIBits[1]; //RNTI位1
System.arraycopy(nBitsDonlp1, 0, bits, 4, nBitsDonlp1.length); //Donlp位數值
//返回頭部信息
return bits;
}
2、解調PDCCH碼字
//解調PDCCH碼字
int[] demodulatePdcchBits(int[] input, int bitsPerSymbol, double[] constellation)
{
//計算符號數量
int symbols = input.length / bitsPerSymbol;
//創建符號數組
int[] output = new int[symbols];
//解調各個符號
for (int i = 0; i < symbols; i++)
{
int begin = i * bitsPerSymbol;
int end = (i + 1) * bitsPerSymbol - 1;
//將當前符號的二進位碼組轉換為十進位數
String binary = "";
for (int j = begin; j <= end; j++)
binary += input[j];
int decimal = Integer.parseInt(binary, 2);
//使用星座圖將十進位數映射到複數上
int realIndex = decimal / (int) Math.sqrt(constellation.length);
int imagIndex = decimal % (int) Math.sqrt(constellation.length);
output[i] = complex(realIndex, imagIndex, constellation);
}
//返回解調後的符號數組
return output;
}
//將十進位實部和虛部的索引映射到複數上
int complex(int realIndex, int imagIndex, double[] constellation)
{
double real = constellation[realIndex];
double imag = constellation[imagIndex];
return (int) (real + imag * 1j);
}
3、反交織PDCCH碼字
//PDCCH反交織操作
int[] deinterleavePdcchBits(int[] input, int[] interleavingTable)
{
//創建反交織後的數據
int[] output = new int[input.length];
//按照交織表將數據從input中反交織到output中
for (int i = 0; i < input.length; i++)
output[interleavingTable[i]] = input[i];
//返回反交織後的數據
return output;
}
4、解碼PDCCH碼字
//解碼PDCCH碼字
int[] decodePdcchBits(int[] input, int maxIterations, LDPC ldpc)
{
//先進行糾錯解碼,再進行PDCCH碼字分解
int[] output = ldpc.decode(input, maxIterations);
int[] dciBits = extractDciBits(output);
//返回解碼後的控制信息
return dciBits;
}
//從PDCCH碼字中分離出控制信息
int[] extractDciBits(int[] input)
{
//獲取PDCCH格式
int pdcchFormat = input[0];
//獲取DCI位數
int nDCIBits = 0;
switch (pdcchFormat)
{
case 0:
nDCIBits = 22;
break;
case 1:
nDCIBits = 30;
break;
}
//獲取控制信息
int[] dciBits = new int[nDCIBits];
System.arraycopy(input, 24, dciBits, 0, nDCIBits);
//返回控制信息
return dciBits;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/272081.html
微信掃一掃
支付寶掃一掃