-1

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

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

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

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

4

1 回答 1

0

将它们存储在 windowSize=5: somwhere 的固定数组中,在初始化程序时:

// 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) 的顺序要好一些。

于 2014-12-03T20:39:03.950 回答