Ble广告包的可见性不一致

时间:2017-12-11 07:31:32

标签: android bluetooth-lowenergy beacon

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

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

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广播)

我发现各种关于信标的博客,低功耗蓝牙但没有找到关于这一特定行为的足够信息。非常感谢任何见解。

1 个答案:

答案 0 :(得分:3)

由于多种原因,Android设备未检测到100%的信标数据包。其中:

  • 广告包在许多不同的无线电信道上发送,发送器和接收器必须同时在同一个频道上。
  • 无线电噪声有时会导致接收机侧数字信号中的比特出错,导致CRC(即校验和)无法匹配,因此接收方会忽略该数据包。
  • 附近的多个蓝牙设备发送的数据包发生冲突。当发生冲突时,通常不会接收数据包,因为它们彼此重叠并相互干扰。
  • 蓝牙广告商会自动随机化其数据包的间距,因此10Hz的发射器不会每秒发送10个数据包。一些秒可能有11个数据包,其他9个数据包。

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

使用不同的蓝牙芯片组,不同的蓝牙天线,不同的情况(可以阻挡,放大或泄漏信号),WiFi信号干扰(使用相同的频段)导致不同Android设备型号之间存在巨大差异并且经常共享相同的芯片。)如您所见,即使在相同的测试条件下,某些Android机型上检测到的数据包数量也会大大减少。

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

在三星Galaxy S6 Edge +上,我注意到,根据广告包所在的频道,RSSI会明显更高或更低,这可能是由于天线调整到某些频道稍微变化的无线电频率。这意味着相对于较弱信道上的信号,噪声较高,并且当在这些信道上检测到广告时,较高的分组丢失率。不幸的是,Android API没有说明哪个频道用于检测数据包,因此无法纠正此问题。

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