了解ibeacon距离

ram*_*ssa 107 bluetooth objective-c ios bluetooth-lowenergy ibeacon

试图掌握与ibeacon(beacon/bluetooth-le/ble)之间距离的基本概念.有关ibeacon可以测量多远的真实文档吗?可以说我距离300英尺...... ibeacon有可能检测到这个吗?

dav*_*ung 215

iOS提供的距离估计基于iBeacon信号强度(rssi)与校准发射机功率(txPower)之比.txPower是距离1米处rssi的已知测量信号强度.必须使用此txPower值校准每个iBeacon,以允许精确的距离估计.

当我们构建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;
  }
}   
Run Code Online (Sandbox Code Playgroud)

注意:值0.89976,7.7095和0.111是求解我们测量数据点的最佳拟合曲线时计算的三个常数.因人而异

  • 什么是0.89976,7.7095和0.111的值? (13认同)
  • 伟大的答案和代码大卫.txPower值来自哪里?它是在客户端(接收方)完成的校准值吗?或者它是您可以从灯塔获得的指标? (4认同)
  • 有了这个等式,当信标从我的手机上放置1/4时,我最终会得到84457991114.574738. (2认同)
  • 该公式源自 iPhone 4S 测量的 RSSI 读数的最佳拟合曲线。由于每台设备都有不同的蓝牙天线和接收器增益不同,因此每台设备的曲线都会略有不同。即使给手机加个保护壳也会改变结果!虽然不同 iOS 设备之间存在差异,但差异很小。Android 设备可能存在更大的差异,因此 Android Beacon 库项目尝试(取得的成功非常有限)根据每个设备编译最佳拟合曲线系数的数据库。 (2认同)

And*_*ski 72

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

davidgyoung(接受回答,> 100赞成)说:

请注意,这里的术语"准确度"是iOS代表距离(米).

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

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

让我再说一遍:以米为单位的西格玛精度.谷歌关于这个主题的所有10个首页都只有文档引用的术语"一个西格玛",但没有一个分析这个术语,这是理解这一点的核心.

非常重要的是解释实际上一个西格玛的准确性.以下网址开头:http://en.wikipedia.org/wiki/Standard_error,http://en.wikipedia.org/wiki/Uncertainty

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

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

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

例.我们测量距离并得到高斯分布.平均值是10米.如果σ为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开发人员之外我还拥有无线电子学位,我认为我们不应该忽略来自文档的"一个sigma"术语,我想开始讨论它.

Apple的精确算法可能只收集最近的测量值并分析它们的高斯分布.这就是它如何确定准确性.我不排除他们使用信息表格加速计来检测用户是否正在移动(以及多快)以重置先前的分发距离值的可能性,因为他们肯定已经改变了.


Mar*_*ler 61

iBeacon输出功率在1米的距离内测量(校准).我们假设这是-59 dBm(仅举例).iBeacon将此号码作为其LE广告的一部分.

听音装置(iPhone等)将测量设备的RSSI.例如,假设这是-72 dBm.

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

ratio_dB = txCalibratedPower - RSSI
Run Code Online (Sandbox Code Playgroud)

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

ratio_linear = 10 ^ (ratio_dB / 10)
Run Code Online (Sandbox Code Playgroud)

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

power = power_at_1_meter / r^2.解决r,我们得到:

r = sqrt(ratio_linear)
Run Code Online (Sandbox Code Playgroud)

在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;
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果你在钢铁建筑内,那么可能会有内部反射使信号衰减慢于1/r ^ 2.如果信号通过人体(水),那么信号将被衰减.天线很可能在所有方向上没有相同的增益.房间内的金属物体可能会产生奇怪的干涉图案.等等...... YMMV.

  • @BlackWolf,这是因为dB是对数而log(x/y)= log(x)-log(y)...... (4认同)