跳转至

08-5G PDCCH 编码解码 - Polar 编码与 SCL 解码

本文档详细解释 5G NR PDCCH 的 Polar 编码和解码流程


一、编码流程概述

1.1 完整编码链

1
2
3
4
5G DCI 编码流程 (gNB 发送):

DCI 比特 → CRC 附加 → RNTI 加扰 → Polar 编码 → 速率匹配
   → 加扰 → QPSK 调制 → 层映射 → 预编码 → 资源映射

1.2 与 LTE 的关键差异

步骤 LTE 5G NR 差异说明
CRC 16 bits 24 bits 5G 检错更强
编码 TBCC Polar 5G 短码性能最优
交织 块交织 + 循环移位 5G 简化设计
调制 QPSK QPSK 相同

二、CRC 附加

2.1 CRC-24 多项式

5G 使用 CRC-24C:
─────────────────────────────────────────────────────────
g_CRC(x) = x^24 + x^23 + x^18 + x^17 + x^14 + x^11 
         + x^10 + x^7 + x^6 + x^5 + x^4 + x^3 + x + 1

十六进制表示:0x864CFB

计算过程:
输入:DCI 比特序列 a_0, a_1, ..., a_{A-1}
输出:CRC 比特 p_0, p_1, ..., p_{23}

附加后总长度:
L = A + 24
─────────────────────────────────────────────────────────

2.2 双 CRC 机制 (可选)

1
2
3
4
5
6
7
8
大 DCI 使用双 CRC:
─────────────────────────────────────────────────────────
如果 DCI 长度 > 特定阈值:
  附加 CRC-24A (用于码块分割)
  附加 CRC-24C (用于传输块)

PDCCH 通常使用单 CRC-24C
─────────────────────────────────────────────────────────

三、Polar 编码原理

3.1 信道极化

Polar 码核心思想:
─────────────────────────────────────────────────────────
信道极化现象:
- N 个独立信道通过编码
- 极化为两类子信道:
  * 完美信道 (容量→1)
  * 完全噪声信道 (容量→0)

信息比特放在完美子信道
冻结比特放在噪声子信道
─────────────────────────────────────────────────────────

图示 (N=4):
输入:[u0, u1, u2, u3]
    Polar 编码
输出:[x0, x1, x2, x3]

子信道可靠性排序:
u3 > u2 > u1 > u0 (可靠性递增)

选择:
u0, u1 = 冻结比特 (固定为 0)
u2, u3 = 信息比特

3.2 生成矩阵

Polar 码生成矩阵:
─────────────────────────────────────────────────────────
G_N = B_N × F^⊗n

其中:
N = 2^n (码长)
F = [1 0; 1 1] (核矩阵)
F^⊗n = F 的 n 次克罗内克积
B_N = 比特反转置换矩阵

示例 (N=4):
F^⊗2 = F ⊗ F
     = [1 0 0 0]
       [1 1 0 0]
       [1 0 1 0]
       [1 1 1 1]
─────────────────────────────────────────────────────────

3.3 编码公式

Polar 编码:
─────────────────────────────────────────────────────────
x = u × G_N

其中:
u = [信息比特,冻结比特] (长度 N)
G_N = 生成矩阵 (N×N)
x = 编码后比特 (长度 N)

冻结比特位置:
由可靠性排序确定
通常固定为 0
─────────────────────────────────────────────────────────

3.4 编码示例 (N=8)

参数:
N = 8, K = 4 (码率 1/2)
信息比特位置:{3, 5, 6, 7}
冻结比特位置:{0, 1, 2, 4}

输入:
u = [0, 0, 0, u3, 0, u5, u6, u7]
    ↑冻结↑  ↑信息↑

编码:
x = u × G_8

输出:
x = [x0, x1, x2, x3, x4, x5, x6, x7]

四、5G Polar 码设计

4.1 码长选择

5G PDCCH 支持码长:
─────────────────────────────────────────────────────────
N ∈ {256, 512, 1024}

选择依据:
- DCI 大小 + CRC 长度
- 可用 CCE 容量
- 目标码率

示例:
DCI 60 bits + CRC 24 bits = 84 bits
选择 N = 512
码率 R = 84/512 ≈ 1/6
─────────────────────────────────────────────────────────

4.2 冻结比特图案

冻结比特图案设计:
─────────────────────────────────────────────────────────
5G 规范定义冻结比特位置表:

对于每个 (N, K) 组合:
- 预定义可靠性序列
- 选择最可靠的 K 个位置放信息比特
- 其余 N-K 个位置放冻结比特

示例 (N=512, K=84):
信息比特位置:{特定 84 个索引}
冻结比特位置:{剩余 428 个索引}
─────────────────────────────────────────────────────────

五、速率匹配

5.1 速率匹配流程

5G Polar 速率匹配:
─────────────────────────────────────────────────────────
步骤:
1. 子块交织
2. 比特收集 (循环缓冲器)
3. 比特选择 (打孔/缩短/重复)

输出长度:
E = N_CCE × N_bits_per_CCE

AL-1: E = 144 bits
AL-2: E = 288 bits
AL-4: E = 576 bits
AL-8: E = 1152 bits
AL-16: E = 2304 bits
─────────────────────────────────────────────────────────

5.2 子块交织

Polar 子块交织:
─────────────────────────────────────────────────────────
输入:编码比特 x_0, x_1, ..., x_{N-1}

交织:
π(k) = (P(ceil(k/R)) + floor(k/(N/R))) mod N

其中:
R = 子块数 (通常 32)
P = 置换模式

输出:交织后比特
─────────────────────────────────────────────────────────

六、SCL 解码

6.1 解码算法

SCL (Successive Cancellation List) 解码:
─────────────────────────────────────────────────────────
SC 解码问题:
- 串行解码,错误传播
- 一旦错误,无法纠正

SCL 改进:
- 维护 L 条候选路径
- 每比特选择 L 条最佳路径
- 最终 CRC 校验选择最佳

复杂度:
O(L × N × log N)

L 典型值:4, 8, 16
─────────────────────────────────────────────────────────

6.2 SCL 解码流程

SCL 解码步骤:
─────────────────────────────────────────────────────────
1. 初始化
   路径数 L
   所有路径度量 = 0

2. 逐比特解码
   for bit i = 0 to N-1:
     如果 i 是冻结比特:
       强制设为 0
     否则:
       每条路径分支为 2 条 (0 和 1)
       计算路径度量
       选择 L 条最佳路径

3. CRC 校验
   对 L 条路径进行 CRC 校验
   选择 CRC 通过的最佳路径
   如果都失败,选择度量最佳路径

4. 输出
   提取信息比特
─────────────────────────────────────────────────────────

6.3 路径度量计算

路径度量 (Path Metric):
─────────────────────────────────────────────────────────
PM_l = Σ log(P(y_i | x_i^l))

其中:
l = 路径索引
y_i = 接收 LLR
x_i^l = 路径 l 的第 i 比特

简化计算:
PM_l = Σ |LLR_i| × (1 - 2×bit_i)
─────────────────────────────────────────────────────────

七、解码伪代码

def scl_decode(llr, N, K, frozen_positions, L=8):
    """
    SCL 解码实现 (简化版)
    """
    # 初始化路径
    paths = [{'bits': [], 'metric': 0}]

    # 逐比特解码
    for i in range(N):
        new_paths = []

        # 对每条路径
        for path in paths:
            if i in frozen_positions:
                # 冻结比特,强制为 0
                new_path = path.copy()
                new_path['bits'].append(0)
                new_path['metric'] += update_metric(llr[i], 0)
                new_paths.append(new_path)
            else:
                # 信息比特,分支为 2
                for bit in [0, 1]:
                    new_path = path.copy()
                    new_path['bits'].append(bit)
                    new_path['metric'] += update_metric(llr[i], bit)
                    new_paths.append(new_path)

        # 选择 L 条最佳路径
        new_paths.sort(key=lambda p: p['metric'])
        paths = new_paths[:L]

    # CRC 校验选择最佳
    for path in paths:
        if crc_check(path['bits'], crc_length=24):
            return extract_info_bits(path['bits'])

    # 无 CRC 通过,返回最佳
    return extract_info_bits(paths[0]['bits'])

八、与 TBCC 对比

8.1 性能对比

TBCC vs Polar (BLER vs SNR):
─────────────────────────────────────────────────────────
SNR (dB) | TBCC BLER | Polar BLER | 增益
---------|-----------|------------|------
  -5     |  0.5      |  0.3       | 2 dB
  -3     |  0.2      |  0.08      | 2 dB
  -1     |  0.05     |  0.01      | 2 dB
   0     |  0.01     |  0.001     | 1 dB

Polar 码优势:
- 短码性能最优
- 理论可达香农限
- 适合控制信道 (小载荷)
─────────────────────────────────────────────────────────

8.2 复杂度对比

解码复杂度:
─────────────────────────────────────────────────────────
TBCC (Viterbi):
- 状态数:2^(K-1) = 64 (K=7)
- 复杂度:O(N × 2^K)
- 延迟:小

Polar (SCL):
- 路径数:L = 8
- 复杂度:O(L × N × log N)
- 延迟:稍大

实际实现:
- TBCC 更成熟,复杂度低
- Polar 性能优,复杂度可接受
─────────────────────────────────────────────────────────

九、本章小结

关键要点

  1. CRC-24: 24 位 CRC,检错能力更强
  2. Polar 编码: 基于信道极化,短码性能最优
  3. 生成矩阵: G_N = B_N × F^⊗n
  4. 冻结比特: 放在噪声子信道,固定为 0
  5. SCL 解码: 维护 L 条路径,CRC 选择最佳
  6. 速率匹配: 子块交织 + 循环缓冲器

下一章预告

下一章 09-5G-CORESET 详解.md 将深入讲解: - CORESET 配置参数 - 时频资源结构 - REG Bundle 与交织 - 实例分析


文档版本:v1.0
最后更新:2026-03-27
作者:AI Assistant