【问题标题】:How to average the 5 past altitude values from the iPhone barometer如何平均来自 iPhone 气压计的 5 个过去高度值
【发布时间】:2014-11-30 01:32:25
【问题描述】:

我正在创建一个使用新 iPhone6 气压计显示海拔变化的应用程序。虽然输出数据有噪音,所以我想应用 5 点移动平均来平滑数据。

这是我必须计算从最近时间戳到上一个时间戳的高度差的代码。

CGFloat degree = (_altData.relativeAltitude.floatValue - _prevAltData.relativeAltitude.floatValue)

我需要存储和检索另外 3 个先前的数据并对它们进行平均。 在此先感谢,我是 Xcode 的新手,这真的很有帮助。

【问题讨论】:

  • 那么,你不知道怎么存储,或者不知道怎么平均?
  • 我不知道如何存储过去的 3 个高度。使用 _altData 和 _prevAltData 我们有当前 (x) 和先前 (x-1) 高度,我怎样才能得到 x-2、x-3 和 x-4?谢谢

标签: ios iphone gps smooth altitude


【解决方案1】:

将它们存储在 windowSize=5 的固定数组中: 初始化程序时的某个地方:

// array of last altitudes for calculating average
int[] a = new int[windowSize];

1) 当新数据到达时存储在最后一个索引处:

a[windowSize - 1] = new_altitude,

2) 计算平均值。

   double avg = 0;
   for (int i = 0; i < windowSize; i++) {
      avg += a[i];
   }
   avg = avg / windowSize;

3) 将所有数组元素复制到当前索引 - 1,以便为下一个元素留出空间。

for (int i = 1; i < windowSize; i++) {
  a[i-1] = a[i];
}

就是这样。

实际上,如果窗口没有完全填满,它会变得非常复杂,所以等到你的数组完全填满后再输出平均值。

根据您的应用程序,您可以执行第 3 步)作为第一步,这样做的好处是 a[] 中的元素始终是真实的现有数据。
所以从纯粹的角度来看,步骤 3)、1)、2) 的顺序要好一些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多