2015-01-09 3 views
0

Я понимаю, что вычисление и метод позволяют получить расстояние (грубое по мне) от значения BLE RSSI. Но мой код продолжает возвращать «нан». Это означает, что я делю на нуль в какой-то момент. Является ли моя арифметика/код правильной?Вычислить значение RSSI

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

Вы проверяли значение 'peripheral.RSSI' перед применением' log10'? – Larme

ответ

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 считывается асинхронно.

Смежные вопросы