从MAC层接收上层数据开始的5G下行调度全流程
下面从数据到达 gNB 的 MAC 层开始,完整梳理下行调度的全过程。
一、数据从哪里来:上层到MAC
1.1 数据路径
下行用户面数据从核心网(UPF)出发,经过以下协议栈到达 MAC 层:
```
核心网 UPF
│
▼
GTP-U 隧道
│
▼
┌─────────────────────────────────────────┐
│ gNB 协议栈 │
│ │
│ SDAP (QoS Flow → Data Radio Bearer) │
│ │ │
│ PDCP (加密、完整性保护、头压缩、重排序) │
│ │ │
│ RLC (分段/重组、ARQ重传) │
│ │ │
│ MAC (调度、复用、HARQ) │
│ │ │
│ PHY (编码、调制、映射到物理资源) │
└─────────────────────────────────────────┘
```
1.2 各层对数据的处理
| 层 | 处理内容 |
|---|---|
| **SDAP** | 将 QoS Flow 映射到对应的 DRB(数据无线承载) |
| **PDCP** | 加密、完整性保护、ROHC 头压缩、分配 PDCP SN、重排序 |
| **RLC** | 根据调度授权大小进行分段或级联,生成 RLC PDU,维护 ARQ 重传 |
| **MAC** | 逻辑信道复用、调度、HARQ 管理 |
1.3 数据到达MAC的形式
RLC 层将数据以 **RLC PDU** 的形式递交给 MAC 层。MAC 层将其放入对应**逻辑信道(Logical Channel, LC)** 的缓冲区中。
每个逻辑信道对应一个无线承载,具有:
-
**优先级(Priority)** :1~16,值越小优先级越高
-
**PBR(Prioritized Bit Rate)** :保证的最小速率
-
**BSD(Bucket Size Duration)** :令牌桶大小
-
**逻辑信道组(LCG)** :用于 BSR 上报
二、MAC层的数据缓存与状态维护
2.1 逻辑信道缓冲区
MAC 层为每个逻辑信道维护一个**发送缓冲区**。当 RLC PDU 到达时:
```
LC1 缓冲区: PDU1 PDU2 PDU3 ...
LC2 缓冲区: PDU1 PDU2 ...
LC3 缓冲区: PDU1 ...
...
```
每个缓冲区中的待发送数据量决定了该逻辑信道的**缓存状态**。
2.2 逻辑信道优先级(LCP)机制
3GPP 定义了**逻辑信道优先级过程(Logical Channel Prioritization, LCP)** ,规则如下:
-
**先满足 PBR**:每个逻辑信道先按其 PBR 分配资源,按优先级从高到低;
-
**再按优先级分配剩余资源**:PBR 满足后,剩余资源按优先级从高到低分配;
-
**同一优先级内公平分配**;
-
**如果还有剩余资源**,可以继续分配给低优先级信道;
-
**禁止将低优先级数据复用到高优先级数据中**(除非高层允许)。
这个机制保证了:
-
高优先级业务(如 URLLC)优先发送;
-
低优先级业务(如 eMBB)不会被完全饿死;
-
PBR 保证了最低速率。
2.3 缓冲区状态报告(BSR)
UE 需要向 gNB 上报上行缓冲区状态(用 BSR)。但**下行方向**,gNB 自己就知道每个逻辑信道有多少数据待发送,不需要 UE 上报。gNB 的 MAC 层直接维护下行缓冲区状态。
三、调度触发
3.1 什么时候触发调度
gNB 的调度器在每个**调度周期**(通常每个时隙 Slot,甚至每个符号)被触发。触发条件包括:
-
每个时隙的调度时机到达;
-
有新的下行数据到达;
-
有 HARQ 重传需要安排;
-
有系统信息、寻呼、RAR 等需要发送;
-
有 CSI-RS、SSB 等参考信号需要发送。
3.2 调度器的输入
在每个调度周期开始时,调度器收集以下信息:
| 信息 | 来源 | 用途 |
|---|---|---|
| 各逻辑信道缓冲区数据量 | MAC 内部 | 决定哪些 UE 有数据要发 |
| CSI 报告(CQI/PMI/RI) | UE 上报 | 选择 MCS、MIMO 层数 |
| HARQ 反馈(ACK/NACK) | UE 上报 | 决定是否需要重传 |
| 调度请求/BSR | UE 上报 | 上行调度用,下行不需要 |
| QoS 参数 | 承载配置 | 决定调度优先级 |
| 历史调度信息 | 调度器内部 | 比例公平等算法使用 |
| 信道估计结果 | PHY | 辅助链路自适应 |
四、调度决策
4.1 用户选择
调度器根据**调度算法**为每个有下行数据的 UE 计算优先级,选出当前时隙要服务的 UE。
常用算法:
| 算法 | 优先级公式 | 特点 |
|---|---|---|
| 轮询(RR) | 无差别轮流 | 公平但吞吐低 |
| 最大 CQI | 正比于瞬时 CQI | 吞吐最高,边缘用户饿死 |
| 比例公平(PF) | `R_inst / R_avg` | 公平与吞吐折中 |
| 最大加权延迟 | 考虑 QoS 和延迟 | 适合 URLLC |
4.2 逻辑信道复用(LCP)
对于一个被选中的 UE,调度器根据 LCP 规则,决定:
-
分配多少资源给这个 UE;
-
这些资源中,各个逻辑信道分别占用多少;
-
生成一个 **MAC PDU**,其中包含多个逻辑信道的 **MAC SDU** 及其对应的 **MAC 子头**。
MAC PDU 结构:
```
┌──────────────────────────────────────────────┐
│ MAC 子头1 │ MAC 子头2 │ ... │ MAC SDU1 │ MAC SDU2 │ ... │ Padding │
└──────────────────────────────────────────────┘
```
每个 MAC 子头指示对应的 MAC SDU 来自哪个逻辑信道、长度多少。
4.3 链路自适应与MCS选择
调度器根据 UE 上报的 **CQI** 确定初始 MCS,再根据 **HARQ 反馈** 通过 OLLA 进行修正:
```
目标 SINR = CQI 映射的 SINR - OLLA_offset
```
-
收到 ACK → `OLLA_offset` 略微增大(降低 MCS,更保守);
-
收到 NACK → `OLLA_offset` 略微减小(提高 MCS,更激进);
-
长期使 BLER 逼近目标值(如 10%)。
4.4 资源分配
调度器为 UE 分配:
-
**频域资源**:多少 PRB,连续还是非连续;
-
**时域资源**:起始符号和持续长度(通过 SLIV 指示);
-
**空域资源**:多少 MIMO 层;
-
**码字**:单码字还是双码字。
4.5 TBS 计算
根据分配的 PRB 数、MCS、层数,查 3GPP 表格得到 **TBS(传输块大小)** 。
如果 TBS 小于 MAC PDU 大小,需要 RLC 重新分段;如果大于,则填充 Padding。
五、DCI生成与PDCCH发送
5.1 DCI 内容
调度决策被封装成 **DCI(下行控制信息)** ,常用格式:
-
**DCI Format 1_0**:回退格式,用于公共搜索空间;
-
**DCI Format 1_1**:常规下行调度;
-
**DCI Format 1_2**:URLLC 等特殊场景。
DCI 关键字段:
| 字段 | 含义 |
|---|---|
| 频域资源分配 | 哪些 PRB |
| 时域资源分配 | SLIV + K0 |
| MCS | 调制编码策略 |
| HARQ 进程号 | 哪个 HARQ 进程 |
| NDI | 新数据指示 |
| RV | 冗余版本 |
| 天线端口 | DMRS 配置 |
| TPC | 功控命令 |
5.2 PDCCH 发送
DCI 经过:
-
CRC 加扰(用 UE 的 C-RNTI);
-
信道编码(Polar 码);
-
速率匹配;
-
调制(QPSK);
-
映射到 PDCCH 的 CCE(控制信道单元)。
UE 在每个时隙的 **PDCCH 搜索空间**中盲检属于自己的 DCI。
六、PDSCH数据传输
6.1 PHY 层处理
MAC PDU 交给 PHY 层后:
-
**CRC 添加**;
-
**LDPC 编码**;
-
**速率匹配**;
-
**加扰**;
-
**调制**(QPSK/16QAM/64QAM/256QAM);
-
**层映射与预编码**;
-
**RE 映射**到 PDSCH 分配的时频资源;
-
**OFDM 符号生成**并发送。
6.2 与 DCI 的对应关系
PDSCH 的时频位置、MCS、层数等完全由同一时隙(或之前时隙)的 DCI 指示。UE 解码 PDCCH 后,才能知道去哪里接收 PDSCH。
七、HARQ反馈与重传
7.1 UE 侧
UE 接收 PDSCH 后:
-
解调、解码;
-
如果解码成功 → 上报 **ACK**;
-
如果解码失败 → 上报 **NACK**,并缓存软信息。
7.2 gNB 侧
gNB 收到 HARQ 反馈后:
-
**ACK**:释放 HARQ 进程,准备发送新数据;
-
**NACK**:在后续调度周期安排**重传**,使用相同 HARQ 进程号,切换 RV(冗余版本),UE 将重传数据与缓存进行**软合并**。
7.3 重传优先级
HARQ 重传通常比新传具有**更高优先级**,因为:
-
重传有延迟要求;
-
软合并能提高解码成功率;
-
避免 HARQ 进程耗尽。
八、完整流程时序图
```
上层数据到达
│
▼
┌─────────────────────────────────────────────────────┐
│ RLC 层:分段/级联,生成 RLC PDU │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ MAC 层:放入逻辑信道缓冲区 │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 调度器被触发(每 Slot) │
│ 1. 收集 CSI、HARQ 反馈、缓冲区状态 │
│ 2. 用户选择(PF 等算法) │
│ 3. LCP:逻辑信道复用,生成 MAC PDU │
│ 4. 链路自适应:确定 MCS │
│ 5. 资源分配:PRB、符号、层数 │
│ 6. TBS 计算 │
└─────────────────────────────────────────────────────┘
│
├──────────────────┐
▼ ▼
┌──────────────┐ ┌──────────────────────────────┐
│ 生成 DCI │ │ MAC PDU 交给 PHY │
│ → PDCCH 发送 │ │ → 编码/调制/映射 → PDSCH 发送 │
└──────────────┘ └──────────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────┐
│ UE:盲检 PDCCH → 解码 DCI → 接收 PDSCH → 解码 │
│ → 上报 HARQ 反馈(ACK/NACK) │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ gNB:收到 ACK → 释放 HARQ 进程 │
│ 收到 NACK → 安排重传 │
└─────────────────────────────────────────────────────┘
│
▼
循环到下一个调度周期
```
九、关键要点总结
-
**数据来源**:上层数据经 SDAP → PDCP → RLC 处理后,以 RLC PDU 形式到达 MAC,放入逻辑信道缓冲区。
-
**调度触发**:每个时隙(甚至每个符号)触发一次调度,调度器汇总 CSI、HARQ、缓冲区状态等信息。
-
**用户选择**:根据调度算法(PF 等)选出当前时隙服务的 UE。
-
**逻辑信道复用**:按 LCP 规则,将多个逻辑信道的数据复用一个 MAC PDU 中。
-
**链路自适应**:根据 CQI + HARQ 反馈确定 MCS,目标是使 BLER 逼近目标值。
-
**资源分配**:分配 PRB、符号、MIMO 层,计算 TBS。
-
**DCI 与 PDSCH**:调度决策封装成 DCI 经 PDCCH 发送,数据经 PDSCH 发送。
-
**HARQ 闭环**:UE 反馈 ACK/NACK,gNB 据此决定新传或重传,重传使用软合并提高成功率。
-
**循环往复**:每个时隙重复上述过程,形成闭环控制。
整个下行调度的本质是:**MAC 层调度器在每一个调度周期内,根据实时反馈和缓冲区状态,动态做出资源分配决策,通过 DCI 通知 UE,并通过 HARQ 闭环保证可靠性。**