我正在使用新的iPhone6气压计创建一个显示高度变化的应用程序。虽然输出数据有噪音,所以我想应用5点移动平均值来平滑数据。
以下是我必须计算从最新时间戳到上一个时间戳的高度差的代码。
CGFloat degree = (_altData.relativeAltitude.floatValue - _prevAltData.relativeAltitude.floatValue)
我需要存储和检索额外的3个先前数据并对其进行平均。 在此先感谢,我是Xcode的新手,这真的很有帮助。
答案 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)的顺序在纯粹观点上要好一些。