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

У меня есть устройство BLE, вещающее на 10hz (10 пакетов / сек). Использование BluetoothLeScanner.startScan(scanCallback) для получения rssi. Сканирование является непрерывным, и поэтому мы предполагаем получать все 10 рекламных пакетов каждую секунду. Поскольку сканирование является непрерывным, пакеты данных не пропадают. Но поведение на каждом телефоне разное. Я тестировал на нескольких телефонах и наблюдал поведение на нескольких телефонах, как показано ниже.

Moto C Plus, AV: 7.0: 6-8 Callbacks/s

Redmi Note 4, Av: 7.0: 4-6 Callbacks/s

Moto G 2ng generation, AV: 6.0: android finds 1-3 callbacks for few seconds and no callbacks for seconds like 5,10 even for around 20+sec. 

One Plus one, AV: 6.0.1 : frequent is 1-3 callbacks and rest of behaviour is same as Moto G, no callbacks for seconds( like 5,10 even for around 20+sec)..

У меня нет устройства под управлением Android версии 5, чтобы узнать, как это работает.

Запрос:

Почему эта несогласованность в видимости рекламы на Android различается: из-за версий Android или отдельных устройств Android?

(Уверен, что мое устройство BLE передает точно на частоте 10 Гц)

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

-1
Shree 11 Дек 2017 в 10:31

1 ответ

Лучший ответ

Не 100% пакетов-маяков обнаруживаются устройствами Android по ряду причин. Среди них:

  • Рекламные пакеты отправляются по нескольким различным радиоканалам, и передатчик и приемник должны быть на одном канале одновременно.
  • Радиошум иногда вызывает ошибки в битах в цифровом сигнале на стороне приемника, из-за чего CRC (то есть контрольная сумма) не совпадает, поэтому приемник игнорирует пакет.
  • Возникают коллизии в передаваемых пакетах от нескольких находящихся поблизости устройств Bluetooth. Когда происходят коллизии, пакеты обычно не принимаются, потому что они накладываются друг на друга и мешают друг другу.
  • Рекламщики Bluetooth автоматически рандомизируют интервалы между своими пакетами, поэтому передатчик с частотой 10 Гц не отправляет ровно 10 пакетов каждую секунду. В одних секундах может быть 11 пакетов, в других - 9.

Даже в самых лучших условиях вы не получите 100% пакетов, передаваемых на приемник. Приемники наилучшего качества, получающие сильные сигналы в условиях низкого уровня шума, могут получить 90% объявленных пакетов.

Существует также огромная разница между различными моделями устройств Android, вызванная использованием разных наборов микросхем Bluetooth, разных антенн Bluetooth, разных случаев (которые могут блокировать, усиливать или пропускать сигналы), интерференции сигнала с Wi-Fi (который использует один и тот же частотный диапазон и часто разделяет один и тот же чип.) Как вы видели, количество пакетов, обнаруженных на некоторых моделях Android, может быть значительно меньше даже при тех же условиях тестирования.

Основная причина различий в скорости приема пакетов между моделями Android, вероятно, связана с антенной Bluetooth и помехами от цепей WiFi. Я заметил, что некоторые модели Android (например, тестовое устройство Huawei P9 Lite, которым я владею) показывают в среднем гораздо более слабый RSSI (уровень сигнала) для одного и того же передатчика маяка, чем приемник Android Nexus 5X. Этот сигнал на 20 дБ слабее. Более слабые сигналы по сравнению с шумом обычно означают более высокую скорость потери пакетов по причинам, описанным выше. Одно из первых устройств Android, поддерживающих BLE, Nexus 4, обычно вообще не могло обнаруживать пакеты BLE, если Wi-Fi был включен.

На Samsung Galaxy S6 Edge + я заметил, что в зависимости от того, на каком канале был рекламный пакет, RSSI будет значительно выше или ниже, возможно, из-за того, что антенна менее настроена на слегка изменяющуюся радиочастоту некоторых каналов. Это означает, что шум был выше по сравнению с сигналом на более слабых каналах, и более высокая скорость потери пакетов при обнаружении рекламы на этих каналах. К сожалению, API Android не указывают, какой канал использовался для обнаружения пакета, поэтому нет возможности исправить это.

Итог: это сложный вопрос, который имеет много-много переменных. В результатах, которые вы наблюдаете, нет ничего необычного.

4
davidgyoung 11 Дек 2017 в 15:51