计算 RSSI 值

Calculate RSSI Value

我了解从 BLE RSSI 值获取距离(对我来说是粗略的)的计算和方法。但是我的代码继续 return 'nan'。这意味着我在某个时候除以零。我的 arithmetic/code 正确吗?

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)));

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。