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

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 无法区分具有相同标识符的两个信标。要使此解决方案起作用,您必须具有不同的信标标识符。

以上是关于如何增加精度计算的时间?的主要内容,如果未能解决你的问题,请参考以下文章

使用NTC计算温度,增加计算精度的算法

使用NTC计算温度,增加计算精度的算法

ga遗传算法如何提高精度

精度随着时代的增加而降低

在数据表中添加一个字段的SQL语句怎么写

请教VC++高手 如何输出高精度时间差