了解 ibacon 距离

Posted

技术标签:

【中文标题】了解 ibacon 距离【英文标题】:Understanding ibeacon distancing 【发布时间】:2013-12-23 08:25:20 【问题描述】:

尝试掌握一个基本概念,了解如何使用 ibacon(信标/低功耗蓝牙/BLE)保持距离。是否有任何关于 ibeacon 可以测量多远的真实文档。假设我在 300 英尺外...... ibeacon 是否有可能检测到这一点?

专门用于 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       |

【问题讨论】:

【参考方案1】:

iOS 提供的距离估计是基于信标信号强度 (rssi) 与校准的发射器功率 (txPower) 之比。 txPower 是 1 米外以 rssi 为单位的已知测量信号强度。每个信标都必须使用此 txPower 值进行校准,以实现准确的距离估计。

虽然距离估计很有用,但它们并不完美,需要您控制其他变量。 在滥用此之前,请确保您read up on the complexities and limitations。

当我们构建 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

【讨论】:

很好的答案和代码大卫。 txPower 值从何而来?它是在客户端(接收)端完成的校准值吗?还是您可以从信标中获得的指标? 0.89976、7.7095 和 0.111 的值是什么? 有了这个等式,当信标位于我手机的 1/4 时,我最终得到 84457991114.574738。 Eddystone 是 0 m 参考点,年。除法与减法是因为在这种情况下我们没有使用对数函数。减法不适用于我们使用的曲线拟合。 @davidgyoung 你能分享一下最佳曲线拟合公式或任何我们可以为我们的设备找出这 3 个值的东西吗?【参考方案2】:

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

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

请注意,此处的“准确度”一词是指 iOS 以米为单位的距离。

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

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

让我重复一遍:以米为单位的 sigma 精度。谷歌关于该主题的所有 10 个热门页面都有术语“one sigma”,仅引用自文档,但没有一个分析该术语,这是理解这一点的核心。

非常重要的是解释什么是真正的one sigma accuracy。以下网址开头:http://en.wikipedia.org/wiki/Standard_error、http://en.wikipedia.org/wiki/Uncertainty

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

    mean(这个很容易理解,就是曲线出现峰值的值)。 标准偏差,表示曲线的宽度或宽度。曲线越窄,精度越高,因为所有结果都彼此接近。如果曲线较宽且不陡峭,则表示同一现象的测量值相差很大,因此测量质量较差。

一个 sigma 是描述高斯曲线有多窄/多宽的另一种方式。 它简单地说,如果测量的平均值是 X,并且 one sigma 是 σ,那么所有测量值的 68% 将介于 X - σX + σ 之间。

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

当我们使用信标测量距离时,我们会得到 RSSI 和 1 米校准值,这使我们能够以米为单位测量距离。但每次测量给出不同的值,形成高斯曲线。 one 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 开发人员之外,我还拥有无线电子学学位,我认为我们不应该忽略 docs 中的“one sigma”术语,我想开始讨论关于它。

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

【讨论】:

“sigma”相关性的优秀介绍。此外,对于一个极客(甚至是苹果极客)来说,当他们的意思是“距离”时使用变量名“准确度”也是很奇怪的。每个 RSSI“距离”或“位置”确定都带有“误差范围”(例如,你在这里 +/- 这么多)。因此,他们的库将具有“距离”功能和“准确性”功能是有道理的。 @r00dY 我必须说一个绝妙的解释。现在,只是一个问题,如果你能帮忙。我有一个在 1m、2m ... 15m、... 20m 等处测量的信标校准数据。我有每个距离的平均距离值。现在,当我们从位置管理器代表那里获得信标数据(如信标主要、次要、rssi 等)时,是否建议使用我解释的上述校准获得的距离?请提出建议,任何帮助将不胜感激。提前致谢。 Apple 的accuracyrssitx power 的函数。 Estimote 决定对accuracy 函数进行逆向工程并开始提供tx power 值以便读取accuracy 估计距离,这并非完全不可能。这为估计距离提供了更简单的开发人员体验,但违反了 Apple 对accuracy 的定义。其他品牌可能更忠实于 Apple 对 accuracy 的定义,实际上提供了“1 米估算值”,而不是使 accuracy 估算距离的逆向工程值。【参考方案3】:

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 我希望结果以 dBm 为单位【参考方案4】:

iBeacon 使用低功耗蓝牙 (LE) 来了解位置,低功耗蓝牙的距离/范围为 160 英尺 (http://en.wikipedia.org/wiki/Bluetooth_low_energy)。

【讨论】:

【参考方案5】:

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

像这样的基于路径损耗的方案只是近似的,并且会随着天线角度、干预对象以及可能的嘈杂射频环境等因素的变化而变化。相比之下,真正为距离测量而设计的系统(GPS、雷达等)依赖于对传播时间的精确测量,在相同情况下甚至会检查信号的相位。

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

您将看到很多解决方案只是简单地指示用户“请在此处拿着手机”,以减少客户的挫败感。

【讨论】:

以上是关于了解 ibacon 距离的主要内容,如果未能解决你的问题,请参考以下文章

jsclientY pageY screenY layerY offsetY的区别

了解一下百度提供的python通用文字识别功能,距离百度AI近了一点点!

使用 Uber Driver API 来了解取件时间?

在 iPhone 模拟器上测试位置距离

深入了解Java的String

深入了解ASP.NET运行内幕