了解ibeacon距离


113

试图掌握一个基本概念,即与ibeacon(信标/蓝牙低功耗/ BLE)相隔如何工作。是否有关于ibeacon可以精确测量到多少的真实文档。可以说我在300英尺外...易北门有可能检测到这一点吗?

专门针对v4&。v5和iOS,但通常是任何BLE设备。

蓝牙频率和吞吐量如何影响这一点?信标设备能否增强或限制距离/改善底层BLE?

               | 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       |

Answers:


223

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是在求解与我们测得的数据点的最佳拟合曲线时计算出的三个常数。青年汽车


4
很好的答案和代码David。txPower值从何而来?是否在客户端(接收)端完成了校准值?还是可以从信标获得的指标?
rmooney 2014年

14
0.89976、7.7095和0.111分别是什么?
malhal 2014年

4
有了这个等式,当信标从我的手机放到1/4时,我最终得到84457991114.574738。
jdog

1
埃迪斯通(Eddystone)是0 m参考点,以年为单位。除法与减法是因为在这种情况下我们不使用对数函数。对于我们使用的曲线拟合,减法不起作用。
davidgyoung '16

1
@davidgyoung能否请您分享最佳曲线拟合公式或通过我们可以找到我们设备的这三个值的任何内容?
Paresh Mayani

77

我正在非常彻底地调查iBeacons的准确性/ rssi /邻近性问题,我确实真的认为Internet上的所有资源(博客,StackOverflow中的帖子)都会出错。

davidgyoung(接受的答案,> 100赞)说:

请注意,此处的“准确性”一词是iOS表示的距离(以米为单位)。

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

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

让我重复一遍:以米为单位的一个西格玛精度。google上有关该主题的所有10个顶级页面仅在文档中引用了“一个西格玛”一词,但是没有一个分析该词,这是理解这一点的核心。

重要的是要说明什么实际上是一个西格玛精度。以下网址入手:http://en.wikipedia.org/wiki/Standard_errorhttp://en.wikipedia.org/wiki/Uncertainty

在物理世界中,进行一些测量时,总是会得到不同的结果(由于噪声,失真等原因),并且结果往往来自高斯分布。有两个描述高斯曲线的主要参数:

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

一个sigma是描述高斯曲线的窄/宽的另一种方式。
它只是说如果测量的平均值是X,一个sigma是σ,则所有测量的68%将在X - σ和之间X + σ

例。我们测量距离并得到高斯分布。平均为10m。如果σ为4m,则意味着68%的测量值在6m和14m之间。

当我们用信标测量距离时,我们得到RSSI和1米校准值,这使我们能够以米为单位测量距离。但是每次测量都给出不同的值,这些值形成高斯曲线。和一个西格马(和精确度)是测量,没有距离的准确性!

这可能会引起误解,因为当我们将信标移到更远的地方时,实际上一个sigma会增加,因为信号会变差。但是使用不同的信标功率电平,我们可以得到完全不同的精度值,而无需实际更改距离。功率越高,误差越小。

有一篇博客文章彻底分析了此问题:http : //blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/

作者有一个假设,准确性实际上就是距离。他声称Kontakt.io的信标是错误的,因为他将功率提高到最大值,准确度在1、5甚至15米处很小。在增加功率之前,精度非常接近距离值。我个人认为这是正确的,因为功率水平越高,干扰的影响就越小。奇怪的是,为什么Estimote信标不以这种方式表现。

我并不是说我100%正确,但是除了作为iOS开发人员之外,我还拥有无线电子学学位,并且我认为我们不应该忽略文档中的“一个西格玛”一词,我想开始对此进行讨论。

Apple的准确性算法可能只是收集最近的测量值并分析它们的高斯分布。这就是它设置准确性的方式。我不会排除他们使用信息形式的加速度计来检测用户是否在移动(以及移动速度)以重置先前的分配距离值的可能性,因为它们肯定已经改变了。


关于“ sigma”相关性的出色介绍。对于一个极客(甚至是一个苹果极客)来说,当它们的意思是“距离”时,使用变量名“ accuracy”也很奇怪。每个RSSI“距离”或“位置”确定都带有“误差范围”(例如,您在这里+/-这么多)。因此,它们的库既具有“距离”功能又具有“准确性”功能是合理的。
杰西·奇斯霍尔姆

@ r00dY我必须说一个绝妙的解释。现在,只是一个问题,如果您可以提供帮助。我有一个在1m,2m ... 15m,... 20m等处测得的信标的校正数据。我有每个距离的平均距离值。现在,从位置管理员代表那里,当我们获得信标数据(例如信标大,小,rssi等)时,是否建议使用从我解释的上述校准中获得的距离?请提出建议,任何帮助将不胜感激。提前致谢。
Alkesh Fudani

Apple的accuracy功能是rssi和的功能tx power。Estimote决定对accuracy功能进行反向工程并开始提供tx power值以使读数accuracy估算距离并不是完全不可能的。这为估算距离提供了更简单的开发人员体验,但打破了Apple对的定义accuracy。其他品牌可能更符合Apple的定义,accuracy实际上提供的是“ 1米的估算值”,而不是进行accuracy估算距离的反向工程值。
有意义,

63

iBeacon的输出功率在1米的距离处进行测量(校准)。让我们假设这是-59 dBm(仅作为示例)。iBeacon会将这个数字作为其LE广告的一部分。

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

由于这些数字的单位是dBm,因此功率之比实际上就是dB的差。所以:

ratio_dB = txCalibratedPower - RSSI

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

ratio_linear = 10 ^ (ratio_dB / 10)

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

power = power_at_1_meter / 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。


出于好奇:如何ratio_dB = txCalibratedPower - RSSI工作?由于两种度量均以dBm为单位,因此我也假设结果也以dBm为单位?
BlackWolf 2015年


3

根据信号路径衰减,通过将测得的接收信号强度与要求的发射功率进行比较,计算得出的信号路径衰减,可以估算到iBeacon格式的广告数据包到源的距离,该发射器应该在广告数据中进行编码。

像这样的基于路径损耗的方案仅是近似的,并且会随天线角度,居间物体以及可能有噪声的RF环境等因素而发生变化。相比之下,真正为距离测量而设计的系统(GPS,雷达等)依赖于传播时间的精确测量,在相同情况下甚至可以检查信号的相位。

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


1

这是可能的,但这取决于您接收到的信标的功率输出,附近的其他射频源,障碍物和其他环境因素。最好的办法是在您感兴趣的环境中尝试一下。


1

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

您将看到很多解决方案,只是指示用户“请在这里握住您的手机”,以减少客户的沮丧感。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.