DiFipp/include/MovingAverage.h

30 wiersze
731 B
C++

#pragma once
#include "DigitalFilter.h"
#include "typedefs.h"
namespace fratio {
template <typename T>
class MovingAverage : public DigitalFilter<T> {
public:
MovingAverage() = default;
MovingAverage(int windowSize)
: DigitalFilter<T>(Eigen::VectorX<T>::Constant(1, T(1)), Eigen::VectorX<T>::Constant(windowSize, T(1) / windowSize))
{
}
void setWindowSize(int windowSize)
{
if (windowSize <= 0) {
m_status = FilterStatus::BAD_ORDER_SIZE;
return;
}
setCoeffs(Eigen::VectorX<T>::Constant(1, T(1)), Eigen::VectorX<T>::Constant(windowSize, T(1) / windowSize));
}
int windowSize() const noexcept { return bOrder(); }
};
} // namespace fratio