3. BLE定位原理与信号基础

好,咱们进入BLE定位这一章。说实话,在UWB和BLE融合的方案里,BLE往往扮演着“粗定位”和“辅助唤醒”的角色。但你别小看它,很多室内场景下,BLE的定位精度已经够用了,而且成本低、功耗小、普及率高。

我个人习惯把BLE定位拆成两大部分来看:信号模型和定位算法。信号模型解决“怎么把信号强度换算成距离”,定位算法解决“有了距离怎么算坐标”。咱们一个一个来。

3.1 RSSI测距模型:从信号强度到距离

RSSI(Received Signal Strength Indicator),说白了就是接收端收到的信号强度值。这个值跟距离有关系——距离越近,RSSI越大;距离越远,RSSI越小。但问题是,这个关系不是线性的,而且受环境影响很大。

常用的模型是对数距离路径损耗模型:

RSSI = A - 10 * n * log10(d)

其中:

  • A:距离发射器1米处的RSSI参考值(单位dBm)
  • n:路径损耗指数(环境因子,自由空间≈2,室内有遮挡≈3~4)
  • d:待求距离(单位米)

反过来,已知RSSI求距离:

d = 10 ^ ((A - RSSI) / (10 * n))

关键参数校准:A值和n值必须现场实测,不能照搬芯片手册。我在项目中遇到过,同一款芯片在不同厂房里,n值能差出0.8,算出来的距离能偏两三米。

我的经验:建议在部署前,先拿参考设备在目标环境里做一组“距离-RSSI”标定实验,用最小二乘法拟合出A和n。别偷懒,这一步省了,后面定位精度全白搭。

嗯,这里要注意:RSSI的波动非常大。即使设备静止不动,RSSI也可能跳变5~10dBm。所以直接拿单次RSSI算距离,结果基本没法用。我一般会做滑动窗口滤波,取最近5~10个样本的中位数或均值,再代入模型。

3.2 三角定位算法:三圆交会

三角定位,也叫三边测量。原理很简单:已知三个基站的位置,以及待测点到每个基站的距离,求待测点的坐标。

假设三个基站坐标分别为 (x1,y1)、(x2,y2)、(x3,y3),测距结果分别为 d1、d2、d3。那么待测点 (x,y) 满足:

(x - x1)² + (y - y1)² = d1²
(x - x2)² + (y - y2)² = d2²
(x - x3)² + (y - y3)² = d3²

这是个非线性方程组,通常用最小二乘法求解。我常用的做法是:把前两个方程相减消去二次项,得到线性方程,再用第三个方程做约束,最后用矩阵求逆或迭代法解。

避坑指南:我曾经在一个仓库项目里,三个基站布成了近似一条直线,结果定位结果在垂直于直线方向上误差巨大。三角定位对基站几何分布很敏感——基站围成的三角形越接近等边三角形,定位精度越好。千万别把三个基站摆成一排。

三角定位的优点是计算简单、实时性好。缺点也很明显:它依赖RSSI测距的准确性。而RSSI测距本身误差就大,所以三角定位在BLE场景下,典型精度也就3~5米。想提高精度?那就得用指纹定位了。

3.3 指纹定位法:用“信号指纹”匹配位置

指纹定位的思路跟三角定位完全不同。它不依赖物理模型,而是靠“经验”。

流程分两步:

  1. 离线采集阶段:在目标区域划分网格,在每个网格点采集所有基站的RSSI值,形成“指纹库”。每个指纹包含:坐标 + 该点处各基站的RSSI向量。
  2. 在线定位阶段:待测设备上报当前RSSI向量,系统在指纹库里找最相似的指纹,把对应的坐标作为定位结果。

相似度匹配常用两种方法:

  • 最近邻(NN):计算欧氏距离,选最小的那个指纹点。
  • K近邻(KNN):选K个最近邻指纹点,取坐标均值。K一般取3~5。

实战对比:三角定位 vs 指纹定位

对比项 三角定位 指纹定位
精度 3~5米(受环境影响大) 1~3米(依赖指纹密度)
部署成本 低,只需标定基站坐标 高,需要全区域指纹采集
环境变化适应性 差(模型参数需重标) 差(指纹库需重建)
实时性 高(毫秒级) 中(指纹匹配耗时)

我个人习惯在融合方案里这样分工:BLE指纹定位做“区域级”粗定位(比如判断在哪个房间),UWB做“厘米级”精定位。两者互补,效果很好。

避坑指南:我曾经在一个商场项目里,指纹库采集完一个月后,发现定位精度下降了很多。排查后发现,商场重新装修挪了货架,改变了信号传播路径。指纹库对环境变化非常敏感,建议定期更新,或者结合UWB的实时测距做动态校准。

3.4 BLE广播与扫描机制

搞清楚了定位算法,还得知道BLE是怎么把RSSI送出来的。这部分是底层机制,但直接影响定位系统的设计。

BLE设备在定位场景里通常分两种角色:

  • 广播者(Beacon):周期性发送广播包,包里包含设备ID、电量等信息。RSSI由接收端测量。
  • 扫描者(Scanner):监听广播包,读取RSSI值,上报给定位引擎。

广播参数直接影响定位效果:

参数 典型值 对定位的影响
广播间隔 100ms ~ 1s 间隔越小,数据更新越快,但功耗增加
发射功率 -20dBm ~ +4dBm 功率越大,覆盖越远,但邻近信道干扰增加
广播信道 37/38/39(2402/2426/2480 MHz) 三个信道轮流广播,避免同频干扰

注意:BLE广播在三个信道上跳频,不同信道的RSSI可能有差异。我建议在定位算法里,对同一设备同一时刻三个信道的RSSI做合并处理,或者只取最强信道的值,避免引入额外误差。

扫描端也有讲究。扫描窗口和扫描间隔决定了能抓到多少广播包。如果扫描窗口太短,可能漏包;太长则功耗高。我一般设扫描窗口30ms,扫描间隔100ms,这样在大多数场景下能抓到80%以上的广播包。

本章知识体系总览

下面这张图把本章的核心逻辑串起来了,你可以对照着回顾:

BLE定位原理知识体系 BLE定位原理 信号模型 对数距离损耗模型 A/n参数标定 RSSI滤波平滑 定位算法 三角定位 指纹定位 KNN匹配 BLE广播与扫描机制 广播间隔/功率/信道 扫描窗口/间隔 RSSI上报与合并 信号模型提供距离估计 → 定位算法计算坐标 广播与扫描机制决定数据质量和实时性

这张图把本章的脉络理得很清楚:信号模型是基础,定位算法是核心,广播扫描机制是支撑。三者缺一不可。你在实际项目中,可以根据精度需求和部署成本,灵活选择三角定位还是指纹定位,甚至两者结合。