Поиск расстояния от значения 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
Ответы
Ответ 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)))
}
}
Более подробный ответ здесь