Ble 广告数据包的可见性不一致

Inconsistent visibility of Ble advertising packets

我正在开发一个 android 应用程序,我们在其中使用我发现的 ble 设备来获取 rssi 来计算距离。我现在一起在信标上工作了几个月,但仍然很难理解它的行为。

我有一个 BLE 设备在 10hz(10 packets/sec) 广播。 使用 BluetoothLeScanner.startScan(scanCallback) 获取 rssi。扫描是连续的,因此据了解我们假设每秒获取所有 10 个 adv 数据包。由于扫描是连续的,因此不会丢失数据包。 但是每个 phone 上的行为都不同。我已经在多个 phone 上进行了测试,并且在几个 phone 上观察到的行为如下,

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 设备以 10hz 的频率准确广播)

我找到了关于信标、低功耗蓝牙的各种博客,但找不到关于此特定内容的足够信息behaviour.Any非常感谢您提供见解。

Android 设备检测不到 100% 的信标数据包,原因有很多。 其中:

  • 广告包在多个不同的无线电信道上发送,发送器和接收器必须同时在同一信道上。
  • 无线电噪声有时会导致接收方数字信号中的位错误,导致 CRC(即校验和)无法匹配,因此接收方会忽略数据包。
  • 从附近的多个蓝牙设备传输的数据包发生冲突。发生冲突时,由于相互重叠,相互干扰,一般收不到包。
  • 蓝牙广告商会自动随机化其数据包的间隔,因此 10Hz 的发射器不会每秒恰好发送 10 个数据包。有些秒可能有 11 个数据包,其他秒可能有 9.

即使在最佳条件下,您也不会在接收方获得 100% 的数据包传输。在低噪声环境中获得强信号的最佳质量接收器可能会获得 90% 的广告数据包。

由于使用不同的蓝牙芯片组、不同的蓝牙天线、不同的外壳(可以阻挡、放大或泄漏信号)、WiFi 信号干扰(它使用相同的频段并且通常共享相同的芯片。)如您所见,即使在相同的测试条件下,在某些 Android 型号上检测到的数据包数量可能要少得多。

Android 型号之间数据包接收率差异的主要驱动因素可能与蓝牙天线和 WiFi 电路的干扰有关。我注意到某些 Android 型号(例如我拥有的华为 P9 Lite 测试设备)对于相同的信标发射器显示的平均 RSSI(信号电平)比 Android Nexus 5X 接收器弱得多。这个信号弱了 20dB。由于上述原因,相对于噪声而言较弱的信号通常意味着较高的丢包率。 Nexus 4 是首批 Android 支持 BLE 的设备之一,如果打开 WiFi,通常根本无法检测到 BLE 数据包。

在 Samsung Galaxy S6 Edge + 上,我注意到根据广告数据包所在的频道,RSSI 会显着升高或降低,这可能是由于天线不太适应稍微变化的无线电频率一些渠道。这意味着噪声相对于较弱信道上的信号更高,并且在这些信道上检测到广告时丢包率更高。不幸的是,Android API 没有指示使用哪个通道检测数据包,因此无法纠正这一点。

底线:这是一个复杂的问题,有很多很多变数。您看到的结果并不罕见。