Реализация экспоненциальной скользящей средней в Java

По сути, у меня есть массив значений вроде этого:

0.25, 0.24, 0.27, 0.26, 0.29, 0.34, 0.32, 0.36, 0.32, 0.28, 0.25, 0.24, 0.25

Вышеупомянутый массив слишком упрощен, я собираю 1 значение в миллисекунду в моем реальном коде, и мне нужно обработать вывод по алгоритму, который я написал, чтобы найти ближайший пик перед определенным моментом времени. Моя логика не работает, потому что в моем примере выше 0,36 является реальным пиком, но мой алгоритм посмотрел бы назад и увидел бы самое последнее число 0,25 в качестве пика, поскольку есть уменьшение до 0,24 перед ним.

Цель состоит в том, чтобы взять эти значения и применить к ним алгоритм, который немного их «сгладит», чтобы у меня было больше линейных значений. (например: я бы хотел, чтобы мои результаты были пышными, а не неровными)

Мне сказали применить фильтр экспоненциального скользящего среднего к моим значениям. Как я могу это сделать? Мне действительно сложно читать математические уравнения, я гораздо лучше разбираюсь в коде.

Как мне обрабатывать значения в моем массиве, применяя вычисление экспоненциальной скользящей средней для их выравнивания?

float[] mydata = ...
mySmoothedData = exponentialMovingAverage(mydata, 0.5);

float[] exponentialMovingAverage(float[] input, float alpha) {
    // what do I do here?
    return result;
}
10
задан Naftuli Kay 8 February 2012 в 20:27
поделиться