首页 › deep-tech › PDCCH盲检:调度令的投递术

PDCCH 盲检原理:基站如何把"调度令"精准投递给终端

一、从一个生活场景说起

想象一个巨大的货运码头,每天有上万辆卡车进出。调度中心要给某辆特定的卡车派发一张"装货指令"(几号门、几点装、装多少)。问题是:调度中心该把指令写在哪里?如果直接在指令上写车牌号,卡车又怎么知道自己被点名了?

5G 基站(gNB)每毫秒就在面对这个问题——它要给成百上千个终端(UE)下发调度指令,告诉每个终端:"你的数据在第几个时隙、哪段频率资源上发送或接收"。这条指令就叫 DCI(Downlink Control Information,下行控制信息),而承载 DCI 的物理信道,就是本文的主角——PDCCH(Physical Downlink Control Channel,物理下行控制信道)。

关键难点在于:基站把 DCI 放在某个位置,但终端事先并不知道自己的指令在哪儿。终端必须"自己去找",这个寻找并尝试解码的过程,就是著名的盲检(Blind Decoding)。

理解了盲检,你就理解了 5G 控制面最精巧的一层设计——它用极低的信令开销,撑起了整个空口调度体系。

二、为什么不能"直接告诉"终端位置?

很多人第一次接触盲检都会问:基站为什么不直接发一条消息告诉终端"你的 DCI 在 X 位置"?

答案是——鸡生蛋的死循环。基站要通知终端,本身就需要一条"控制消息";而这条控制消息又该放在哪、又该如何被找到?那就又回到了原点。换句话说,传递"位置信息"这件事,本身就需要一个不依赖位置信息的机制。

5G 的解法是"约定 + 搜索": - 基站和终端事先约定好一组候选位置(搜索空间 Search Space); - 基站把 DCI 放进其中某一个候选位置; - 终端在每个候选位置逐个尝试解码,用 CRC 校验是否命中,命中即拿到属于自己的指令。

这就好比快递员和收件人约定好:"你的包裹只会出现在 A、B、C、D 四个柜子之一,挨个试就行"。基站不需要额外开销通知位置,终端靠"试 + 校验"自己定位。

三、资源单元的层层套娃:REG → CCE → CORESET

要理解盲检"在哪搜",先要搞懂控制信道的资源结构。这是一个层层嵌套的"套娃":

flowchart TB
    RE["RE 资源粒子<br/>(1 子载波 × 1 OFDM 符号)"]
    REG["REG 资源单元组<br/>= 1 PRB × 1 符号 = 12 RE"]
    CCE["CCE 控制信道单元<br/>= 6 REG = 72 RE"]
    PDCCH["一条 PDCCH<br/>= L 个 CCE (聚合等级)"]
    CORESET["CORESET 控制资源集<br/>(频域若干 PRB × 1~3 符号)"]
    SS["搜索空间 Search Space<br/>(规定何时、检哪些候选)"]

    RE --> REG
    REG --> CCE
    CCE --> PDCCH
    CORESET -.包含.-> CCE
    SS -.指向.-> CORESET

    style CORESET fill:#e3f2fd
    style SS fill:#fff3e0
    style CCE fill:#e8f5e9

逐层解释:

一个关键设计取舍是 CCE 到 REG 的映射分为非交织与交织两种:非交织时,一个 CCE 的 6 个 REG 集中在一起;交织时则被打散到整个 CORESET 带宽上,从而获得频率分集——即使局部频段被深衰落击中,CCE 的能量仍分散在其他子载波上,提高解码成功率。边缘用户或低聚合等级场景下,交织映射是提升鲁棒性的利器。

四、聚合等级 AL:用"冗余"换"可靠"

一条 PDCCH 占用 1、2、4、8 或 16 个 CCE,这就是聚合等级。为什么要有这么多个档次?

flowchart LR
    subgraph 近点["中心用户(信号强)"]
        A1["AL=1<br/>1 CCE<br/>最省资源"]
    end
    subgraph 中["普通用户"]
        A2["AL=4<br/>4 CCE<br/>平衡"]
    end
    subgraph 远["边缘用户(信号弱)"]
        A3["AL=8/16<br/>多 CCE 叠加能量<br/>最可靠"]
    end
    近点 --> 中 --> 远
    style A3 fill:#ffebee
    style A1 fill:#e8f5e9

直觉上:信道越差,就得多花点 CCE 来"叠能量",把同样的 DCI 重复编码到更多资源上,提升抗干扰能力。这和覆盖、链路自适应的思想一脉相承。聚合等级表如下:

聚合等级 AL CCE 数量 REG 数量 RE 数量 鲁棒性 典型场景
1 1 6 72 低 中心用户、高聚合预算
2 2 12 144 中低 近中点用户
4 4 24 288 中 常用等级、公共搜索空间
8 8 48 576 高 边缘用户、关键信令
16 16 96 1152 最高 极弱信道、特定专用场景

工程意义:聚合等级是网络优化中"PDCCH 阻塞/CCE 容量"问题的核心旋钮。CCE 是稀缺资源,一个 CORESET 的 CCE 总数有限,若边缘用户长期占用高 AL,会挤压其他用户,导致 PDCCH 容量瓶颈(表现为下行掉线、调度失败)。网优中常说的"PDCCH 受限"往往就源于此。

五、搜索空间:何时检、检哪些、检几次

CORESET 只画出了"地盘",但终端还得知道什么时候去地盘里找、找几号柜子。这部分信息由搜索空间(Search Space)补充定义。搜索空间会绑定一个 CORESET,并配置:监测周期、时隙偏移、时域符号位置、各聚合等级的候选数量等。

搜索空间分两大类,这是盲检体系最关键的"二分法":

flowchart TB
    SS["搜索空间 Search Space"]
    SS --> CSS["公共搜索空间 CSS<br/>所有终端都监听"]
    SS --> USS["终端专用搜索空间 USS<br/>仅特定终端监听"]
    CSS --> CSS1["广播消息 SIB1<br/>(SI-RNTI, AL 4/8)"]
    CSS --> CSS2["寻呼<br/>(P-RNTI)"]
    CSS --> CSS3["随机接入响应<br/>(RA-RNTI)"]
    USS --> USS1["该用户的专用调度<br/>(C-RNTI, AL 1/2/4/8/16)"]
    USS --> USS2["配置授权调度<br/>(CS-RNTI)"]
    style CSS fill:#e3f2fd
    style USS fill:#fff3e0

两类搜索空间的对比:

维度 公共搜索空间 CSS 终端专用搜索空间 USS
监听者 小区内所有(或一组)终端 单个特定终端
支持聚合等级 通常 {1, 2, 4, 8, 16}
典型承载 系统消息、寻呼、随机接入响应 专用上/下行调度、配置授权
标识加扰 RNTI SI-RNTI / P-RNTI / RA-RNTI 等 C-RNTI / CS-RNTI / 等
资源占用 共享、开销敏感 专用、可精修

设计取舍:公共消息用 CSS,是因为它要被许多人"广播式"接收,必须放在大家公知的固定位置;专用调度用 USS,则可以按需为每个用户裁剪监听时机,降低终端一直醒着检 PDCCH 的功耗。这与 DRX 省电机制(终端的省电呼吸术)紧密联动。

六、候选位置与哈希函数:把"投递地址"算出来

终端在某个 CORESET 里、某个聚合等级下,到底要从哪几个 CCE 起始位置开始试?这是盲检的数学核心。起始 CCE 索引由一个哈希函数确定,核心思想是:用终端的 RNTI 作为种子,让不同终端的候选位置在 CORESET 里"散开",尽量减少碰撞。

简化后的计算逻辑如下:

$$ Y_{p,n} = (A \cdot Y_{p,n-1}) \bmod D $$

$$ n_{CCE} = L \cdot \left{ \left( Y_{p,n} + \left\lfloor m \cdot \frac{N_{CCE,p}}{L \cdot M^{(L)}{s,\max}} \right\rfloor \right) \bmod \left\lfloor \frac{N \right\rfloor \right} $$}}{L

其中: - $A = 39827,\ D = 65537$,初值 $Y_{p,-1} = n_{RNTI}$(即用户的 RNTI); - $L$ 为聚合等级,$m$ 为候选序号($m = 0, 1, \dots, M^{(L)}{s,\max}-1$); - $N$ 为 CORESET $p$ 的 CCE 总数; - $n$ 为时隙号。

flowchart LR
    RNTI["终端 RNTI<br/>(身份种子)"] --> HASH["哈希函数<br/>Y = A·Y mod D"]
    SLOT["时隙号 n"] --> HASH
    HASH --> POS["起始 CCE 索引<br/>候选位置集合"]
    POS --> TRY1["候选 0 (AL=4)"]
    POS --> TRY2["候选 1 (AL=4)"]
    POS --> TRY3["候选 2 (AL=4)"]
    TRY1 --> DEC["逐个极化解码<br/>+RNTI 解扰+CRC"]
    TRY2 --> DEC
    TRY3 --> DEC
    style HASH fill:#fff3e0
    style DEC fill:#e8f5e9

为什么用哈希?因为基站和终端共享同一套规则与同一个 RNTI,双方算出的候选位置天然一致——基站知道该把 DCI 放进哪个候选,终端也知道该去哪个候选试。哈希的"散列"特性又让大量用户的候选位置均匀分布,降低不同用户 PDCCH 撞在同一批 CCE 上的概率。这是一种无信令协调的分布式资源对齐,设计非常优雅。

七、盲检完整流程:从唤醒到拿到指令

把前面的零件串起来,一个时隙里终端的盲检过程如下:

sequenceDiagram
    participant gNB as 基站 gNB
    participant UE as 终端 UE
    Note over gNB: 1. 选择目标 UE 的 RNTI<br/>2. 选定 CORESET+搜索空间<br/>3. 按哈希确定候选位置
    gNB->>UE: 在某个 CCE 候选位置<br/>放置 DCI(Polar编码+RNTI加扰+CRC)
    Note over UE: 唤醒后到 CORESET 监听
    loop 遍历各聚合等级/各候选
        UE->>UE: 取候选 CCE → 解映射REG<br/>→ Polar 解码 → 用 RNTI 解扰 CRC
        alt CRC 校验通过
            Note over UE: 命中!这是给我的
            UE->>UE: 解析 DCI 字段<br/>(频域位置/MCS/时隙等)
        else CRC 失败
            Note over UE: 不是我的,继续试下一个
        end
    end
    UE->>gNB: 按DCI去PDSCH收数据<br/>或PUSCH发数据

PDCCH 的信道编码用的是极化码(Polar Code)(这正是控制信道的"魔法"——详见极化码原理),并附加 24 比特 CRC。最关键的一步是:CRC 比特在发送前会被用户的 RNTI 加扰。于是终端在解出 CRC 后,用自己的 RNTI 再解扰,若校验通过,就说明"这条指令确实是发给我的"。RNTI 在这里既是身份标识,也是匹配钥匙。

常见 RNTI 及其用途:

RNTI 类型 用途 出现场景
C-RNTI 小区级临时标识,专用调度 连接态主调度
TC-RNTI 临时标识 随机接入后、冲突解决阶段
SI-RNTI 系统信息调度 SIB1 等广播消息
RA-RNTI 随机接入响应 MSG2 调度(详见随机接入原理)
P-RNTI 寻呼 寻呼消息调度(详见寻呼/DRX)
CS-RNTI 配置授权 半静态调度
INT-RNTI 抢占指示 通知 URLLC 抢占了某用户资源

八、盲检预算:终端算力的"天花板"

逐个候选去试,听上去很费算力。事实上终端每时隙能尝试的解码次数是有上限的——这就是盲检预算(Blind Decode Budget)。标准对单载波单子载波间隔场景规定了典型上限:每时隙最多约 44 次盲检、最多 56 个非重叠 CCE(具体随子载波间隔成倍放大)。

这个上限的存在有两个原因: 1. 限制终端芯片复杂度与功耗——否则终端每时隙要穷举海量组合,电池和算力吃不消; 2. 间接限制基站的 CCE 调度密度——基站不能把一个时隙的资源塞满给一个用户,否则终端解不过来。

因此基站的调度器在做"CCE 分配"时,必须同时兼顾CCE 容量(物理资源)和盲检预算(终端能力)两个约束。

九、对比 4G:NR 为何重新设计控制信道

了解 LTE 的工程师会注意到,NR 把 LTE 里的 PCFICH、PHICH 两个控制信道砍掉了:

对比项 LTE 5G NR
控制区域指示 PCFICH 显式指示占几个符号 CORESET 显式配置时频区域,无需 PCFICH
HARQ ACK 反馈 PHICH 专用信道 复用到 PUCCH,无 PHICH
控制区粒度 全小区、固定带宽前几个符号 按 UE/按 BWP 灵活配置 CORESET
聚合等级 {1,2,4,8} {1,2,4,8,16}
波束支持 弱 CORESET 可关联 TCI 状态,支持波束赋形

LTE 的控制区是全小区广播式、固定占满带宽前几个符号;NR 改成可按用户、按带宽部分(BWP)灵活裁剪,甚至能跟随波束指向不同的方向。这种"去中心化、可配置"的设计,是 NR 灵活性与前传/回传资源效率的关键来源。

十、现网体现与工程师调试要点

这个原理在现网和日常工作中如何体现?

  1. 覆盖与"掉线"排查:边缘用户反复盲检失败(无 DCI 命中),表现就是"手机有信号但上不了网、频繁掉线"。日志里看 PDCCH DTX / BLER 飙升,就要查 CORESET 配置、聚合等级、波束质量。
  2. PDCCH 容量受限:高负载小区里 CCE 被高 AL 占满,表现为"调度数上不去、用户速率被压"。需调整 CORESET 带宽、聚合等级门限、或扩容。
  3. 信令跟踪:用终端/基站日志或抓包工具,定位一条 DCI 的 RNTI、DCI 格式、聚合等级、CCE 起始位置,验证调度是否正确下发。对协议开发与网优都是基本功。

常见调试陷阱: - 误以为 DCI 位置固定:实际位置每时隙由哈希变化(依赖时隙号),不能靠"固定偏移"去找; - 混淆 CSS 与 USS 的聚合等级:CSS 不支持 AL=1/2,调试时若期望低 AL 而配置在 CSS 上,会扑空; - 忽视 RNTI 解扰:CRC 通过但 RNTI 不匹配,仍不是本终端的指令,需用对的 RNTI 才能确认归属。

常见问题

Q1: 既然叫"盲检",终端是不是完全随机乱试? A: 不是。终端在"约定好的候选位置"集合内试,位置由 CORESET、搜索空间、聚合等级和哈希函数精确确定,是有规律、有边界的搜索,并非无序穷举。

Q2: 聚合等级是终端选的还是基站选的? A: 由基站决定。基站根据该用户的信道质量、CCE 余量、鲁棒性需求选择 AL,并放进对应的候选位置。终端只是被动地在所有可能 AL 的候选上尝试解码。

Q3: 盲检会不会解到"别人"的 DCI? A: 不会命中。即使解到了他人的位置,CRC 用自己 RNTI 解扰后校验必然失败,终端会跳过。RNTI 是天然的"身份过滤器"。

Q4: 一个时隙终端最多能解几次?为什么不能更多? A: 受盲检预算约束(典型单载波约 44 次/时隙)。这是为了限制终端芯片算力与功耗,同时约束基站调度密度。

Q5: CORESET 为什么不占满整个带宽? A: 控制区只占一小部分时频资源,把大部分留给业务数据(PDSCH/PUSCH);且 NR 支持按 BWP/按波束灵活配置 CORESET,便于在覆盖、容量、波束间权衡,而非 LTE 那种全带宽固定占用。

参考来源

  1. ShareTechnote - 5G NR PDCCH — 业界公认的 5G 教程站,含 PDCCH/CORESET/DCI 详图与示例
  2. ShareTechnote - 5G Resource Allocation Unit (CCE/REG/AL) — REG/CCE/聚合等级的资源单元图解
  3. MathWorks - Downlink Control Processing and Procedures — MATLAB 5G 工具箱对盲检与 DCI 处理的权威说明
  4. toolkit5G - Search Space, CORESET and Blind Decoding of PDCCH — 学术开源工具包的 PDCCH 盲检教程
  5. sqimway - PDCCH CCE Index — 候选 CCE 起始索引哈希公式与在线计算
  6. ranbits - PDCCH Blind Decoding Explained — 5G 从零起步系列对盲检流程与预算的通俗讲解
  7. 5G NR PDCCH 结构与 4G 对比 - nxgconnect — PDCCH 结构、DCI 格式及与 LTE 的差异对比

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入