计算RSSI值

时间:2015-01-09 15:24:40

标签: objective-c bluetooth-lowenergy core-bluetooth

我理解从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)));

1 个答案:

答案 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。