1

我正在使用本教程iBeacons在 iPad4 设备中运行此代码作为信标,将 iphone5 作为接收器。我注意到 SDK 有两件事

1)即使我在同一个位置,委托方法(didRaneBeaconsInRegion)也经常以不同的距离被调用。基本上,即使用户处于同一位置,它也不会变得稳定。

2)当我带着设备移动时,信标和接收器之间的距离经常显示错误的值。我需要知道我是否可以依靠距离或完全依靠接近度?

我会非常感谢任何帮助。

4

3 回答 3

2

听起来您在谈论“准确性”领域的不稳定性。尽管它的名字,这是对 iBeacon 和设备之间距离的估计,以米为单位。

如您所见,这个读数有很多噪音。这是因为它是基于测得的蓝牙信号强度 (rssi),它本质上是不稳定的。正如蒂莫的回应所说。Apple 的 CLBeacon 类参考建议不要将此字段作为绝对距离测量值。

“接近度”字段不会告诉您精度字段没有告诉您的任何信息。它只是将准确度值放入四个存储桶之一(立即、近、远、未知),因此它不会发生太大变化。但有时您仍然会看到它在两个相邻的接近度值之间来回变化。

于 2013-10-03T01:33:01.133 回答
1

接近度:此属性中的值给出了到信标的相对距离的一般意义。使用它来快速识别离用户较近而不是较远的信标。

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

于 2013-10-02T08:36:48.570 回答
0

要回答您的问题:

1) 信标范围完全基于从信标观察到的 RSSI 值。准确度属性所看到的距离是感知距离,而不是实际距离。这在很大程度上取决于广播电台的强度。保持稳定范围的最简单方法是 - 在每个 didRangeBeaconsInRegion 调用中的 RSSI 值的滑动平均/移动平均 ( http://en.wikipedia.org/wiki/Moving_average )。
另一种好的方法是在 Apple 的 Airlocate 样本的校准过程中描述:

// Measured power is an average of the mid-80th percentile of RSSI samples.
                        NSUInteger outlierPadding = allBeacons.count * 0.1f;                    
                        [allBeacons sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"rssi" ascending:YES]]];
                        NSArray *sample = [allBeacons subarrayWithRange:NSMakeRange(outlierPadding, allBeacons.count - (outlierPadding * 2))];
                        measuredPower = [[sample valueForKeyPath:@"@avg.rssi"] integerValue];

2)当我带着设备移动时,信标和接收器之间的距离经常显示错误的值。我需要知道我是否可以依靠距离或完全依靠接近度?同样,您不能依赖任何这些。精度是观察到的距离,接近度是根据测量的功率属性确定的,该属性只不过是 1m 距离的平均 RSSI。

于 2013-10-03T07:23:26.720 回答