Swift - 将 RSSI 转换为距离

Swift - Converting RSSI to Distance

我在使用 CoreBluetooth API 和 运行 做一些工作时遇到了问题。我看过的所有地方都说要转换 RSSI(蓝牙信号强度),您必须执行以下操作:

Distance = 10 ^ ((Measured Power – RSSI)/(10 * N))

并且:

var txPower = -59 //hard coded power value. Usually ranges between -59 to -65

if (rssi == 0) {
  return -1.0; 
}

var ratio = rssi*1.0/txPower;
if (ratio < 1.0) {
  return Math.pow(ratio,10);
}
else {
  var distance =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;    
  return distance;
}

我已经尝试了以上所有方法以及我能找到的所有方法。 None 它让我准确测量了大约 0.5 米到大约 5 - 7 米之间的距离。

我这样做的代码是让两部手机都使用该应用程序作为中央和外围蓝牙,并且在来自 CentralManagerdidDiscoverPeripheral 回调中,我得到了 RSSI - 我想将其转换为距离(米、英尺)。

连同:

我还需要了解如何获得 iPhone 的测量功率(1 米处的 RSSI 强度),因为它确实有助于准确计算。

另外,environmental factor在蓝牙方面是什么意思?不同的环境因素意味着什么(运行ge 为 2-4)。有没有办法改变或增加 Apple 设备的 Broadcasting Power value

基本上,我正在寻找一个准确的 RSSI 距离公式,它适用于 0.5 米到 5-7 米的距离

非常感谢!

这是一个常见的解决方案:

pow(10, ((-56-Double(rssi))/(10*2)))*3.2808

它适用于大多数距离,但当你靠近或太远时会变得非常不准确,所以我最终使用了类似于 Apple 的 iBeacons 的垃圾箱(UnknownFarNear, Immediate).如果原始RSSI小于-80,则为far,如果大于-50,则为immediate,如果介于两者之间,就是near。这个解决方案对我有用。