【发布时间】:2012-02-29 05:06:56
【问题描述】:
我基本上有一堆数据对象,它们以毫秒为单位将时间戳映射到浮点值。我正在寻找基本上找到给定范围内数据的峰值/最大值。我基本上一直在使用这样的东西:
float previousValue = 0;
for (int i = 0; i < data.size(); i++) {
MyData value = data.get(i);
if (value.getData() < previousValue) {
// found the peak!
break;
} else {
previousValue = value.getData();
}
}
这个算法的唯一问题是它没有考虑噪声。本质上,我可以有这样的价值观:
[0.1025, 0.3000, 0.3025, 0.3500, 0.3475, 0.3525, 0.1025]
实际峰值为 0.3525,但我上面的算法将其视为 0.3500,因为它首先出现。由于我计算的性质,我不能只对数组执行max() 并找出最大值,我需要在它下降之前找到最先出现的最大值。
如何在考虑噪声差异的同时找到峰值?
【问题讨论】:
-
如何定义峰值? .3500 之后的值和 .3525 之后的值下降。有什么区别?
-
分离关注点:首先,使用滑动窗口并对数据进行平均——这将消除噪音。之后,您可以使用您的方法或任何其他方法轻松找到峰值。