Подтвердить что ты не робот

Поиск расстояния от значения RSSI устройства Bluetooth с низким энергопотреблением

Я работаю над проектом концепции низкой энергии Bluetooth. Я получаю значение RSSI от 1 до 100. Когда я перемещаю тег, значение RSSI увеличивается, когда периферийное устройство удаляется от iPhone и уменьшается по мере приближения.

Может ли кто-нибудь помочь мне получить точное расстояние между iPhone и тегом Bluetooth на основе значения RSSI? Есть ли доступные формулы?

Я получаю значение RSSI устройства с помощью этого метода делегата с низким энергопотреблением:

 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral   
   *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
4b9b3361

Ответ 1

Я ответил на это в другом потоке, повторяя его здесь.

В прямой видимости (никаких препятствий, вызывающих изменение в RSSI), -6 дБ, кажется, удваивает расстояние.

Если вы на расстоянии 1 м читаете RSSI -40dB, тогда 2m дает -46dB, 4m дает -52dB, 8m дает -58dB, 16m дает -64dB.

Вы не можете получить точную позицию, только круговое максимальное расстояние.

Используя триангуляцию с 2-3 или более устройствами, вы получаете гораздо более точный результат позиционирования. Вы можете получить это исключительно из рекламных пакетов, но вы должны либо отключить сканирование → Включить сканирование, либо сообщить iOS CoreBluetooth, чтобы сообщать обо всех рекламных пакетах.

В режиме переднего плана вы можете сделать это, но в фоновом режиме вы не сможете получить все пакеты сообщений. Вы должны подключиться и прочитать RSSI, чтобы сделать это в фоновом режиме.

Ответ 2

Существует множество методов локализации на основе RSSI, таких как триангуляция и отпечатки пальцев. Ни один из них не идеален. На RSSI влияют многие факторы, такие как препятствия, затухание многолучевости, поляризация антенны и защита от перекрестного тела.

Теоретическая зависимость между RSSI и расстоянием выглядит примерно так:

RSSI[dbm] = −(10n log10(d) − A) 

где d - это расстояние, а A - это смещение, которое является измеренной точкой отсчета RSSI на 1 метр от устройства BLE.

Просто google для RSSI[dbm] = −(10n log10(d) − A), и вы найдете некоторые источники об этом.

Ответ 3

Нахождение расстояния от RSSI немного сложно, и это зависит от множества факторов, даже условий тестирования и ориентации антенны и т.д. В следующей статье приводятся некоторые исследования относительно того же http://www.s2is.org/Issues/v1/n2/papers/paper14.pdf

Ответ 4

В swift 4.2

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

Более подробный ответ здесь