摘要
本文从蓝牙定位和测距需求出发,回顾 BLE 从信号强度估计、Bluetooth 5.1 Direction Finding 到 Bluetooth Core 6.0 Channel Sounding 的技术演变,并比较 RSSI、AoA/AoD、PBR 和 RTT 的测量对象、硬件要求、误差来源、功耗和安全能力。报告以 nRF54LM20 DK 作为 Initiator,以 nRF54L15 Tag 作为 Reflector,结合 Zephyr/NCS、Nordic SoftDevice Controller、RAS 和 cs_de,说明从 BLE 连接、CS 能力交换、测量配置到距离输出的完整链路。
本文按照“标准原理—协议实现—实物测试—数据分析”的顺序展开,分别说明 Bluetooth SIG 定义的能力、Nordic NCS/SoftDevice Controller 的实现方式,以及本工程的实测结论。
0. 本报告的硬件、软件
本报告采用一块 Nordic nRF54LM20 DK 和一块 Nordic nRF54L15 Tag:
| nRF54LM20 DK | PCA10184;当前实测为 nRF54LM20B ENG B | Initiator / 测距计算端 | nrf54lm20dk/nrf54lm20b/cpuapp |
| nRF54L15 Tag | PCA20072 | Reflector / 标签端 | nrf54l15tag/nrf54l15/cpuapp |
LM20 DK 负责串口日志、CS 配置、RAS 数据读取和距离估计;L15 Tag 负责广播、连接响应、Reflector 角色、状态指示和后续 IMU/低功耗应用逻辑。Initiator/Reflector 是 CS 逻辑角色,不能直接等同于 Central/Peripheral 连接角色。
1. 为什么蓝牙需要测距
1.1 从连接状态到空间信息
传统 BLE 连接主要回答设备是否能够被发现、连接和通信。测距进一步回答两个设备之间相距多远;定位则在测距基础上增加方向、参考点或地图约束,计算设备在二维或三维空间中的位置。
因此,RSSI、AoA、AoD 和 Channel Sounding 的输出不能直接混为一谈:RSSI 主要反映信号强弱,AoA/AoD 主要反映方向,PBR 和 RTT 才是 Channel Sounding 中用于距离估计的测量方法。
1.2 从信号强弱、方向到精细距离
蓝牙的空间感知能力大致经历了三个阶段:早期利用 RSSI 判断远近;Bluetooth 5.1 引入 AoA/AoD,为定位增加方向信息;Bluetooth Core 6.0 引入 Channel Sounding,通过 PBR 和 RTT 进行精细测距。
RSSI 早于这些新特性存在;AoA/AoD 是方向测量的两种方式;PBR/RTT 是 Channel Sounding 中互补的两种测距方法。它们不是五个依次替代的蓝牙版本。
2. 五种技术的简要对比
| RSSI:接收信号强度 | 根据接收功率和路径损耗模型估计远近 | 粗略距离或近远等级 | 成本低、兼容性广 | 人体遮挡、姿态和多径会改变强度 |
| AoA:到达角 | 单天线发送,多天线接收;比较接收阵列的相位 | 信号到达方向 | 适合资产标签定位 | 需要接收阵列、校准和角度算法 |
| AoD:出发角 | 多天线发送,单天线接收;利用阵列发出的信号估计方向 | 信号出发方向 | 适合固定信标辅助室内导航 | 需要发射阵列,移动端也需支持相应采样和算法 |
| PBR:相位测距 | 在多个频率上交换信号,根据双向相位随频率的变化估计距离 | 两设备间距离 | 可实现精细测距 | 相位歧义、多径和天线时延会影响结果 |
| RTT:往返时间测距 | 测量信号往返时间,并扣除响应及硬件延迟 | 两设备间距离 | 可与 PBR 交叉校验、辅助安全判断 | 时间分辨率和延迟校准要求高 |
AoA/AoD 的天线布局和方向能力见 Bluetooth SIG Direction Finding;RSSI 路径损耗、Bluetooth 5.1 方向测量及 Bluetooth 6.0 PBR/RTT 的关系见 Bluetooth Core 6.0 Feature Overview。
3. RSSI:先判断“近还是远”
RSSI 测的是接收信号强度。理想情况下,距离越远,接收功率越低,因此可以用现场标定的模型估计距离。但同一距离下,人体挡住天线或设备转向,也可能让信号明显变弱,所以 RSSI 更适合低成本的接近检测和粗略远近判断。
4. AoA / AoD:再判断“在哪个方向”
Bluetooth 5.1 引入 Direction Finding。它使用 CTE(恒定音调扩展)和 IQ 采样,从天线阵列相关的相位差中估计方向。
AoA(到达角):标签用单天线发送,固定定位器用多天线接收并计算信号从哪个方向来,适合仓库、工厂中的资产定位。
AoD(出发角):固定定位器用多天线发送,移动设备用单天线接收并估计信号的出发方向,适合室内导航。
两种方法主要得到角度。求二维或三维位置还需要已知的参考点、多个方向观测或其他约束;天线阵列、校准和多径处理也会增加成本。本文将它们作为背景介绍,实际工程重点使用 nRF54LM20 DK 和 nRF54L15 Tag 的 Channel Sounding。
接下来重点讲解 Channel Sounding:PBR 通过多频相位变化估计距离,RTT 通过往返时间估计距离。两者可独立或组合使用,具体模式以两端能力和实际配置为准。
5. Bluetooth 6.0 Channel Sounding
5.1 角色和数据通路
Channel Sounding 使用 Initiator 和 Reflector 两个逻辑角色。Initiator 通常负责发起测量配置、收集报告并运行距离估计算法;Reflector 按照控制器安排响应测量交互并提供远端测量数据。两种角色与 Central/Peripheral 连接角色不是同一套概念,应用应分别描述。
本文工程的逻辑数据通路如下:

RAS 是上层的 Ranging Service,用于让测距应用读取远端测距数据并配置相关参数。它与 Channel Sounding 的射频测量机制要分开解释:Channel Sounding 产生测量数据,RAS 负责标准化地交换或管理测距数据。
在 Reflector 端,应用首先初始化 BLE,然后开始可连接广播。当前 ras_reflector 工程中的核心逻辑可以简化为:
LOG_INF("Starting Channel Sounding Reflector Sample");
err = bt_enable(NULL);
if (err) {
LOG_ERR("Bluetooth init failed (err %d)", err);
return 0;
}
err = bt_le_adv_start(BT_LE_ADV_CONN_FAST_2,
ad, ARRAY_SIZE(ad), NULL, 0);
if (err) {
LOG_ERR("Advertising failed to start (err %d)", err);
return 0;
}连接建立后,Reflector 允许自己作为 Reflector 工作,并配置远端 Initiator 可使用的过程参数:
const struct bt_le_cs_set_default_settings_param default_settings = {
.enable_initiator_role = false,
.enable_reflector_role = true,
.cs_sync_antenna_selection =
BT_LE_CS_ANTENNA_SELECTION_OPT_REPETITIVE,
.max_tx_power = BT_HCI_OP_LE_CS_MAX_MAX_TX_POWER,
};
err = bt_le_cs_set_default_settings(connection, &default_settings);这段代码对应图中的“应用层 → Bluetooth Host → Controller”路径。应用负责角色和参数配置,精确的 CS 射频时序由 Nordic SoftDevice Controller 执行。
5.2 PBR:Phase-Based Ranging
PBR 利用无线信号相位随频率变化的关系估计传播距离。单一频率的相位具有周期性,同一个相位可能对应多个距离,因此需要跨多个频率采样。

Bluetooth SIG 的技术概览指出,Channel Sounding 使用 1 MHz 的频率间隔设计来推迟距离歧义的出现;实际工程仍应使用 RTT 和多频点处理降低歧义及异常结果的影响。
PBR 的主要问题是相位噪声、多径、天线群时延、频率偏差、姿态变化和信道质量。它通常需要多信道数据和后端算法,单个相位值不能直接当作距离。
在 Initiator 端,PBR 数据不是直接从一个变量读出,而是先把本地和远端 Step 数据解析成 cs_de_report_t,再交给 cs_de_calc():
memset(&m_cs_de_report, 0, sizeof(m_cs_de_report));
memset(m_n_iqs, 0, sizeof(m_n_iqs));
bt_ras_rreq_rd_subevent_data_parse(
&latest_peer_steps,
&latest_local_steps,
cs_config.role,
process_ranging_header,
NULL,
process_step_data,
&m_cs_de_report);
cs_de_quality_t quality = cs_de_calc(&m_cs_de_report);
if (quality == CS_DE_QUALITY_OK) {
/* 读取 IFFT、Phase Slope 和 RTT 结果并进入应用层滤波 */
k_sem_give(&sem_distance_estimate_updated);
}代码讲解:bt_ras_rreq_rd_subevent_data_parse() 负责解析 RAS 测距数据,process_step_data() 负责把每个 Step 的本地和远端信息放入算法报告,cs_de_calc() 再计算质量和距离估计。只有质量满足条件时,结果才进入后续统计和应用状态机。
5.3 RTT:Round-Trip Timing
RTT 通过发送、响应和接收之间的时间关系估计传播时间。理想化关系为:
距离 ≈ 光速 × 往返传播时间 / 2
实际控制器需要扣除或校准两端的处理延迟、发射接收延迟、时钟偏差和频率偏差。Bluetooth Core 6.0 将 RTT 的响应周转时间纳入协议设计,使 Initiator 能够把已知的 Reflector 响应时间用于更可靠的传播时间估计。
RTT 的优点是距离含义直观,并能与 PBR 形成互补;缺点是时间测量和延迟校准要求高,环境中的多径和非视距传播仍可能影响结果。
5.4 CS Step 和 Mode
一轮测量可理解为 Procedure、Event、Subevent 和 Step 的嵌套:
常见 Step Mode 的含义可以这样写入文章:
| Mode 0 | 校准频率生成差异,得到 FFO 等补偿信息 |
| Mode 1 | 主要用于 RTT 测量 |
| Mode 2 | 主要用于 PBR 测量 |
| Mode 3 | 在一个 Step 中组合 RTT 与 PBR,是否支持取决于实现和配置 |
应用层可以配置测量方法、重复次数、信道和部分过程参数。重复次数增加通常能改善统计稳定性,但也会增加射频占用、功耗和测量延迟。
当前 Initiator 工程中,CS 配置由结构体明确给出。例如,下面的配置选择 Initiator、1M 同步 PHY、算法 3b 和指定的 Mode 0 Step 数量:
static void cs_config_get(struct bt_le_cs_create_config_params *params)
{
memset(params, 0, sizeof(*params));
params->id = CS_CONFIG_ID;
params->mode = CS_CONFIG_MODE;
params->min_main_mode_steps = 2;
params->max_main_mode_steps = 5;
params->mode_0_steps = NUM_MODE_0_STEPS;
params->role = BT_CONN_LE_CS_ROLE_INITIATOR;
params->rtt_type = BT_CONN_LE_CS_RTT_TYPE_AA_ONLY;
params->cs_sync_phy = BT_CONN_LE_CS_SYNC_1M_PHY;
params->channel_selection_type = BT_CONN_LE_CS_CHSEL_TYPE_3B;
params->ch3c_shape = BT_CONN_LE_CS_CH3C_SHAPE_HAT;
params->ch3c_jump = 2;
}这些参数与实际串口日志一并记录。改变 Mode、PHY、Step 数或天线选择后,必须重新进行测试,不能把不同配置下的数据放到同一张曲线中比较。
5.5 安全和质量判断
Channel Sounding 的价值不仅是“距离数字更细”,还在于它把时间、相位、随机化和质量评估纳入同一套测量设计。
PBR 与 RTT 可以进行一致性检查;
随机化和探测序列增加伪造测距结果的难度;
NADM 等指标可用于识别异常或攻击迹象;
应用层不能只根据一次距离结果执行开锁、报警解除等安全动作;
应结合连接状态、测量质量、连续多次确认、滞回和异常值过滤。
6. 五种技术的对比
| 主要测量量 | 接收功率 | 天线间相位差/方向 | 多频相位和往返时间 |
| 直接输出 | 信号强弱,通常映射成粗略距离 | 角度;结合多节点得到位置 | 两设备间距离估计 |
| 标准基础 | BLE 链路已有能力 | Bluetooth 5.1 Direction Finding、CTE | Bluetooth Core 6.0 CS |
| 对端要求 | 普通 BLE 设备即可获得 RSSI | 需要 CTE,至少一端通常需要天线阵列 | 两端均需支持 CS 控制器和相应角色 |
| 硬件成本 | 低 | 阵列、切换、校准成本高 | 需要支持 CS 的新一代 SoC、射频和算法 |
| 环境敏感性 | 很高 | 多径和阵列校准敏感 | 仍受多径、姿态和天线影响,但信息维度更多 |
| 方向能力 | 没有 | 有 | 本身主要输出距离,方向需另配方案 |
| 功耗和延迟 | 通常最低 | 取决于 IQ 采样和阵列 | 取决于信道数、Step 数、重复次数和算法 |
| 适合场景 | 近远判断、低成本标签 | 室内定位、导航、资产方向 | 精细测距、数字钥匙、近距离安全和资产追踪 |
| 本文角色 | 对照基线 | 理论对比,当前硬件不作为主线 | nRF54LM20 DK + nRF54L15 Tag 实测主线 |
7. 本项目的协议栈和运行逻辑
7.1 控制平面与数据平面

7.2 nRF54L15 + Zephyr/NCS 的软件分层

7.3 本项目的一次测量流程

对应的简化应用代码可以写成:
static void report_distance(const cs_de_dist_estimates_t *estimate,
cs_de_quality_t quality)
{
if (quality != CS_DE_QUALITY_OK) {
LOG_WRN("Ranging result rejected, quality=%d", quality);
return;
}
LOG_INF("distance ifft=%.2f m phase_slope=%.2f m rtt=%.2f m",
(double)estimate->ifft,
(double)estimate->phase_slope,
(double)estimate->rtt);
handle_ranging_result(estimate->best, quality);
}代码讲解:日志同时输出三种估计值,便于后续比较 PBR 和 RTT;应用状态机只使用经过质量判断和滤波的结果。工程中如果 best 的选择策略发生变化,也应在文章中说明。
8. 实测结果与分析
8.1 测试布置
本次测试使用 nRF54LM20 DK 作为 Initiator,nRF54L15 Tag 作为 Reflector。两块板按照约 0.90 m 的参考距离布置,Tag 的状态指示灯正常点亮,LM20 DK 连接串口输出测距结果。测试使用天线路径 0,连续记录 15 组 IFFT、Phase Slope 和 RTT 结果。

图 8-1 nRF54LM20 DK 与 nRF54L15 Tag 的实物测试布置。

图 8-2 Channel Sounding 串口输出的 IFFT、Phase Slope 和 RTT 测距结果。
8.2 原始测量结果
| 1 | 0.98 | 0.96 | 3.23 |
| 2 | 0.98 | 0.96 | 3.35 |
| 3 | 0.95 | 0.95 | 3.43 |
| 4 | 0.92 | 0.93 | 2.94 |
| 5 | 0.91 | 0.92 | 2.94 |
| 6 | 0.91 | 0.92 | 2.72 |
| 7 | 0.90 | 0.88 | 3.43 |
| 8 | 0.90 | 0.88 | 2.99 |
| 9 | 0.90 | 0.87 | 2.99 |
| 10 | 0.90 | 0.87 | 2.99 |
| 11 | 0.90 | 0.88 | 2.99 |
| 12 | 0.90 | 0.88 | 2.99 |
| 13 | 0.88 | 0.88 | 2.99 |
| 14 | 0.82 | 0.88 | 2.99 |
| 15 | 0.82 | 0.88 | 2.99 |
8.3 统计结果
以实物布置中的约 0.90 m 作为参考距离,计算结果如下:
| IFFT | 0.905 | 0.82 | 0.98 | 0.044 | 0.029 | 0.044 | +0.005 |
| Phase Slope | 0.903 | 0.87 | 0.96 | 0.033 | 0.029 | 0.033 | +0.003 |
| RTT | 3.064 | 2.72 | 3.43 | 0.195 | 2.164 | 2.173 | +2.164 |
其中:
MAE = mean(|测量值 - 参考距离|) RMSE = sqrt(mean((测量值 - 参考距离)^2)) 平均偏差 = mean(测量值 - 参考距离)
8.4 结果分析
本次测试中,IFFT 和 Phase Slope 都稳定在 0.90 m 附近。IFFT 平均值为 0.905 m,平均偏差只有 +0.005 m;Phase Slope 平均值为 0.903 m,平均偏差为 +0.003 m。两种 PBR 结果的标准差分别为 4.4 cm 和 3.3 cm,说明在本次约 0.90 m、天线路径 0 的测试条件下,PBR 输出与实际布置距离基本一致。
RTT 结果集中在 2.72–3.43 m,平均值为 3.064 m,明显高于约 0.90 m 的参考距离。当前数据表明,在这组配置和测试条件下,RTT 结果不能直接作为最终距离输出,需要结合控制器时间参数、响应延迟补偿、RTT 类型和测量配置进行校正。PBR 与 RTT 的偏差也说明,应用层不能直接把所有算法结果简单平均,而应根据测量质量和配置选择有效结果。
从串口日志还可以看到,PBR 结果存在从约 0.98 m 逐渐下降到 0.82 m 的变化,但仍处于约 0.90 m 附近。对于基于距离的安全和资产追踪应用,可以使用 PBR 结果作为距离输入,再加入滑动中值滤波、连续确认和远近状态滞回,减少单次跳变造成的误报警。
8.5 本次测试结论
nRF54LM20 DK 与 nRF54L15 Tag 已完成 Channel Sounding 测距数据输出。
当前测试的 IFFT 和 Phase Slope 结果与约 0.90 m 的实物距离一致性较好。
当前测试的 RTT 结果存在约 2.16 m 的平均正偏差,不能直接与 PBR 结果混合使用。
cs_de 同时输出 IFFT、Phase Slope 和 RTT,便于应用层进行质量判断和算法选择。
这组数据适合支撑“Channel Sounding 能够输出精细距离信息,但不同测距方法需要分别校准和评估”的结论。
9. 总结
RSSI 通过接收功率提供低成本的近远判断;AoA 和 AoD 通过 CTE、IQ 采样和天线阵列获得方向信息;Bluetooth 6.0 Channel Sounding 则通过 PBR 和 RTT 为两个 Bluetooth LE 设备提供更直接的距离测量能力。
本项目使用 nRF54LM20 DK 和 nRF54L15 Tag 完成了 Channel Sounding 测试。实测结果显示,PBR 的 IFFT 与 Phase Slope 在约 0.90 m 布置下分别得到 0.905 m 和 0.903 m 的平均值,能够较好反映实际距离;RTT 平均结果为 3.064 m,存在明显正偏差,因此需要在应用中单独校准并结合质量状态使用。
对于基于距离感知的安全和资产追踪应用,推荐使用“PBR 距离估计 + 质量判断 + 滑动滤波 + 连续确认 + 状态滞回”的实现结构。RSSI 可作为低功耗预筛选,Channel Sounding 负责精细距离确认,Tag 的 LED 和 IMU 可进一步承担状态显示和移动检测功能。
我要赚赏金
