如何增加精度计算的时间?
Posted
技术标签:
【中文标题】如何增加精度计算的时间?【英文标题】:How to increase time of accuracy calculation? 【发布时间】:2016-08-29 14:42:43 【问题描述】:有趣的案例:如果我们将 iPhone 移至 iBeacon 设备,准确性值的变化比将 iPhone 从设备移出时快得多。 我怎样才能使这个过程更快?
【问题讨论】:
【参考方案1】:正如您所指出的,CoreLocation 对过去的信号测量值进行平均以得出accuracy
计算(距离估计以米为单位)。用于进行平均的算法尚未发布,但我的测量结果显示滞后约 20 秒后稳定下来。我没有注意到靠近或远离之间的延迟差异。
您无法控制此平均间隔。您唯一能做的就是在您希望的任何时间段内自己平均 RSSI。然后,您可以使用自定义计算将平均 RSSI 转换为距离。
为此,您需要拥有所有具有相同发射功率的信标,因为您无法访问信标广告中测量的功率校准常数。 (Apple 不允许读取此值。)。相反,这个常数必须在您的客户距离计算中进行硬编码。
您可以在此处查看执行此操作的示例代码:
+(double) distanceForRSSI:(double)rssi forPower:(int)txPower
// use coefficient values from spreadsheet for iPhone 4S
double coefficient1 = 2.922026; // multiplier
double coefficient2 = 6.672908; // power
double coefficient3 = -1.767203; // intercept
if (rssi == 0)
return -1.0; // if we cannot determine accuracy, return -1.0
double ratio = rssi*1.0/txPower;
double distance;
if (ratio < 1.0)
distance = pow(ratio,10);
else
distance = (coefficient1)*pow(ratio,coefficient2) + coefficient3;
if (distance < 0.1)
NSLog(@"Low distance");
return distance;
https://github.com/AltBeacon/ios-beacon-tools/blob/master/ios-beacon-tools/RNLBeacon%2BDistance.m
【讨论】:
您的代码使用 CoreBluetooth [[RNLBeaconScanner sharedBeaconScanner] calibratedRSSIFor:self];如果我没记错的话,CB 不能在后台工作,所以这段代码我们只能在前台使用。 是的,示例代码使用 CoreBluetooth,但我不建议您这样做。我只是建议您使用 CoreLocation 重用该代码示例中的自定义距离计算(现在粘贴在我上面的答案中)。您需要从didRangeBeacons:inRegion
回调中收集最后 5 次回调的平均 RSSI(您可以根据需要调整时间),然后将此平均 RSSI 传递给所示的方法。
大卫,但是如果两个信标的主要和次要相同,我怎么能理解它是同一个信标还是另一个信标?是的,我考虑过进行自己的校准,但是唯一键的问题。
是的,使用 CoreLocation 无法区分具有相同标识符的两个信标。要使此解决方案起作用,您必须具有不同的信标标识符。以上是关于如何增加精度计算的时间?的主要内容,如果未能解决你的问题,请参考以下文章