如何增加精度计算的时间?

时间:2016-08-29 14:42:43

标签: ios core-location ibeacon

有趣的案例:如果我们将iPhone移动到iBeacon设备,准确度的变化比我们从设备移动iPhone时要快得多。 如何更快地完成此过程?

1 个答案:

答案 0 :(得分: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