diff --git a/src/shared/utils/MovingAverage.h b/src/shared/utils/MovingAverage.h index 6a6efd1bbcf6790efa89a17919146cb6bc770b37..bea0055dd479381b144d11fa2d435c3200a1c41e 100644 --- a/src/shared/utils/MovingAverage.h +++ b/src/shared/utils/MovingAverage.h @@ -22,44 +22,37 @@ #pragma once +#include <utils/collections/CircularBuffer.h> + namespace Boardcore { -template <typename T> +template <typename T, unsigned int Size> class MovingAverage { public: - MovingAverage(int movingAverageN = 10) : movingAverageN(movingAverageN) {} + MovingAverage() {} - T getValue() { return value; } + void push(T value) { buffer.put(value); } - void updateValue(T newValue) + T getAverage() { - if (value == 0) - { - value = newValue; - return; - } + T average = 0; - value *= movingAverageCompCoeff; - value += newValue * movingAverageCoeff; - } + for (size_t i = 0; i < buffer.getSize(); i++) + average += buffer.get(i); - void reset() { value = 0; } + return average / buffer.getSize(); + } - void setN(int movingAverageN) + void reset() { - this->movingAverageN = movingAverageN; - movingAverageCoeff = 1 / (float)movingAverageN; - movingAverageCompCoeff = 1 - movingAverageCoeff; + while (!buffer.isEmpty()) + buffer.pop(); } private: - T value = 0; - - int movingAverageN = 20; - float movingAverageCoeff = 1 / (float)movingAverageN; - float movingAverageCompCoeff = 1 - movingAverageCoeff; + CircularBuffer<float, Size> buffer; }; } // namespace Boardcore