У меня, по сути, есть куча объектов данных, которые отображают временные метки в миллисекундах для плавающих значений. Я ищу, по существу, найти пик / максимум данных в заданном диапазоне. По сути, я использовал что-то вроде этого:
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()
для массива и найти наибольшее значение, мне нужно найти наибольшее значение, которое приходит первым, прежде чем оно упадет.
Как я могу найти вершину своего пика, учитывая некоторую дисперсию шума?