<!-- title: 5G BWP切换机制拆解 -->
<!-- domain: ran -->

# 5G NR BWP（带宽部分）动态切换机制全链拆解

> 聚焦规范：TS 38.331（RRC 配置 IE）、TS 38.213 §12（BWP 操作）、TS 38.212 §7.3.1（BWP Indicator 字段）、TS 38.133 §8.1.2（切换时延）、TS 38.321（MAC 计时器）

## 一、为什么要有 BWP：一个"窄车道/宽车道"的设计哲学

在 4G LTE 中，UE 一旦接入，就在整个载波带宽（如 20 MHz）上全程监听 PDCCH、做信道估计、维护 HARQ 缓冲。这套机制在 5G NR 里行不通了——NR 单载波带宽可达 100 MHz（FR1）甚至 400 MHz（FR2），如果让一个廉价的 RedCap 终端、或一个只在收微信的待机 UE 始终全带宽收发，射频与基带的空转功耗将难以接受。

3GPP 的解法是 **BWP（Bandwidth Part，带宽部分）**：把一个宽载波在频域上切成最多 4 个连续 PRB（物理资源块）组成的"子带宽"，但**同一时刻每方向只有一个 BWP 处于激活态（Active BWP）**。gNB 可以根据业务瞬时速率，让 UE 在"窄 BWP（省电、低开销）"与"宽 BWP（高吞吐）"之间快速切换。

BWP 的设计意图归纳为四点：

1. **UE 功耗节省**——低负载时缩到窄 BWP，减少 PDCCH 盲检与 RF 带宽；
2. **多 numerology 共存**——同一载波不同 BWP 可用不同子载波间隔（SCS），适配 eMBB（30 kHz）与 URLLC（60 kHz）；
3. **带宽与业务匹配**——大文件下载切到宽 BWP，休眠切回窄 BWP；
4. **与 LTE/DSS 共存**——初始 BWP 可落在与 LTE 频谱重叠的低端子带，支持动态频谱共享。

理解 BWP 切换，本质上是理解"**网络如何让 UE 在毫秒级把激活带宽从 A 换到 B**"的三条信令路径。本文逐一拆解。

---

## 二、BWP 的 RRC 配置：先把"车道"建好

切换的前提是网络已经通过 RRC 把若干 BWP 配置给 UE。承载配置的核心 IE 是 `BWP-Downlink`（TS 38.331 §6.3.2），它被装进 `ServingCellConfig` 的 `downlinkBWP-ToAddModList` 列表里。其层级结构如下：

```mermaid
flowchart TD
    A["ServingCellConfig"] --> B["downlinkBWP-ToAddModList<br/>（最多4个DL BWP）"]
    A --> C["firstActiveDownlinkBWP-Id<br/>（配置后首个激活）"]
    A --> D["defaultDownlinkBWP-Id<br/>（计时器超时回退目标）"]
    A --> E["bwp-InactivityTimer<br/>（非激活计时器）"]
    B --> F["BWP-Downlink IE"]
    F --> F1["bwp-Id（0~3）<br/>0保留给初始BWP"]
    F --> F2["bwp-Common<br/>BWP公共参数"]
    F --> F3["bwp-Dedicated<br/>PDSCH/PDCCH专用配置"]
    F2 --> G["locationAndBandwidth<br/>RIV编码：频域位置+带宽"]
    F2 --> H["subcarrierSpacing<br/>15/30/60/120 kHz"]
    F2 --> I["cyclicPrefix<br/>normal/extended"]
```

这里有几个关键设计选择需要点明：

- **`bwp-Id = 0` 永远是初始 BWP（Initial BWP）**，由 SIB1 广播（`BWP-DownlinkCommon` 在 `ServingCellConfigCommon` 中），UE 一接入就停在这里。专用 BWP 用 1~3。
- **`firstActiveDownlinkBWP-Id`** 决定 RRC 配置（或切换后）UE 落在哪个 BWP，不配则用初始 BWP。
- **`defaultDownlinkBWP-Id`** 是 `bwp-InactivityTimer` 超时后的回退目标，**不配则回退到初始 BWP**——这是个常被忽略的"陷阱参数"。
- **`locationAndBandwidth` 不是两个字段，而是一个 RIV 整数**，把"频偏 RB_start"和"带宽长度 L"压缩编码在一起（见第四节）。

### IE 参数说明表

| IE 字段 | 规范出处 | 取值/含义 | 工程意义 |
|--------|---------|----------|---------|
| `bwp-Id` | 38.331 §6.3.2 | INTEGER(0..3)，0=初始 | 切换时的寻址索引 |
| `locationAndBandwidth` | 38.331 §6.3.2 | INTEGER(0..37949)，RIV 编码 | 唯一确定 BWP 的频域位置与宽度 |
| `subcarrierSpacing` | 38.211 | {15,30,60,120} kHz | 决定该 BWP 的 numerology、时隙长度 |
| `bwp-InactivityTimer` | 38.331 §6.3.2 | ENUMERATED ms2…ms10240 | 无业务超时后回退默认 BWP |
| `firstActiveDownlinkBWP-Id` | 38.331 | BWP-Id | RRC 配置/切换后首个激活 BWP |
| `defaultDownlinkBWP-Id` | 38.331 | BWP-Id（缺省=0） | 计时器回退目标 |

---

## 三、三条切换路径：DCI 动态切换 / 计时器回退 / RRC 切换

TS 38.213 §12 明确定义了三种 BWP 激活/去激活触发方式，这是整个机制的核心。

### 路径1：DCI 动态切换（最常用、最快）

gNB 在**当前激活 BWP 的 PDCCH 搜索空间**上下发 DCI format 1_1（下行调度）或 0_1（上行调度），其中携带 **BWP Indicator 字段**（TS 38.212 §7.3.1）。该字段比特数由网络配置的 DL BWP 数 `N_BWP,RRC` 决定：

- 配 1 个 BWP → **0 bit**（不可能切换，字段省略）；
- 配 2 个 BWP → **1 bit**；
- 配 3~4 个 BWP → **2 bit**。

字段值指示目标 BWP 的位置索引。**当 UE 解出的 BWP Indicator 指向一个与当前激活 BWP 不同的 BWP，且伴随的调度生效时，UE 启动 BWP 切换**，进入切换时延窗口，之后在新 BWP 上继续收发。

这是"无 RRC 信令、slot 级快速切换"，是 5G 动态适配业务的利器。

### 路径2：bwp-InactivityTimer 计时器回退（省电主力）

MAC 实体（TS 38.321）维护一个 `bwp-InactivityTimer`。规则是：

- 每当 PDCCH 指示在当前激活 BWP 上有"有效的下行/上行调度"或特定的 DCI，**计时器重启**；
- 若计时器一直没被重启而**超时**，UE 自动切回 **`defaultDownlinkBWP-Id`（未配则回初始 BWP）**，完成"宽→窄"的省电回退。

这就是"下载完一个大文件、UE 没业务了，几百毫秒后自动缩回窄 BWP 省电"的实现原理。

### 路径3：RRC 切换（配置变更或切换场景）

通过 RRC Reconfiguration（携带 `reconfigurationWithSync` 的切换命令，或修改 `firstActiveDownlinkBWP-Id`）直接改变激活 BWP。这条路径慢（RRC 级），用于：小区间切换、首次 BWP 配置、BWP 参数重配。

### 三种触发方式对比

| 对比维度 | DCI 动态切换 | bwp-InactivityTimer 回退 | RRC 切换 |
|---------|-------------|------------------------|---------|
| 规范章节 | 38.213 §12 / 38.212 §7.3.1 | 38.321 MAC / 38.213 §12 | 38.331 §5.3 |
| 信令层级 | L1（PDCCH/DCI） | L2（MAC 计时器） | L3（RRC） |
| 延迟 | slot 级（亚毫秒~毫秒） | 计时器周期 + 切换时延 | RRC 往返（数十毫秒） |
| 主要用途 | 业务带宽瞬时适配 | 空闲省电回退 | 切换/重配置 |
| 典型方向 | 窄→宽（有突发） | 宽→窄（无业务） | 任意 |

---

## 四、locationAndBandwidth：一个整数如何编码"位置+带宽"

BWP 的频域位置不是用两个独立字段（RB_start、Length）传的，而是用 **RIV（Resource Indicator Value）** 压成一个整数 `locationAndBandwidth`（TS 38.214 §5.1.2.2 资源分配 Type 1 同款编码思想）。设载波可用带宽为 `N_BWP` 个 PRB，偏移 `RB_start`，长度 `L_RB`：

- 若 `L_RB - 1 ≤ ⌊N_BWP / 2⌋`：`RIV = N_BWP·(L_RB - 1) + RB_start`
- 否则：`RIV = N_BWP·(N_BWP - L_RB + 1) + (N_BWP - 1 - RB_start)`

UE 收到 `locationAndBandwidth` 后反解出 `RB_start` 与 `L_RB`，结合 SCS 即确定 BWP 的绝对频域位置。这种编码避免了非法（越界/非连续）组合，且对齐 PUSCH/PDSCH 资源分配的语义，是规范内典型的"复用编码、降低信令位宽"设计。

---

## 五、完整信令时序：从窄 BWP 到宽 BWP 再回退

下图呈现一次完整的 BWP 切换生命周期：UE 初始在窄 BWP#1，gNB 下发 DCI 切到宽 BWP#2 传大文件，业务结束后计时器超时回退默认 BWP。

```mermaid
sequenceDiagram
    autonumber
    participant UE
    participant gNB

    Note over UE,gNB: 初始状态：UE 激活 BWP#1（窄，20MHz, SCS=15k）
    UE->>gNB: 在 BWP#1 监听 PDCCH（搜索空间 SS#1）
    gNB->>UE: 检测到大业务到达（如视频/下载）

    rect rgb(220,240,255)
    Note over UE,gNB: 路径1：DCI 动态切换 窄→宽
    gNB->>UE: DCI 1_1（BWP Indicator=2，PDSCH调度）
    Note over UE: 解出 BWP Indicator ≠ 当前激活BWP<br/>触发切换，启动切换时延窗口
    Note over UE: 切换时延内不要求收发（TS 38.133）
    UE->>UE: 应用 BWP#2 配置（100MHz, SCS=30k, 新PDCCH/PDSCH）
    UE->>gNB: 在 BWP#2 监听 PDCCH（搜索空间 SS#2）
    gNB->>UE: PDSCH（大块数据，高 MCS）
    UE-->>gNB: HARQ-ACK / 重启 bwp-InactivityTimer
    Note over UE: 每次有效调度都重启计时器
    end

    Note over UE,gNB: 业务结束，无新调度
    Note over UE: bwp-InactivityTimer 持续不被重启…
    Note over UE: 计时器超时（如 100ms）

    rect rgb(255,240,230)
    Note over UE,gNB: 路径2：计时器回退 宽→窄（省电）
    UE->>UE: MAC 触发切换至 defaultDownlinkBWP-Id
    Note over UE: 未配 default 则回退初始 BWP#1
    UE->>gNB: 回到 BWP#1 省电监听
    end
```

### BWP 状态转换图

从 UE 视角，每个 Serving Cell 的 DL BWP 活动状态可用下图刻画：

```mermaid
stateDiagram-v2
    [*] --> 初始BWP_0: 接入/SIB1
    初始BWP_0 --> 专用BWP_1: DCI/RRC 激活
    专用BWP_1 --> 专用BWP_2: DCI BWP Indicator
    专用BWP_2 --> 专用BWP_1: DCI BWP Indicator
    专用BWP_1 --> 初始BWP_0: 计时器超时(default=0)
    专用BWP_2 --> 初始BWP_0: 计时器超时(default=0)
    初始BWP_0 --> 专用BWP_2: DCI/RRC 激活
    note right of 初始BWP_0
      bwp-Id=0，SIB1广播
      省电/接入默认驻留
    end note
    note right of 专用BWP_2
      宽带高吞吐
      计时器持续重启
    end note
```

---

## 六、BWP 切换时延与 HARQ 时序：最容易踩坑的地方

切换不是瞬时的。TS 38.133 §8.1.2（Table 8.1.2.2-1）定义了 BWP **切换时延（BWP switching delay）**——在这段时间内，UE 不被要求接收 PDCCH/PDSCH，也不要求发 PUSCH/PUCCH。该时延以"slot 数"计，随 SCS 变化（SCS 越大、slot 越短，绝对时延越小），并随 BWP 带宽跨度和是否跨 numerology 而不同。

| 项目 | 典型表现 | 工程影响 |
|------|---------|---------|
| 切换时延来源 | TS 38.133 §8.1.2 | 切换瞬间存在"静默 gap" |
| 同 numerology 切换 | 时延较小 | 适合 DCI 频繁动态切换 |
| 跨 numerology 切换（SCS 变） | 时延较大 | gNB 须预留更大调度间隔 |
| HARQ 进程 | BWP 切换后部分进程状态保留/重置需 gNB 协调 | 计时器/调度须避免 HARQ 错乱 |
| CSI 上报 | 各 BWP 独立 CSI-RS 配置 | 切到新 BWP 需重测才能精确 MCS |

正因为有静默 gap，**DCI 触发的 BWP 切换里，那条触发切换的 DCI 本身携带的调度（PDSCH/PUSCH）通常指向切换之后**——即"切完再发"，而非"在旧 BWP 上发"。

---

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

### 如何在抓包里识别 BWP 切换

BWP 配置主要在 **RRC Reconfiguration / SIB1** 消息（NGAP/NRPPA 之下的 RRC）。在 Wireshark（含 MAC/RLC/PDCCH 解析）或专用 L1 抓包工具中：

1. **配置阶段**：在 `rrcSetupComplete` 后的 `DL RRC Message Transfer` / RRC Reconfiguration 里展开 `BWP-Downlink` → 看 `downlinkBWP-ToAddModList`，确认配了几个 BWP、各自 `locationAndBandwidth`（反解 RIV 得频域位置）与 SCS。
2. **DCI 切换**：在 MAC/PDCCH 视图里过滤 DCI format 1_1/0_1，查看 **Bandwidth Part Indicator** 字段是否非零、是否与当前激活 BWP 不同——这就是一次动态切换。
3. **计时器回退**：抓不到直接信令（这是 UE MAC 内部行为），表现为"一段时间无 PDSCH 调度后，UE 突然只在窄 BWP 的 PRB 上活动、PDCCH 搜索空间切换"。

### 常见故障点与排错思路

- **吞吐量莫名偏低**：检查 `bwp-InactivityTimer` 是否过短（如 ms20），导致宽 BWP 一停就被踢回窄 BWP，形成"乒乓切换"，吞吐上不去。适当调大或优化触发。
- **省电效果差**：`defaultDownlinkBWP-Id` 没配或配成了宽 BWP，回退后仍是宽带，省电失效。
- **切换后掉 HARQ / 误码突增**：跨 numerology 切换但 gNB 没留足切换时延 gap，或新 BWP 的 CSI 尚未更新就用旧 MCS，造成初传高 BLER。
- **DCI 不可达**：搜索空间 `searchSpaceId` 与各 BWP 绑定不当，UE 在某 BWP 上根本不监听含 BWP Indicator 的 DCI，导致"切不回去"。
- **PUCCH/SRS 重定位冲突**：BWP 切换会重定位 PUCCH 资源集与 SRS，若上层（如 CSI/SR 配置）未同步，可能报资源冲突。
## 八、常见问题

**Q1：DCI 触发的 BWP 切换，那条 DCI 里的 PDSCH 调度在哪生效？**
A：在**切换完成后的新 BWP**上生效。规范设计为"先切后发"——切换时延 gap 内不收发，gap 结束 UE 已在新 BWP，再接收该 PDSCH。gNB 调度器须把该 PDSCH 的时频资源安排在切换时延之后。

**Q2：bwp-InactivityTimer 超时后一定回初始 BWP 吗？**
A：不一定。超时回退目标是 `defaultDownlinkBWP-Id`；**只有当该字段未配置时，才回退到初始 BWP（bwp-Id=0）**。这是工程上省电效果的关键旋钮。

**Q3：一个 Serving Cell 能同时激活多个 DL BWP 吗？**
A：不能。规范规定每方向（DL/UL）同一时刻只有一个**激活 BWP（Active BWP）**。多 BWP 是"备选车道"，通过切换在它们之间单选。载波聚合（CA）下每个 Serving Cell 各自有一个激活 BWP。

**Q4：BWP 切换和 4G 的载波带宽有什么本质区别？**
A：4G LTE UE 接入后全带宽收发、不支持运行中动态收缩带宽；NR 的 BWP 允许**单载波内、运行中、毫秒级**在多个带宽/numerology 间切换，实现了"按需带宽"，是 5G 功耗与灵活性提升的核心空口机制之一。

**Q5：BWP 与 SUL（补充上行）、CA（载波聚合）是什么关系？**
A：BWP 是**单载波内的频域切片**；SUL 是另一个上行载波、有自己独立的 BWP 配置；CA 的每个分量载波各自维护自己的 BWP 列表与激活 BWP。三者正交，可叠加使用。

---

## 参考来源

1. [3GPP TS 38.213 — NR; Physical layer procedures for control](https://www.3gpp.org/dynareport/38213.htm) — §12 Bandwidth Part operation（BWP 操作与激活/去激活触发）
2. [3GPP TS 38.331 — NR; Radio Resource Control (RRC)](https://www.3gpp.org/dynareport/38331.htm) — §6.3.2 BWP-Downlink / BWP IE 定义、bwp-InactivityTimer
3. [3GPP TS 38.212 — NR; Multiplexing and channel coding](https://www.3gpp.org/dynareport/38212.htm) — §7.3.1 DCI 中 BWP Indicator 字段比特宽度
4. [3GPP TS 38.133 — NR; Requirements for support of radio resource management](https://www.3gpp.org/dynareport/38133.htm) — §8.1.2 BWP switching delay（切换时延）
5. [ShareTechnote — 5G BWP (Carrier Bandwidth Part) in Detail](https://www.sharetechnote.com/html/5G/5G_CarrrierBandwidthPart.html) — BWP 概念与配置实战图解
6. [A Primer on Bandwidth Parts in 5G New Radio (arXiv:2004.00761)](https://arxiv.org/pdf/2004.00761) — 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)
