了解ibeacon远距离
试图掌握与ibeacon(信标/蓝牙文件)可以如何工作的基本概念。 有没有关于ibeacon可以衡量多远的真实文件。 比方说,我在300英尺之外…… ibeacon有可能检测到这个吗?
iOS提供的距离估计是基于iBeacon信号强度(rssi)与校准发射机功率(txPower)的比率。 txPower是1米外rssi的已知测量信号强度。 每个iBeacon必须使用此txPower值进行校准,以便进行精确的距离估计。
当我们构buildAndroid iBeacon库时,我们必须提出自己的独立algorithm,因为iOS CoreLocation源代码不可用。 我们在已知距离上测量了一串rssi测量值,然后做了一个最佳拟合曲线来匹配我们的数据点。 我们提出的algorithm在下面显示为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是求解我们测量数据点的最佳拟合曲线时计算的三个常数。 因人而异
我非常彻底地研究了iBeacons的精确性/ rssi /邻近性问题,我真的认为互联网上的所有资源(博客,StackOverflow中的文章)都是错误的。
davidgyoung(接受的答案,> 100 upvotes)说:
请注意,这里的“精度”一词是指iOS以米为单位的距离。
其实大多数人都这样说,但我不知道为什么! 文档使得CLBeacon.proximity非常清楚:
表示以米为单位的一个西格玛水平精度。 使用此属性来区分具有相同接近值的信标。 不要用它来确定信标的精确位置。 由于RF干扰,精度值可能会波动。
让我重复一遍: 以米为单位的一个西格马精度 。 谷歌关于这个主题的所有10个顶部页面都只有文档引用的术语“one sigma”,但是没有一个分析术语,这是理解这个的核心。
非常重要的是解释实际上一个西格玛精度 。 以下以URL开头: http : //en.wikipedia.org/wiki/Standard_error,http : //en.wikipedia.org/wiki/Uncertainty
在物理世界中,当你做一些测量的时候,总是会得到不同的结果(因为噪声,失真等),并且经常是高斯分布的结果。 有两个描述高斯曲线的主要参数:
- 意思是(这很容易理解,是曲线出现峰值的价值)。
- 标准偏差,说明曲线有多宽或多窄。 曲线越窄,精度越好,因为所有的结果都是相互接近的。 如果曲线宽而不陡峭,则意味着相同现象的测量值相差很大,因此测量质量差。
一个西格玛是另一种描述如何窄/宽是高斯曲线的方法。
它只是说,如果测量的均值是X, 一个σ是σ,那么所有测量的68%将在X - σ
和X + σ
。
例。 我们测量距离,并得到一个高斯分布。 平均是10米。 如果σ为4m,则意味着68%的测量值在6m和14m之间。
当我们用信标测量距离时,我们得到RSSI和1米校准值,这使我们能够以米为单位测量距离。 但是每一次测量都会给出不同的值,形成高斯曲线。 和一个西格玛 (和准确性)是测量的准确性,而不是距离!
这可能是误导性的,因为当我们进一步移动灯塔时, 一个西格玛实际上会增加,因为信号更糟。 但是,不同的信标功率水平,我们可以得到完全不同的准确度值,而不会实际改变距离。 功率越高,错误越less。
有一篇博客文章深入分析了这个问题: http : //blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/
作者有一个假设,准确性实际上是距离。 他声称Kontakt.io的信标在功率增加到最大值时是有缺陷的,精度值在1,5,甚至15米时非常小。 在增加功率之前,准确度与距离值非常接近。 我个人认为这是正确的,因为功率级越高,干扰的影响就越小。 奇怪的是,为什么Estimote信标不这样做。
我并不是说我是100%正确的,但除了成为iOS开发人员之外,我拥有无线电子学位,我认为我们不应该忽略来自文档的“一个西格玛”术语,我想就此开始讨论。
苹果的准确性algorithm可能是收集最近的测量结果并分析它们的高斯分布。 这就是它如何确定准确性。 我不排除他们使用信息forms加速计来检测用户是否正在移动(以及有多快)以重置之前的分配距离值的可能性,因为他们已经改变了。
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; }
请注意,如果你在钢结构build筑物内,那么可能会有内部reflection使信号衰减比1 / r ^ 2慢。 如果信号通过人体(水),信号将被衰减。 这很可能是天线在所有方向上都没有相同的增益。 房间里的金属物体可能会产生奇怪的干扰图案。 等等… YMMV。
iBeacon使用蓝牙低功耗(LE)来了解位置,蓝牙LE的距离/范围是160英尺( http://en.wikipedia.org/wiki/Bluetooth_low_energy )。
根据通过比较测量的接收信号强度与发射机应当在广告数据中编码的要求的发射功率来计算的信号path衰减来估计到iBeacon格式的广告分组的来源的距离。
像这样的基于path损耗的scheme仅仅是近似的,并且随着诸如天线angular度,中介对象,以及可能是噪声的RF环境之类的事物而变化。 相比之下,真正为距离测量(GPS,雷达等)devise的系统依赖于精确的传播时间测量,在相同的情况下甚至可以检查信号的相位。
正如Jiaru指出的那样,160英尺可能超出预期的范围,但这并不一定意味着一个包将永远不会通过,只是不应该指望它在这个距离工作。
这是可能的,但它取决于你所接收到的信标的功率输出,附近的其他射频源,障碍物和其他环境因素。 最好的做法是在你感兴趣的环境中尝试一下。
在同一地点使用多个电话和信标,将难以高度精确地测量接近度。 尝试使用Android“b and l bluetooth le scanner”应用程序,为多个信标可视化信号强度(距离)变化,您将很快发现可能需要复杂的自适应algorithm来提供任何forms的一致性接近度测量。
你会看到许多解决scheme,只是指示用户“请把手机放在这里”,以减less客户的挫折感。