我基本上有一个这样的值数组:
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;
}
for (float dude : input) { output[index] = ema.average(dude); }
? - Naftuli Kay