<!-- title: 5G BWP带宽部分切换机制全链拆解 -->
<!-- domain: ran -->

# 5G NR BWP 带宽部分切换机制全链拆解：从 RRC 配置到 DCI/定时器/MAC CE 四重触发

## 一、为什么 5G NR 必须引入 BWP：设计意图的三个支点

在 LTE 时代，UE 始终在**整个小区带宽**（Cell Bandwidth，最高 20 MHz）上收发与监听，这种"全带宽常开"模式在 5G NR 面临三重挑战：

1. **载波带宽激增**：FR1 单载波可达 100 MHz（FR2 达 400 MHz），若 UE 全带宽常开监听 PDCCH，基带与射频功耗将不可接受。
2. **UE 能力异构**：物联网/可穿戴终端的射频前端可能只支持 5 MHz~20 MHz，无法处理整载波。
3. **混合数值结构（Mixed Numerology）**：同一载波上 eMBB 用 30kHz SCS、URLLC 用 60kHz SCS，需要在频域上分区承载。

BWP（Bandwidth Part，带宽部分）由此被引入（TS 38.211、TS 38.300）。其核心定义是：**载波中一组连续的 PRB，由起始位置、带宽、SCS 与 CP 共同定义**；每个 UE 在任意时刻下行只激活 1 个 DL BWP、上行只激活 1 个 UL BWP，但 RRC 可为每个方向配置最多 4 个 BWP。BWP 不是 LTE 的"窄带"概念，而是一套**带状态机的带宽自适应子系统**。

理解 BWP 的关键不在定义，而在**切换机制**——gNB 如何、何时把 UE 从一个 BWP 搬到另一个 BWP。这正是本文拆解的核心。

## 二、BWP 的四种类型与生命周期

在进入切换机制前，必须厘清四个常被混淆的概念：

| BWP 类型 | 来源 | 关键 IE | 典型带宽 | 用途 |
|---|---|---|---|---|
| **Initial BWP（初始）** | SIB1 广播 | `BWP`（公共配置） | 通常较窄，含 SSB/CORESET#0 | 初始接入、Msg2/Msg4、寻呼、系统消息 |
| **Dedicated BWP（专用）** | RRC Reconfiguration | `BWP-Downlink/Dedicated` | 较宽（如 40~100 MHz） | RRC 连接态业务收发 |
| **Default BWP（默认）** | RRC 配置 | `defaultDownlinkBWP-Id` | 通常与 Initial 相同或介于两者 | 定时器超时后的回退落点 |
| **Active BWP（激活）** | 运行时态 | 无独立 IE（由状态决定） | 取决于当前激活的 bwp-Id | 唯一正在收发的 BWP |

> 注意：若 RRC 未配置 `defaultDownlinkBWP-Id`，则**默认 BWP = 初始 BWP**（TS 38.213 §12）。这是一个高频踩坑点。

BWP 生命周期：UE 开机后驻留 Initial BWP（来自 SIB1）→ 建立 RRC 连接后，gNB 通过 `Reconfiguration` 下发 1~3 个 Dedicated BWP 并指定首个激活 BWP → 此后业务流量驱动 UE 在多个 BWP 间动态切换 → 长时间无调度时由 `bwp-InactivityTimer` 回退到 Default BWP。

```mermaid
stateDiagram-v2
    [*] --> InitialBWP: 开机,从SIB1获取
    InitialBWP --> DedicatedBWP_Active: RRC Reconfig<br/>(firstActiveDownlinkBWP-Id)
    state DedicatedBWP_Active {
        [*] --> WideBWP
        WideBWP --> NarrowBWP: DCI BWP Indicator
        NarrowBWP --> WideBWP: DCI BWP Indicator
    }
    DedicatedBWP_Active --> DefaultBWP: bwp-InactivityTimer 超时
    DefaultBWP --> DedicatedBWP_Active: DCI 调度到达
    DedicatedBWP_Active --> InitialBWP: RRC Release / 去连接
    InitialBWP --> [*]
```

## 三、四种切换触发机制全链拆解（TS 38.213 §12 核心）

TS 38.213 第 12 章 "Bandwidth part operation" 是切换机制的权威来源。规范明确：UE 通过**四条路径**之一完成 BWP 切换。下图给出决策全景：

```mermaid
flowchart TD
    A[UE 当前处于 Active BWP] --> B{触发来源?}
    B -->|PDCCH DCI 1_1/0_1| C[路径1: DCI 指示]
    B -->|无调度时间过长| D[路径2: bwp-InactivityTimer]
    B -->|SCell 增删/切换| E[路径3: RRC reconfig-with-sync]
    B -->|SCell 激活| F[路径4: MAC CE 携带 bwp-Id]
    C --> G{BWP Indicator 是否指向新 BWP?}
    G -->|是| H[在 BWP switching delay 后切换]
    G -->|否| I[保持,并重启定时器]
    D --> J[超时 → 回退 Default BWP]
    E --> K[按 firstActiveDownlinkBWP-Id 激活]
    F --> L[激活 MAC CE 指示的 SCell BWP]
    H --> M[新 Active BWP]
    J --> M
    K --> M
    L --> M
```

### 路径 1：DCI 动态指示（最快、最常用）

这是承载动态业务的核心路径。在 **DCI Format 1_1**（DL 调度）和 **DCI Format 0_1**（UL 调度）中包含一个 **Bandwidth part indicator** 字段（TS 38.212、TS 38.213 §12）。该字段长度由配置的 BWP 数量决定：

- 配置 1 个 BWP → 0 bit（无该字段）
- 配置 2 个 BWP → 1 bit
- 配置 3~4 个 BWP → 2 bit

**关键行为（TS 38.213 §12）**：
- 若 DCI 1_1 的 BWP Indicator 指向的 DL BWP ≠ 当前 Active DL BWP，UE 将其设为新 Active DL BWP；
- 若 DCI 0_1 的 BWP Indicator 指向的 UL BWP ≠ 当前 Active UL BWP，UE 设为新 Active UL BWP；
- 一旦发生切换，UE 在 **BWP switching delay**（见第五节）期间不期望收发 PDSCH/PUSCH；
- **收到任意调度 DCI 都会重启 `bwp-InactivityTimer`**（无论是否触发切换）。

设计意图：让 gNB 在每一个 TTI 都能基于瞬时 buffer/业务类型把 UE "甩"到最合适的带宽——大包走宽 BWP（高吞吐），小包/keepalive 走窄 BWP（省电），实现**亚毫秒级带宽自适应**。

### 路径 2：bwp-InactivityTimer 非激活回退（省电主引擎）

这是 BWP 实现终端省电的"安全网"。机制（TS 38.213 §12、TS 38.321 §5.15.2）：

- RRC 为每个 Serving Cell（CA 下为 SpCell）配置 `bwp-InactivityTimer`，取值为 `ms2, ms4, ms10, ms40, ms100, ms640, ms2560...` 等离散值；
- UE 在 Active BWP 上**未检测到任何调度 DCI**（DCI 0_0/0_1/1_0/1_1 指向本 BWP）持续超过该时长 → 定时器超时；
- 超时动作：**切换到 Default BWP**（若无 Default 配置则回退 Initial BWP）。

定时器的启停规则是抓包排错的重点：
- **重启触发**：检测到调度 DCI、收到激活 BWP 的 MAC CE、RRC 配置；
- **停止触发**：BWP 切换进行中、RRC 重新配置过程。

设计意图：业务突发结束后，gNB 可能"忘了"把 UE 拉回窄带，定时器作为**UE 侧自主省电兜底**，确保 UE 不会长期卡在宽 BWP 白白耗电。

### 路径 3：RRC 重配置（含 reconfiguration with sync / 切换）

通过 `RRCReconfiguration`（TS 38.331）下发或修改 BWP 配置，典型场景：
- 初始 RRC 连接建立后下发 Dedicated BWP；
- **切换（HO）/ PCell 变更**（reconfiguration with sync）时，目标小区的 `firstActiveDownlinkBWP-Id` 直接指定切换后激活的 BWP；
- SCell 增删；
- 数值结构变更（如新增 60kHz SCS 的 BWP）。

RRC 路径是**半静态**的，切换发生在 RRC 过程边界，时延较大（几十 ms 级），不适合承载动态业务。

### 路径 4：MAC CE 激活（主要服务于 SCell）

这是最容易被误解的一条路径。TS 38.321 §5.15 中，**SCell Activation/Deactivation MAC CE**（LCID 标识）携带要激活的 SCell 信息，并在 R16+ 中可**附带该 SCell 上应激活的 BWP index**。流程：
- gNB 发送 SCell Activation MAC CE → UE 激活该 SCell 并按 CE 指示激活对应 BWP → 上报对应的 HARQ ACK。

> 关键区分：**SpCell（主小区）的 BWP 切换不走 MAC CE，而是 DCI/定时器/RRC**。MAC CE 路径本质是 SCell 激活流程的副产物，不要把它和 DCI 路径混淆。

## 四、四路径横向对比

| 维度 | DCI 指示 | bwp-InactivityTimer | RRC 重配置 | MAC CE |
|---|---|---|---|---|
| 触发主体 | gNB（L1/L2 调度器） | UE 自主 | gNB（RRC 层） | gNB（MAC 层） |
| 规范出处 | TS 38.213 §12 / TS 38.212 | TS 38.213 §12 / TS 38.321 §5.15 | TS 38.331 | TS 38.321 §5.15/§5.18 |
| 典型时延 | 亚 ms~数 ms | 取决于定时器（ms~秒） | 几十 ms | 几 ms |
| 控制开销 | DCI 内字段（0~2 bit） | 无信令 | RRC 消息（大） | MAC CE（小） |
| 主要场景 | 动态业务带宽适配 | 无业务回退省电 | 配置变更/切换 | CA 下 SCell 激活 |
| 作用对象 | SpCell DL/UL BWP | SpCell Active BWP | 所有 BWP 配置 | 主要 SCell BWP |

## 五、BWP 切换时延与资源冻结窗口

切换并非瞬时。TS 38.213 §12 定义了 **BWP switching delay**：UE 在切换触发后到新 BWP 真正可用之间，存在一个**冻结窗口**，期间 UE 不期望在旧/新 BWP 上收发 PDSCH/PUSCH（尤其当两个 BWP 的 SCS 或频域相距较远时）。

时延量级与 SCS 配置 μ 相关（μ=0→15kHz，μ=1→30kHz……）：SCS 越大，时隙越短，对应绝对时间越短，15kHz 对应约 **1ms 量级**的切换间隙；相同 SCS、相邻频域的两个 BWP 切换可做到接近零间隙（部分能力强的 UE 支持）。

工程含义：gNB 调度器在发起 BWP 切换的 DCI 之后，**必须预留切换延迟窗口**，不能在该窗口内立即下发 PDSCH/PUSCH 调度，否则 UE 会漏收。这是吞吐抖动与 HARQ 失败的隐蔽诱因。

## 六、关键 IE 结构与参数详解（TS 38.331）

BWP 的 RRC 配置层级是理解抓包的基础：

```mermaid
flowchart TD
    SC[ServingCellConfig] --> BID[defaultDownlinkBWP-Id]
    SC --> BIT[bwp-InactivityTimer]
    SC --> FAB[firstActiveDownlinkBWP-Id]
    SC --> DLBWP[BWP-Downlink 列表 1..4]
    DLBWP --> BWPD[BWP-Downlink]
    BWPD --> BWPID[bwp-Id 0..3]
    BWPD --> COM[BWP-DownlinkCommon]
    BWPD --> DED[BWP-DownlinkDedicated]
    COM --> GBWP[genericBWP: BWP]
    GBWP --> LB[locationAndBandwidth]
    GBWP --> SCS[subcarrierSpacing]
    GBWP --> CP[cyclicPrefix]
    DED --> PDSCH[PDSCH-Config]
    DED --> CSI[CSI 频域配置]
```

核心 IE 说明表：

| IE | 所在结构 | 含义 | 取值/编码 |
|---|---|---|---|
| `locationAndBandwidth` | `BWP`（genericBWP） | 联合编码 BWP 频域起点与带宽 | INTEGER 0..37949，**RIV 编码**：`RIV = N_BWP×(L_RB−1)+RB_start`，基准 `N_BWP=275`（maxNrofPhysicalResourceBlocks） |
| `subcarrierSpacing` | `BWP` | 该 BWP 的 SCS | 15/30/60/120 kHz |
| `cyclicPrefix` | `BWP` | 普通 CP 或扩展 CP | normal / extended |
| `bwp-Id` | `BWP-Downlink/Uplink` | BWP 编号 | 0..3（0 常留给 Initial） |
| `defaultDownlinkBWP-Id` | `ServingCellConfigCommon` | 定时器超时回退点 | 缺省则 = Initial BWP |
| `bwp-InactivityTimer` | `ServingCellConfig` | 非激活回退定时器 | ms2~ms2560 等 |
| `firstActiveDownlinkBWP-Id` | `ServingCellConfig` | 首次激活/RRC 后激活的 BWP | 0..3 |

**locationAndBandwidth 的 RIV 解码**（高频考点）：gNB 下发一个 16 位整数，UE 按公式还原出 `RB_start` 与连续 PRB 数 `L_RB`，二者之和 ≤ 275。CRB（公共资源块）与 PRB 的映射也由此决定——**BWP 的 PRB#0 对应 CRB 上由 locationAndBandwidth 指定的起点**，因此跨 BWP 的资源编号必须经过 CRB 转换。

## 七、完整信令时序图：从配置到动态切换再到回退

下图把四条路径串成一个真实业务场景（连接态 UE：大流量→空闲→再次突发）：

```text
sequenceDiagram
    participant UE
    participant gNB
    Note over UE,gNB: 阶段0: 初始接入(Initial BWP来自SIB1)
    UE->>gNB: 在 Initial BWP 上完成 RACH(RRCSetup/SetupComplete)
    Note over UE,gNB: 阶段1: RRC 配置 Dedicated BWP(路径3)
    gNB->>UE: RRCReconfiguration: BWP#1(窄,20MHz) + BWP#2(宽,100MHz),<br/>firstActiveDownlinkBWP-Id=1,<br/>defaultDownlinkBWP-Id=0,<br/>bwp-InactivityTimer=ms100
    UE->>gNB: RRCReconfigurationComplete
    Note over UE: 激活 BWP#1, 启动 bwp-InactivityTimer
    Note over UE,gNB: 阶段2: 大流量到达,DCI 切到宽 BWP(路径1)
    gNB->>UE: DCI 1_1 (BWP Indicator=10 → BWP#2) 调度大包 PDSCH
    Note over UE: 重启 timer; 进入 switching delay; 切到 BWP#2
    UE->>gNB: 在 BWP#2 上 PUCCH ACK + 大流量 PUSCH
    Note over UE,gNB: 阶段3: 流量结束,定时器超时回退(路径2)
    Note over UE: 100ms 无调度 DCI → timer 超时
    UE->>UE: 自主切换回 Default BWP#0(=Initial,省电)
    Note over UE,gNB: 阶段4: CA 场景 SCell 激活(路径4)
    gNB->>UE: SCell Activation MAC CE (含 SCell bwp-Id)
    UE->>gNB: HARQ ACK; 激活 SCell 对应 BWP
```

## 八、抓包识别与排错实战

### 如何在 trace 中识别 BWP 切换

1. **RRC 层（Wireshark/Qualcomm QXDM/MTK ELT）**：搜 `BWP-Downlink`、`firstActiveDownlinkBWP-Id`、`locationAndBandwidth`、`bwp-InactivityTimer`。`locationAndBandwidth` 解码出的 (RB_start, L_RB) 即带宽几何。
2. **DCI 层**：在 NR MAC/PHY log 中过滤 DCI Format 1_1/0_1，查看 `Bandwidth part indicator` 字段变化点——其值跳变即切换时刻。
3. **MAC 层**：观察 `bwp-InactivityTimer` start/stop 事件、SCell Activation MAC CE。
4. **Amararisoft/srsRAN**：日志会显式打印 `BWP switch BWP#X→BWP#Y`。

### 常见故障点与排错

| 故障现象 | 根因 | 排查思路 |
|---|---|---|
| 吞吐周期性抖动、HARQ NACK 集中爆发 | `bwp-InactivityTimer` 过短，频繁回退/重切，切换延迟窗口内被调度 | 检查定时器值与切换频率，调大或优化调度器避让 switching delay |
| UE 回退后收不到 paging/SIB，掉线 | Default BWP 未含 SSB/CORESET，或与 Initial 频域/SCS 不一致 | 核对 `defaultDownlinkBWP-Id` 指向的 BWP 是否含公共搜索空间 |
| UE 在错误频段收发、对不上 | `locationAndBandwidth` 解码错（RIV 公式实现 bug） | 用 275 基准 RIV 重新解码，对照 CRB↔PRB 映射 |
| 切换后首包丢失 | gNB 未预留 BWP switching delay 窗口就调度 PDSCH | 在切换 DCI 后预留时延，避免立即调度 |
| 厂商互通异常：BWP 配置不被对端接受 | 不同厂商对 `bwp-Id=0` 是否复用为业务 BWP、Default 与 Initial 关系策略不同 | 对齐 BWP 编号约定与 Default BWP 必配策略 |
## 九、常见问题

**Q1：BWP 切换和 LTE 的窄/宽频带（如 eMTC CE Band）是一回事吗？**
A：不是。LTE 的窄带是物理固定的子带切片，UE 跳频式访问；BWP 是 UE 专属、可配置 4 个、带状态机和定时器的自适应子系统，且支持每 BWP 独立 SCS/CP，机制复杂度和灵活性远高于 LTE 窄带。

**Q2：DCI 切换 BWP 后，原 BWP 上已配置的 SPS/CSI 上报会怎样？**
A：SPS（半持续调度）和 CSI 上报资源绑定在具体 BWP 上。切换 Active BWP 后，原 BWP 的 SPS 配置和 CSI-RS/上报在该 BWP 非激活期间不生效；新 Active BWP 需有自己的 SPS/CSI 配置才能继续，否则相关功能暂停直到切回。

**Q3：为什么不用 RRC 一直配一个最宽的 BWP 简化设计？**
A：那样就丧失了 BWP 的全部价值——UE 必须全带宽监听 PDCCH，射频/基带功耗无法随业务降档，也无法支持窄带能力 UE 和混合 numerology。BWP 的本质就是"按需带宽"，省电和灵活性都来自"可切换"。

**Q4：CA（载波聚合）下 BWP 切换有何不同？**
A：每个 Serving Cell（SpCell + 各 SCell）独立配置和切换 BWP。SpCell 由 DCI/timer/RRC 切换；SCell 由 SCell Activation MAC CE（可带 bwp-Id）或去激活来触发 BWP 变更。多载波协同需调度器避免多个 BWP 切换窗口重叠导致 UE 处理溢出。

**Q5：Initial BWP 一定等于 bwp-Id=0 吗？**
A：约定上 Initial BWP 的 bwp-Id 视为 0，但它来自 SIB1 的公共配置；Dedicated BWP 通过 RRC 下发独立 bwp-Id。现网中 bwp-Id=0 的 Dedicated BWP 有时被显式配置为与 Initial 几何一致以减少切换，但二者是不同信令来源的配置对象。

## 参考来源

1. [3GPP TS 38.213 V18.7.0 — NR; Physical layer procedures for control, §12 Bandwidth part operation](https://www.etsi.org/deliver/etsi_ts/138200_138299/138213/18.07.00_60/ts_138213v180700p.pdf) — BWP 切换规则、定时器与切换时延权威定义
2. [3GPP TS 38.213 — iTecSpec §12 摘要](https://itecspec.com/3gpp/38.213/s/12) — Section 12 MCG/SCG 应用范围与切换流程可读化解读
3. [3GPP Specification #38.213 — 3GPP Portal](https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3215) — 规范主页与版本下载
4. [ShareTechnote — 5G/NR Carrier Bandwidth Part](https://www.sharetechnote.com/html/5G/5G_CarrrierBandwidthPart.html) — BWP 概念、SSB 与 BWP 关系、配置示例图解
5. [CafeTele — Bandwidth Part (BWP) in 5G NR: Configuration, Switching, Battery Saving](https://www.cafetele.com/5g-bwp/) — Initial/Default/Active BWP 区分与省电策略工程化说明

---
> 本文由「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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
