PDCCH的詳細闡述

一、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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-17 00:08
下一篇 2024-12-17 00:08

相關推薦

  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25
  • Resetful API的詳細闡述

    一、Resetful API簡介 Resetful(REpresentational State Transfer)是一種基於HTTP協議的Web API設計風格,它是一種輕量級的…

    編程 2025-04-25
  • AXI DMA的詳細闡述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基於AMBA…

    編程 2025-04-25
  • 關鍵路徑的詳細闡述

    關鍵路徑是項目管理中非常重要的一個概念,它通常指的是項目中最長的一條路徑,它決定了整個項目的完成時間。在這篇文章中,我們將從多個方面對關鍵路徑做詳細的闡述。 一、概念 關鍵路徑是指…

    編程 2025-04-25
  • neo4j菜鳥教程詳細闡述

    一、neo4j介紹 neo4j是一種圖形資料庫,以實現高效的圖操作為設計目標。neo4j使用圖形模型來存儲數據,數據的表述方式類似於實際世界中的網路。neo4j具有高效的讀和寫操作…

    編程 2025-04-25
  • c++ explicit的詳細闡述

    一、explicit的作用 在C++中,explicit關鍵字可以在構造函數聲明前加上,防止編譯器進行自動類型轉換,強制要求調用者必須強制類型轉換才能調用該函數,避免了將一個參數類…

    編程 2025-04-25
  • HTMLButton屬性及其詳細闡述

    一、button屬性介紹 button屬性是HTML5新增的屬性,表示指定文本框擁有可供點擊的按鈕。該屬性包括以下幾個取值: 按鈕文本 提交 重置 其中,type屬性表示按鈕類型,…

    編程 2025-04-25
  • crontab測試的詳細闡述

    一、crontab的概念 1、crontab是什麼:crontab是linux操作系統中實現定時任務的程序,它能夠定時執行與系統預設時間相符的指定任務。 2、crontab的使用場…

    編程 2025-04-25
  • Vim使用教程詳細指南

    一、Vim使用教程 Vim是一個高度可定製的文本編輯器,可以在Linux,Mac和Windows等不同的平台上運行。它具有快速移動,複製,粘貼,查找和替換等強大功能,尤其在面對大型…

    編程 2025-04-25
  • 網站測試工具的詳細闡述

    一、測試工具的概述 在軟體開發的過程中,測試工具是一個非常重要的環節。測試工具可以快速、有效地檢測軟體中的缺陷,提高軟體的質量和穩定性。與此同時,測試工具還可以提高軟體開發的效率,…

    編程 2025-04-25

發表回復

登錄後才能評論