尝试掌握与ibeacon(beacon / bluetooth-le / ble)之间的距离如何工作的基本概念。有关ibeacon可以测量多远的真实文档吗?可以说我距离300英尺...... ibeacon有可能发现这个吗?
答案 0 :(得分:213)
iOS提供的距离估计基于iBeacon信号强度(rssi)与校准发射机功率(txPower)之比。 txPower是距离1米处rssi的已知测量信号强度。每个iBeacon必须使用此txPower值进行校准,以便进行准确的距离估计。
当我们构建Android iBeacon library时,我们必须提出我们自己的独立算法,因为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
答案 1 :(得分:70)
我正在非常彻底地调查iBeacons的准确性/ rssi /接近度问题,我真的认为互联网上的所有资源(博客,StackOverflow中的帖子)都是错误的。
davidgyoung(接受回答,> 100赞成)说:
请注意,这里的术语“准确度”是iOS代表以米为单位的距离。
实际上,大多数人都说这个,但我不明白为什么!文档非常清楚CLBeacon.proximity:
以米为单位表示一个西格玛水平精度。使用此属性可以区分具有相同邻近值的信标。不要用它来识别信标的精确位置。由于RF干扰,准确度值可能会波动。
让我再说一遍:以米为单位的西格玛精度。谷歌关于这个主题的所有10个首页都只有来自文档的引用“一西格玛”,但没有一个分析这个术语,这是理解这一点的核心。
非常重要的是解释实际上一西格玛准确度的内容。以下网址开头为:http://en.wikipedia.org/wiki/Standard_error,http://en.wikipedia.org/wiki/Uncertainty
在物理世界中,当您进行一些测量时,您总会得到不同的结果(因为噪声,失真等),并且通常会形成高斯分布。描述高斯曲线有两个主要参数:
one sigma 是另一种描述窄/宽是高斯曲线的方法
它只是说如果测量的平均值是X,而一个西格玛是σ,那么所有测量的68%将在X - σ
和X + σ
之间。
实施例。我们测量距离并得到高斯分布。平均值是10米。如果σ为4m,则意味着68%的测量值在6m到14m之间。
当我们用信标测量距离时,我们得到RSSI和1米校准值,这允许我们以米为单位测量距离。但每次测量都会给出不同的值,形成高斯曲线。并且 one sigma (和准确度)是测量的准确性,而不是距离!
这可能会产生误导,因为当我们将信标移得更远时,一个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的精确算法可能只收集最近的测量结果并分析它们的高斯分布。这就是它如何确定准确性。我不排除他们使用信息表格加速计来检测用户是否正在移动(以及多快)以重置之前的分配距离值的可能性,因为它们肯定已经改变。
答案 2 :(得分:59)
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。
答案 3 :(得分:3)
iBeacon使用蓝牙低功耗(LE)来了解位置,蓝牙LE的距离/范围是160英尺(http://en.wikipedia.org/wiki/Bluetooth_low_energy)。
答案 4 :(得分:3)
通过将测量的接收信号强度与发射机应在广告中编码的发射功率进行比较而计算得到的信号路径衰减估计>>来自iBeacon格式的广告数据包的距离估计数据。
像这样的基于路径损耗的方案仅是近似的,并且可能随天线角度,介入物体以及可能是嘈杂的RF环境而变化。相比之下,真正设计用于距离测量(GPS,雷达等)的系统依赖于传播时间的精确测量,在相同情况下甚至可以检查信号的相位。正如嘉鲁指出的那样,160英尺可能超出了预期的范围,但这并不一定意味着数据包永远不会通过,只有那个人不应该期望它能够在那个距离。
答案 5 :(得分:1)
这是可能的,但这取决于您所接收的信标的功率输出,附近的其他射频源,障碍物和其他环境因素。最好的办法是在你感兴趣的环境中试试。
答案 6 :(得分:1)
由于多个电话和信标位于同一位置,因此很难以高精度测量接近度。尝试使用Android&#34; b和l bluetooth le scanner&#34;应用程序,可视化多个信标的信号强度(距离)变化,您将很快发现可能需要复杂的自适应算法来提供任何形式的一致接近度测量。
您将会看到许多解决方案,只是指示用户“请将您的手机放在这里”,以减少客户的挫败感。