Есть ли объяснение регулярных колебаний в Bluetooth RSSI?

Я работаю с маяками kontakt.io Bluetooth eddystone UID и приложением для Android, использующим библиотеку alt-beacon (работает на Samsung Galaxy S5, хотя я сомневаюсь, что это актуально).

Я провел кучу испытаний в различных условиях и работаю над определением возможности высокоточного отслеживания с помощью трилатерации нескольких сигналов маяка.

Несколько раз я замечал, что устройство Android обнаруживает регулярные колебания RSSI маяка.

Вот один из наиболее ярких примеров. Как видите, воспринимаемый уровень сигнала (RSSI) колеблется между 3 различными уровнями RSSI, переключаясь каждые 5 секунд (~ -75dBm, ~ -90dBm, ~ -85dBm).

График RSSIvsTime

Маяк, который был нанесен на график, находился на расстоянии 2,5 м от устройства, и между ним и устройством не было препятствий. Радиобуй и другие радиомаяки, которые тестировались в то же время, все настроены на минимальный интервал рекламы и максимальную мощность TxPower. Я не буду утверждать, что условия вокруг тестовой среды были идеальными (например, у стеклянной стены), но они были постоянными, практически без движения в окружающей среде.

Моей первоначальной мыслью было скачкообразное изменение частоты Bluetooth, но при дальнейшем исследовании выяснилось, что это происходит с частотой 1600 / с. Двумя другими теориями, которые были у меня или моего коллеги, были: 1: странные помехи от нескольких маяков Bluetooth в областях, или 2: Адаптивная сила сигнала в маяках, но похоже, что в маяках нет логики (и есть другие причины, по которым это объяснение не имеет смысла)


person Elijah Moreau-Arnott    schedule 03.04.2018    source источник


Ответы (1)


Я считаю, что то, что вы видите на самом деле, основано на различном типичном уровне RSSI на каждом из трех рекламных каналов BLE 37/38/39.

Я понимаю процесс рекламы и сканирования следующим образом:

  1. Рекламное устройство рассылает каждую рекламу по всем трем рекламным каналам.

  2. Сканирующее устройство в режиме сканирования будет сканировать только один из трех рекламных каналов одновременно. Он будет переключаться между этими каналами с определенным для устройства интервалом, который может варьироваться от 2,5 мс до 10240 мс. Очевидно, что любые обнаружения в течение этого интервала будут для канала, на котором работает сканер.

Из графика видно, что Galaxy S5 сканирует по одному каналу в течение периода в верхнем диапазоне этого предела - около 10 секунд за раз. Я заметил это при тестировании обнаруженных ранее уровней RSSI рекламы BLE на устройствах Samsung. Вот график, созданный мной на Galaxy S6 Edge, демонстрирующий похожую картину. Обратите внимание, что есть три общих диапазона диапазонов RSSI, предполагающих наличие трех каналов. Единицами по оси X являются секунды, что показывает, что канал изменяется в тот же период, который вы видите. На моем графике шум при каждом измерении больше, возможно, потому, что я проводил измерения на расстоянии, вдвое превышающем 5 м.

BLE RSSI против времени

Я обнаружил, что этот документ хорошо объясняет процесс рекламы и поиска: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4327007/

person davidgyoung    schedule 03.04.2018
comment
Я не знал о трех каналах, и это может быть очень хорошим объяснением. Я полагаю, что моя путаница сейчас связана с библиотекой alt-beacon, поскольку я установил beaconManager.setBackgroundBetweenScanPeriod(0);beaconManager.setBackgroundScanPeriod(200); beaconManager.setForegroundBetweenScanPeriod(0); beaconManager.setForegroundScanPeriod(200); beaconManager.updateScanPeriods();, через который я должен был бы сканировать канал в течение 200 мс, а затем переключиться на следующий канал, который не объясняет интервалы 5 секунд. Мне было трудно найти более подробную информацию о том, как alt-beacon справляется с этим. - person Elijah Moreau-Arnott; 05.04.2018
comment
Периоды сканирования библиотеки просто запускают и останавливают сканирование BLE приложением - они не влияют на сканирование другими приложениями на телефоне (которое может происходить одновременно). Они также не влияют на канал, используемый для сканирования, которое обрабатывается на гораздо более низком уровне драйвера / микросхемы. К сожалению, на Android нет общедоступного API, позволяющего даже определить, какой канал используется для сканирования. - person davidgyoung; 05.04.2018