聚焦 3GPP TS 38.321 §5.17、TS 38.213 §6/§17、TS 38.331
BeamFailureRecoveryConfig,从 PHY/MAC/RRC 跨层视角拆解波束失败检测、候选波束识别、CFRA/CBRA 恢复,并覆盖 Rel-16 两步 RA 与 Rel-17 SCell BFR 的演进。
5G NR 在 FR2(毫米波频段)采用模拟波束赋形,下行 PDCCH/PDSCH、上行 PUCCH/PUSCH 都通过窄而高的方向性波束收发。波束增益换来的代价是链路对方向极度敏感:行人遮挡、车辆驶过、树叶摆动、终端旋转,都可能在毫秒级时间内把当前波束的信号质量压垮。一旦承载 PDCCH 的当前波束被阻断,UE 收不到调度信令,整条连接瞬间"失聪"——但此时物理层之上的 RRC 连接、PDU 会话、加密上下文都完好无损,远没到需要 RRC 重建的程度。
BFR(Beam Failure Recovery,波束失败恢复)就是为这种"物理层波束丢失但高层连接尚存"的场景设计的快速、本地化、跨层协同的自愈机制。它的核心设计目标是:
理解 BFR 的关键,是把握它贯穿 PHY、MAC、RRC 三层的分工:PHY 负责"判失败 + 找新波束",MAC 负责"计数 + 触发 + 执行随机接入 + 收尾",RRC 负责"提供配置参数与失败后的重建兜底"。
BFR 在逻辑上分为三个连续阶段,下图给出完整判定与执行链路:
flowchart TD
A["UE正常接收PDCCH<br/>当前波束质量良好"] --> B{"PHY层监测BFD-RS<br/>假设PDCCH BLER > Qout?"}
B -- 是 --> C["PHY向MAC发送<br/>BFI波束失败实例指示"]
B -- 否 --> Z["继续正常监测"]
C --> D["MAC: BFI_COUNTER++<br/>启动/重启beamFailureDetectionTimer"]
D --> E{"BFI_COUNTER >=<br/>beamFailureInstanceMaxCount?"}
E -- 否 --> F{"beamFailureDetectionTimer<br/>超时?"}
F -- 是 --> G["BFI_COUNTER清零<br/>回到正常监测"]
F -- 否 --> B
E -- 是 --> H["声明波束失败<br/>进入候选波束识别(CBI)"]
H --> I{"存在L1-RSRP > Qin的<br/>候选波束?"}
I -- 是 --> J["选定新波束<br/>发起BFR随机接入"]
I -- 否 --> K["无可用候选波束<br/>可能演变为RLF"]
J --> L{"接入成功?<br/>recoverySearchSpace收到C-RNTI DCI"}
L -- 是 --> M["BFR成功<br/>切换到新波束正常通信"]
L -- 否 --> N["重试耗尽/失败<br/>触发RRC重建立"]
三个阶段分别对应:波束失败检测(Beam Failure Detection, BFD)→ 候选波束识别(Candidate Beam Identification, CBI)→ 恢复(Recovery via PRACH)。下面逐层拆解。
BFD 的第一性问题是用什么参考信号来评估当前波束的健康度。3GPP 给出的方案是 BFD-RS(Beam Failure Detection Reference Signal),它可以是 SSB 或 CSI-RS。RRC 既可显式配置 BFD-RS 列表,也可不显式配置——若未显式配置,UE 自动取 CORESET 激活 TCI 状态所关联的 RS(即承载 PDCCH 的那组波束)作为 BFD-RS。这一设计意图很明确:检测对象就是"正在用于收 DCI 的波束",因为 DCI 收不到才是真正的失败。
显式配置 BFD-RS 的好处是允许配置两个或更多 BFD-RS(对应多波束 PDCCH),只要其中任何一个仍可用,就不算失败;只有当集合内所有 BFD-RS 都恶化时,PHY 才产生一次失败实例。相比依赖 SSB(周期 20ms、波束数量有限),用 CSI-RS/专用 RS 可以做到更密、更精细的波束级监测。
PHY 不直接测 RSRP 来判失败,而是基于 TS 38.213 §6 定义的 Qout 参考点——即"在当前 BFD-RS 质量下,假设的 PDCCH 误块率(BLER)达到 10%"所对应的信号水平(可理解为"链路不可用门槛")。当某 BFD-RS 的质量低于 Qout 对应水平时,PHY 认为该波束已无法可靠承载 DCI。当集合内全部 BFD-RS 都低于 Qout,PHY 向 MAC 上报一次 BFI(Beam Failure Instance Indication,波束失败实例指示)。
注意:单次 BFI 只是"疑似抖动",不立即触发恢复——可能只是瞬时的多普勒或干扰。MAC 层需要做计数与去抖。
MAC 收到 BFI 后执行经典计数逻辑,这是一个典型的"滑动窗口式"误判抑制状态机:
stateDiagram-v2
[*] --> Normal: 波束质量正常
Normal --> Counting: 收到第1个BFI<br/>BFI_COUNTER=1<br/>启动beamFailureDetectionTimer
Counting --> Counting: 再收BFI<br/>计数+1,重启Timer
Counting --> Normal: beamFailureDetectionTimer超时<br/>计数清零
Counting --> BeamFailure: BFI_COUNTER≥beamFailureInstanceMaxCount
BeamFailure --> Recovered: 恢复成功
BeamFailure --> RLF: 恢复失败
两个参数协同控制灵敏度:
beamFailureDetectionTimer:每收到一个 BFI 就启动或重启该计时器;若它超时(即一段时间内没再累积新的 BFI,说明只是瞬时抖动),计数清零,回到正常监测。beamFailureInstanceMaxCount:连续累积的 BFI 计数上限。一旦 BFI_COUNTER 达到该值且计时器仍在运行,MAC 正式声明波束失败并进入下一阶段。这组参数体现了典型的"连续 N 次判定才确认"的鲁棒性设计。两个值越小,恢复越灵敏但越容易误触发(频繁的 BFR 会打断业务);越大,越不容易误判但失败后响应慢。FR2 部署中通常需要结合路测统计折中取值。
声明波束失败后,UE 并非盲目接入,而是先确认"有没有可用的新波束可切"。UE 在网络预配的候选波束列表(SSB 或 CSI-RS)上测量 L1-RSRP,并与 Qin 参考点对应的门限比较——Qin 对应"假设 PDCCH BLER 为 2%"的信号水平,即"链路质量良好、足以承载 DCI"的标准。
对应 RRC 参数:
rsrp-ThresholdSSB:SSB 候选波束的 RSRP 门限。candidateBeamThresholdList 支持为每个 CSI-RS 候选单独配置门限。只要存在至少一个候选波束的 L1-RSRP 高于门限,UE 就选定它(若有多个,通常选最优),进入恢复阶段;若没有任何候选波束达标,UE 无法立即恢复,将持续尝试或最终演变为无线链路失败(RLF),由 RRC 重建兜底。这一步实质是"先确认有路再敲门",避免在死链上浪费接入资源。
恢复的核心动作是在新波束上发起一次随机接入,让 gNB 感知 UE 已切到该波束。3GPP 提供了两条路径:优先 CFRA(无竞争),无资源时退化为 CBRA(竞争)。
如果网络通过 rach-ConfigBFR 为候选波束预配了专用随机接入资源——即把每个候选 SSB/CSI-RS 映射到一个专用前导码 + 一个 PRACH 时机(ssb-basedRACH-Resources / csi-RS-basedRACH-Resources),UE 就走 CFRA。这种"波束↔前导码"的映射带来一个精妙的设计:gNB 只要收到 p64 这个专用前导码,就隐含地知道 UE 选了 SSB#3 这个新波束,无需 UE 再用 MAC CE 显式上报,省时省信令。完整时序如下:
sequenceDiagram
participant PHY as UE-PHY
participant MAC as UE-MAC
participant RRC as UE-RRC
participant gNB as gNB
Note over PHY,MAC: 已声明波束失败,候选波束SSB#3已选定
MAC->>RRC: 内部通知波束失败
RRC->>MAC: 提供rach-ConfigBFR<br/>SSB#3→前导码p64+PRACH时机
MAC->>PHY: 触发BFR随机接入(CFRA)<br/>指示发送p64
PHY->>gNB: Msg1: 专用前导码p64<br/>(隐含指示新波束SSB#3)
Note over MAC: 启动beamFailureRecoveryTimer
gNB->>PHY: Msg2: RAR(RA-RNTI)<br/>含TA与UL Grant
gNB->>PHY: DCI(C-RNTI加扰)<br/>在recoverySearchSpaceId对应CORESET
PHY->>MAC: 检测到C-RNTI DCI → BFR成功
MAC->>RRC: BFR成功通知
Note over gNB,PHY: (可选)gNB下发TCI状态激活MAC CE<br/>进一步精修下行接收波束
Note over PHY,gNB: 在新波束SSB#3上恢复正常PDCCH/PDSCH收发
成功确认的关键标志是:UE 在 recoverySearchSpaceId 指定的"恢复专用搜索空间" 上,于 beamFailureRecoveryTimer 运行期间收到一个 用 C-RNTI 加扰的 DCI。这个设计意图很巧妙——收到 C-RNTI 加扰的 DCI,既证明 gNB 收到了 BFR 请求、又证明 UE 在新波束上的下行链路确实可用(否则收不到该 DCI),一次确认完成两重验证。
当所选候选波束没有对应的专用 CFRA 资源时,UE 回退到普通竞争随机接入(CBRA)。此时"波束↔前导码"映射不存在,gNB 无法从前导码推断 UE 选了哪个波束,于是 UE 在 Msg3 中携带 SpCell BFR MAC CE,显式上报所选候选波束标识。竞争解决通过 gNB 用 C-RNTI 调度 Msg4 完成。CBRA 更慢(4 次消息往返),但作为兜底保证了"任何场景都能恢复"。
Rel-16 引入两步随机接入后,BFR 也可配置走 2 步 RA:UE 在 MsgA 中同时携带前导码与 BFR MAC CE(载荷),gNB 用 MsgB 应答,成功标志仍是 C-RNTI。这进一步缩短了恢复时延,对 URLLC/工业场景价值显著。
收尾由 beamFailureRecoveryTimer 把控:它在发起 BFR 接入时启动,若在窗口内一直没收到 C-RNTI DCI,且随机接入尝试次数耗尽(受 preambleTransMax 等约束),MAC 向上层报告波束失败恢复失败,触发 RRC 重建立——这是 BFR 未能自愈时的最后兜底。
Rel-15 的 BFR 只覆盖 SpCell(主小区组的主小区)。但 CA(载波聚合)场景下,辅小区(SCell)同样使用方向性波束,同样会被遮挡。若 SCell 波束死了却不恢复,整个载波带宽白白浪费。Rel-17 引入 SCell BFR:
sequenceDiagram
participant UE as UE(SpCell链路正常)
participant gNB as gNB
Note over UE: SCell#2波束被阻挡
UE->>UE: 经SpCell上的PUCCH/SR<br/>申请PUSCH资源
UE->>gNB: SCell BFR MAC CE<br/>(失败小区位图+候选波束)
gNB->>UE: (可选)TCI状态激活MAC CE<br/>为SCell#2激活新波束
Note over UE: SCell#2在新波束恢复<br/>全程无需PRACH
SCell BFR 体现了"在不破坏现有接入架构的前提下扩展自愈范围"的演进思路:复用 SpCell 的控制面承载失败上报,避免给 SCell 引入复杂的接入逻辑。
BeamFailureRecoveryConfig 全景BFR 的一切行为都由 RRC 驱动。关键 IE 都封装在 BeamFailureRecoveryConfig(承载于 SpCellConfig)中,结构如下:
graph TD
SCC["SpCellConfig"] --> BFRC["BeamFailureRecoveryConfig"]
BFRC --> F1["beamFailureInstanceMaxCount<br/>BFI计数上限N"]
BFRC --> F2["beamFailureDetectionTimer<br/>BFD去抖计时器"]
BFRC --> F3["beamFailureRecoveryTimer<br/>恢复监听计时器"]
BFRC --> F4["rsrp-ThresholdSSB<br/>候选波束Qin门限"]
BFRC --> F5["ssb-basedRACH-Resources<br/>SSB→专用前导码映射"]
BFRC --> F6["csi-RS-basedRACH-Resources<br/>CSI-RS→专用前导码映射"]
BFRC --> F7["recoverySearchSpaceId<br/>恢复专用搜索空间"]
BFRC --> F8["rach-ConfigBFR<br/>BFR专用RACH公共参数"]
BFRC --> F9["ra-ContentionResolutionTimer<br/>CBRA回退竞争解决计时器"]
BFRC --> F10["candidateBeamThresholdList<br/>CSI-RS候选门限(Rel-17)"]
BeamFailureRecoveryConfig 关键字段说明| 字段 | 作用层 | 含义 | 调优影响 |
|---|---|---|---|
beamFailureInstanceMaxCount |
MAC | 声明失败所需连续 BFI 数 N | 越小越灵敏、易误触;越大越迟钝 |
beamFailureDetectionTimer |
MAC | BFI 去抖窗口 | 越短越快确认抖动结束;越长越容忍突发 |
beamFailureRecoveryTimer |
MAC | 恢复尝试监听窗口 | 过短易误判恢复失败;过长拖慢兜底重建 |
rsrp-ThresholdSSB |
PHY(CBI) | SSB 候选波束可用门限(对应 Qin) | 决定能否快速找到新波束 |
ssb-basedRACH-Resources |
PHY/MAC | SSB 候选→专用前导码+PRACH 时机 | 决定能否走 CFRA 快速恢复 |
csi-RS-basedRACH-Resources |
PHY/MAC | CSI-RS 候选→专用前导码+PRACH 时机 | 细波束级 CFRA 恢复 |
recoverySearchSpaceId |
PHY | 恢复期监听 C-RNTI DCI 的搜索空间 | 隔离恢复监听与常规调度 |
rach-ConfigBFR |
PHY/MAC | BFR 专用 RACH 公共参数 | 与常规 RACH 解耦,互不抢占 |
ra-ContentionResolutionTimer |
MAC | CBRA 回退时的竞争解决计时器 | 影响回退路径时延 |
| 维度 | CFRA(无竞争) | CBRA(竞争回退) |
|---|---|---|
| 前导码来源 | RRC 专用预配,每候选波束一个 | 随机选择 |
| 新波束上报 | 前导码隐含指示(无需 MAC CE) | Msg3 携带 SpCell BFR MAC CE 显式上报 |
| 竞争解决 | 不需要 | 需要(C-RNTI 调度 Msg4) |
| 消息往返 | Msg1→Msg2,约 2 次 | Msg1→Msg4,约 4 次 |
| 时延 | 快,确定性好 | 慢,存在冲突风险 |
| 适用前提 | 所选候选波束有专用资源 | 兜底,任何场景可用 |
| 维度 | SpCell BFR(Rel-15) | SCell BFR(Rel-17) |
|---|---|---|
| 恢复路径 | 在失败 SpCell 上发 PRACH(新波束) | 经正常的 SpCell 上报,不发 PRACH |
| 上报载体 | 前导码 + Msg3 BFR MAC CE | SCell BFR MAC CE(含失败小区位图) |
| 是否依赖他链路 | 否(自愈) | 是(依赖 SpCell 可用) |
| 失败后果 | BFR 失败→RLF→RRC 重建 | 该 SCell 带宽暂时不可用,SpCell 不受影响 |
| 触发对象 | 承载 PDCCH 的主链路 | 仅辅载波 |
BFR 主要发生在 PHY/MAC 内部,传统 IP 抓包看不到,需结合终端 L1/L2 日志与 gNB 侧信令跟踪:
BFI_COUNTER 的累加与 beamFailureDetectionTimer 的启动/超时;计数达到 beamFailureInstanceMaxCount 即正式声明失败。ssb-basedRACH-Resources 预配表,则为 CFRA,可反推出所选新波束 SSB 索引。recoverySearchSpaceId 对应 CORESET 上找到 C-RNTI 加扰的 DCI,且时间在 beamFailureRecoveryTimer 窗口内,即一次成功 BFR。beamFailureRecoveryTimer 超时、PRACH 重传至 preambleTransMax,则 MAC 报 BFR 失败,日志中随后出现 RRC Reestablishment 流程。常见故障点:
beamFailureInstanceMaxCount/beamFailureDetectionTimer 配置激进 → 频繁误触发 BFR,打断业务、抬升丢包;rsrp-ThresholdSSB 过高 → 找不到可用新波束,BFR 失败演变为 RLF;BFR 的整体设计哲学是"分层自愈、能用本地层绝不惊动高层":PHY 用假设 BLER 与 Qout/Qin 参考点做精确的物理层判定,MAC 用计数+计时器做去抖与执行,RRC 只在配置与最终兜底时介入。CFRA 的"波束↔前导码"映射把一次接入变成了"新波束的隐含声明",是整个机制最精巧的一笔——用最小的信令开销完成"我换到这个波束了"的双向确认。Rel-16 两步 RA 与 Rel-17 SCell BFR 则沿着"更快、覆盖更广"两个方向持续演进。
Q1:BFR 与 RLF(无线链路失败)有什么区别? A:BFR 是物理层波束级的自愈——当前波束不通但高层连接完好,UE 换个波束、敲一次随机接入即可恢复,全程不动 RRC。RLF 是更严重的链路级失败,需要 RRC 重建(重新接入、重新配置、可能触发切换)。当 BFR 自愈失败时,问题才会升级为 RLF。
Q2:为什么 BFR 优先用 CFRA 而非普通竞争接入? A:CFRA 的专用前导码与候选波束一一映射,既消除了竞争冲突,又能让 gNB 从前导码隐含获知 UE 选定的新波束,省去显式上报,时延更短、确定性更好——这对方向性链路的快速恢复至关重要。CBRA 只是"没有专用资源时的兜底"。
Q3:SCell BFR 为什么不在 SCell 上发 PRACH? A:SCell 在 3GPP 架构里本就不承担随机接入(接入只在 SpCell 做)。Rel-17 设计复用了这一既有原则:SCell 波束失败时,UE 经链路正常的 SpCell 用 SCell BFR MAC CE 上报,gNB 据此为该 SCell 激活新波束,无需给 SCell 引入接入逻辑。
Q4:beamFailureDetectionTimer 和 beamFailureRecoveryTimer 有何区别?
A:前者在检测阶段用于 BFI 去抖(控制多快确认"连续失败");后者在恢复阶段控制 UE 等待 gNB 响应的窗口(收到 C-RNTI DCI 即成功,超时即失败)。二者一前一后,分别把控"判定灵敏度"与"恢复时延上限"。
Q5:SpCell BFR MAC CE 在 CFRA 模式下还需要吗? A:不需要。CFRA 模式下,专用前导码已隐含指示所选新波束,UE 不必再发 MAC CE。只有走 CBRA 回退(前导码与波束无映射)时,才需要在 Msg3 用 SpCell BFR MAC CE 显式上报候选波束。
本文由「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 等场景全覆盖。
