diff --git a/common/include/villas/dsp/moving_average.hpp b/common/include/villas/dsp/moving_average.hpp new file mode 100644 index 000000000..22d183fb6 --- /dev/null +++ b/common/include/villas/dsp/moving_average.hpp @@ -0,0 +1,63 @@ +/** A moving average filter. + * + * @file + * @author Steffen Vogel + * @copyright 2014-2019, Institute for Automation of Complex Power Systems, EONERC + * @license GNU General Public License (version 3) + * + * VILLAScommon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + *********************************************************************************/ + +#pragma once + +#include + +namespace villas { +namespace dsp { + +template +class MovingAverage { + +public: + typedef typename Window::size_type size_type; + +protected: + Window window; + + size_type length; + + T state; + +public: + MovingAverage(size_type len, T i) : + window(len, i), + length(len), + state(i) + { } + + T update(T in) + { + T out = window.update(in); + + state += in; + state -= out; + + return state / len; + } +}; + +} // namespace dsp +} // namespace villas