一、距离 d 和 RSSI 的计算公式
d=10^((ABS(RSSI)-A)/(10*n)) ————- (1)
其中 d 为距离,单位是 m。
RSSI 为手机接收到蓝牙信标的信号强度,为负数。
A 为手机距离蓝牙信标 1m 时接收到的 RSSI 的值的绝对值。
n 为环境衰减因子,需要测试矫正。下图是根据 A=63, n=1.56 制作的图形:
如何确定 A 和 n 的值?
使用华为手机在空旷的环境中,分别采集 5 个蓝牙信标距离手机 1m,2m,……10m 时手机接收到的 RSSI 值,每次取 100 个数据求平均值。以 1m 处 RSSI 的信号强度的绝对值作为 A,以 6m 处 RSSI 的信号强度代入公式(1)求得 n 值。
下图数据引用了昆仑智联的蓝牙信标 KTBB802,发射功率-8dBm 的情况下的测试值。根据计算得到的 A 和 n 值,计算了不同信号强度对应的距离(计算值)与实际距离的误差, 在 8m 以内距离,测量值和实际值的误差小于 1.15m。
二、对于不同手机接收灵敏度的差异如何进行调整?
影响手机接收蓝牙信标的信号强度有两种误差,一种误差是系统误差,如由于手机接收
灵敏度的强弱引起的 RSSI 的增加或者减少,另外一种是随机误差,如遮挡等原因引起的测量误差。
手机在一个环境里面会收到很多信标的信号,并且信号强的少(距离近的少),信号弱的多(距离远的多),所以取平均值应该不合理,我们可以考虑取中间值。
我们可以在一个场所用华为手机(预先获取)和导航手机(导航时获取)获取信号值并排序: 如果华为手机获取的信号如下: -60,-61,-62,-63,-64,…… -70, -71, ……
(可以取整数,也可以按照 0.5 的精度)
实际导航手机获取的信号如下: -57,-58,-59,-60,-61,…… -67, -68, ……
(可以取整数,也可以按照 0.5 的精度)
手机离地面高度为 1.1 米,蓝牙信标高度为 2.8 米,蓝牙信标 8 米布置一个,则理论上
手机离蓝牙信标最短距离为 1.7 米,最长距离为 5.9 米,对应华为手机的信号强度分别为- 68,-75。考虑部分手机接收灵敏度比华为手机弱,所以我们可以重点分析信号强度大于-85 的信号。
如果按照 1dBm 的精度排序,可以各取前面 10 个信号值求平均,差值就是要调整的 A 值。随着手机接收信号数据的增多,重复以上计算,会将 A 值调整到一个合理的范围。总体来说就是手机 A 和手机 B 接收到的信号强度的前面最强的 10 个值比较,差值就是要调整的部分。