我理解从BLE RSSI值获得距离(粗略的我)的计算和方法。但我的代码继续回归' nan'这意味着我在某个时刻除以零。我的算术/代码是否正确?
float RSSIA = -40.0; // Reference RSSI value at 1 meter
float RSSIn = 1; // Path-loss exponent
//−(10n log10(RSSI) − A)
[peripheral readRSSI];
NSNumber *RSSI = peripheral.RSSI;
NSLog(@"%@|RSSI|%f|(m)", characteristic.service.peripheral.name ,-(10*RSSIn*(log10([RSSI doubleValue])-RSSIA)));
答案 0 :(得分:2)
RSSI
通常具有负值。并且对数仅针对大于0的数字定义。这就是为什么得到nan
。
无论如何,您还不需要计算对数。 Documentation声明RSSI
已经是分贝:
The current received signal strength indicator (RSSI) of the peripheral, in decibels.
另请注意,RSSI
属性已弃用。您应该实施CBPeripheralDelegate
并使用peripheral:didReadRSSI:error:
方法计算距离。尽管RSSI
属性可用,但在调用[peripheral readRSSI]
后,其值可能不会立即更新 - 正在异步读取RSSI。