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/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

发表回复

登录后才能评论