我正在研究蓝牙低能耗概念项目。我得到了RSSI值 当我移动标签时,RSSI值随着外围设备离开iPhone而增加,并随着它移近而减小。
有人可以帮我根据RSSI值获得iPhone和蓝牙标签之间的确切距离吗?有没有可用的公式?
我借助这种蓝牙低能量代表方法获取设备的RSSI值:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral
*)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
答案 0 :(得分:32)
我在另一个帖子中回答了这个问题,在这里重复一遍。
在视线范围内(没有障碍导致RSSI发生变化), -6dB似乎是距离的两倍。
如果你在1m距离读取RSSI -40dB然后2m给出-46dB,4m给出-52dB,8m给出-58dB,16m给出-64dB。
您无法获得确切的位置,只能获得圆形的最大距离。
使用2-3个或更多设备进行三角测量可以获得更准确的定位结果。 你可以完全从广告包中获得这个,但你必须要么禁用扫描 - >启用扫描或告诉iOS CoreBluetooth报告所有adv软件包。
在前台模式中你可以这样做,但在后台模式下你无法获得所有的adv包。您必须连接并读取RSSI才能在后台执行此操作。
答案 1 :(得分:26)
有许多基于RSSI的定位技术,如三角测量和指纹识别。它们都不是完美的。 RSSI受到许多因素的影响,如障碍物,多径衰落,天线极化和横向屏蔽。
RSSI和距离之间的理论关系是这样的:
RSSI[dbm] = −(10n log10(d) − A)
其中 d 是距离, A 是距离BLE设备1米测量RSSI的偏移量。
只需谷歌搜索RSSI[dbm] = −(10n log10(d) − A)
,您就会找到一些相关信息来源。
答案 2 :(得分:9)
寻找与RSSI的距离有点棘手,这取决于很多因素,甚至是测试环境和天线方向等。 以下论文正在对此进行一些研究 http://www.s2is.org/Issues/v1/n2/papers/paper14.pdf
答案 3 :(得分:1)
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if let power = advertisementData[CBAdvertisementDataTxPowerLevelKey] as? Double{
print("Distance is ", pow(10, ((power - Double(truncating: RSSI))/20)))
}
}
更详细的答案Here