理解 ibeacon 距离

试图掌握一个基本的概念,如何与 ibeacon (信标/蓝牙-低能量/BLE)的距离可以工作。是否有任何真实的文件记录了 ibeacon 可以精确测量多远。假设我在300英尺之外,有没有可能用灯塔探测到这个?

特别适用于 v4和.v5以及 iOS,但通常适用于任何 BLE 设备。

蓝牙频率和吞吐量如何影响这个?信标设备是否可以增强或限制基本的 LE 的距离/改善?

也就是说

               | Range       | Freq       | T/sec      | Topo       |
|–—–––––––––––|–—––––––––––|–—––––––––––|–—––––––––––|
Bluetooth v2.1 | Up to 100 m | < 2.481ghz | < 2.1mbit  | scatternet |
|-------------|------------|------------|------------|
Bluetooth v4   |     ?       | < 2.481ghz | < 305kbit  | mesh       |
|-------------|------------|------------|------------|
Bluetooth v5   |     ?       | < 2.481ghz | < 1306kbit | mesh       |
137571 次浏览

iBeacon 使用低耗电蓝牙(LE)来保持位置信息,而蓝牙 LE 的距离/范围是160英尺(http://en.wikipedia.org/wiki/Bluetooth_low_energy)。

通过比较测量的接收信号强度与发射机应该在广告数据中编码的声称的发射功率,从信号路径衰减计算出的到 iBeacon 格式广告包源的距离为 estimated

像这样的基于路径损耗的方案只是近似的,并且受到诸如天线角度、中间物体以及可能的噪声射频环境等因素的影响。相比之下,真正用于距离测量的系统(GPS、雷达等)依赖于对传播时间的精确测量,在同样的情况下,甚至检查信号的相位。

正如贾如指出的,160英尺可能超出了预期的范围,但这并不一定意味着一个数据包将 永远不会通过,只是人们不应该指望它在这个距离工作。

IOS 提供的距离估计是基于信标信号强度(rssi)与标定发射机功率(txPower)的比值。TxPower 是已知的测量信号强度,以1米远的 rssi 表示。每个信标必须用这个 txPower 值进行校准,以允许精确的距离估计。

虽然距离估计是有用的,但它们并不完美,需要您控制其他变量

当我们构建 Android iBeacon 库时,我们必须提出自己的独立算法,因为 iOS CoreLocation 源代码不可用。我们在已知的距离上测量了一组 rssi 测量值,然后做了一个最佳拟合曲线来匹配我们的数据点。我们提出的算法如下面的 Java 代码所示。

注意,这里的“准确性”一词是 iOS 中以米为单位的距离。这个公式并不完美,但它大致接近 iOS 的功能。

protected static double calculateAccuracy(int txPower, double rssi) {
if (rssi == 0) {
return -1.0; // if we cannot determine accuracy, return -1.
}


double ratio = rssi*1.0/txPower;
if (ratio < 1.0) {
return Math.pow(ratio,10);
}
else {
double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;
return accuracy;
}
}

注: 0.89976、7.7095和0.111是求解 我们的测量数据点的最佳拟合曲线时计算的三个常数。YMMV

IBeacon 的输出功率是在1米的距离内测量(校准)的。让我们假设这是 -59dBm (只是一个例子)。IBeacon 将把这个数字作为 LE 广告的一部分。

监听设备(iPhone 等)将测量设备的 RSSI。例如,假设这是 -72dBm。

Since these numbers are in dBm, the ratio of the power is actually the difference in dB. So:

ratio_dB = txCalibratedPower - RSSI

为了将其转换成线性比率,我们使用 dB 的标准公式:

ratio_linear = 10 ^ (ratio_dB / 10)

如果我们假设能量守恒,那么信号强度必然下降为1/r ^ 2,所以:

求 r,我们得到:

r = sqrt(ratio_linear)

在 Javascript 中,代码如下:

function getRange(txCalibratedPower, rssi) {
var ratio_db = txCalibratedPower - rssi;
var ratio_linear = Math.pow(10, ratio_db / 10);


var r = Math.sqrt(ratio_linear);
return r;
}

注意,如果你在一座钢结构建筑内部可能会有内部反射使得信号衰减慢于1/r ^ 2。如果信号通过人体(水) ,那么信号就会衰减。很有可能天线在各个方向的增益不相等。房间里的金属物体可能会产生奇怪的干涉图案。等等,等等。.YMMV.

在同一地点有多个电话和信标,很难高精度地测量距离。尝试使用 Android 的“ b 和 l 蓝牙 LE 扫描仪”应用程序,来可视化信号强度(距离)的变化,对于多个信标,你会很快发现,复杂的,自适应算法可能需要提供任何形式的一致的接近测量。

您将看到许多解决方案,它们只是简单地指示用户“请把手机放在这里”,以减少客户的不满。

我正在非常彻底地调查 iBeacon 的准确性/rssi/接近性问题,我真的认为互联网上的所有资源(博客,StackOverflow 中的帖子)都搞错了。

Davidgyoung (接受回答,> 100个赞成票)说:

注意,这里的“准确性”一词是 iOS 中以米为单位的距离。

实际上,大多数人都这么说,但我不知道为什么! 文档非常清楚地说明了 CLBeacon:

表示以米为单位的一西格玛水平精度。 使用此属性区分具有相同邻近值的信标。不要用它来确定信标的精确位置。由于射频干扰,精度值可能会波动。

让我重复一遍: 以米为单位的一西格玛精度。在谷歌关于这个主题的所有10个顶部页面中,只有引用文档中的术语“ one sigma”,但是没有一个分析这个术语,这是理解这个的核心。

非常重要的是解释什么是实际的 一西格玛精度。以下 URL 开始: http://en.wikipedia.org/wiki/Standard_errorhttp://en.wikipedia.org/wiki/Uncertainty

在物理世界中,当你进行一些测量时,你总会得到不同的结果(由于噪声、失真等) ,而且通常结果形成正态分布。描述高斯曲线有两个主要参数:

  1. 平均值(这很容易理解,它是曲线出现峰值的值)。
  2. 标准差表示曲线的宽度或窄度。曲线越窄,精度越高,因为所有的结果都很接近。如果曲线宽而不陡,则意味着同一现象的测量值彼此之间差别很大,因此测量值的质量很差。

一个 σ 是描述高斯曲线有多窄/宽的另一种方法。
它简单地说,如果测量平均值是 X,而 一西格玛是 σ,那么所有测量值的68% 将在 X - σX + σ之间。

例子。我们测量距离得到一个正态分布。平均数是10米。如果 σ 为4m,则意味着68% 的测量值在6m 和14m 之间。

当我们用信标测量距离时,我们得到 RSSI 和1米的校准值,这使我们可以用米来测量距离。但是每一种测量给出不同的值,形成高斯曲线。而 一西格玛(和准确度)是测量的准确度,不是距离!

这可能是误导,因为当我们移动信标更远,一西格玛实际上增加,因为信号更差。但是用不同的信标功率水平,我们可以得到完全不同的精度值,而实际上不改变距离。功率越大,误差越小。

There is a blog post which thoroughly analyses the matter: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/

作者假设精度实际上就是距离。他声称 Kontakt.io 的信标是错误的,因为当他将功率增加到最大值时,精度值对于1米、5米甚至15米来说都非常小。在增加功率之前,精度与距离值相当接近。我个人认为这是正确的,因为功率等级越高,干扰的影响越小。而且很奇怪为什么 Estimote 信标不是这样的。

我不是说我是100% 正确的,但除了作为 iOS 开发者,我还拥有无线电子学的学位,我认为我们不应该忽视来自博士的“一西格玛”术语,我想开始讨论这个问题。

也许苹果公司的精确算法只是收集最近的测量数据并分析其正态分布。这就是它如何设置准确性。我不排除这种可能性,他们使用信息形式的加速度计来检测用户是否移动(以及如何快速) ,以重置以前的分布距离值,因为他们肯定已经改变。