如何从iPhone晴雨表平均5个过去的高度值

时间:2014-11-30 01:32:26

标签: ios iphone gps smooth altitude

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

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

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

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

1 个答案:

答案 0 :(得分:0)

将它们存储在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)作为第一步,thiw的优势在于[]中的元素始终是真实的现有数据。
因此,步骤3),1),2)的顺序在纯粹观点上要好一些。