DiFipp/include/MovingAverage.h

40 wiersze
1.0 KiB
C
Czysty Zwykły widok Historia

#pragma once
2018-12-14 10:04:41 +00:00
#include "DigitalFilter.h"
#include "typedefs.h"
namespace fratio {
2019-01-04 08:15:03 +00:00
/*! \brief Moving average digital filter.
*
* This is a specialization of a digital filter in order to use a moving average.
* \tparam T Floating type.
*/
template <typename T>
2018-12-14 10:04:41 +00:00
class MovingAverage : public DigitalFilter<T> {
public:
2019-01-04 08:15:03 +00:00
/*! \brief Default uninitialized constructor. */
MovingAverage() = default;
2019-01-04 08:15:03 +00:00
/*! \brief Constructor.
* \param windowSize Size of the moving average window.
*/
2018-12-17 05:48:44 +00:00
MovingAverage(int windowSize)
2018-12-14 10:04:41 +00:00
{
2018-12-18 07:16:47 +00:00
setWindowSize(windowSize);
2018-12-14 10:04:41 +00:00
}
2019-01-04 08:15:03 +00:00
/*! \brief Set the size of the moving average window. */
2018-12-17 05:48:44 +00:00
void setWindowSize(int windowSize)
{
if (windowSize <= 0) {
m_status = FilterStatus::BAD_ORDER_SIZE;
return;
}
2018-12-17 08:16:01 +00:00
setCoeffs(vectX_t<T>::Constant(1, T(1)), vectX_t<T>::Constant(windowSize, T(1) / windowSize));
2018-12-17 05:48:44 +00:00
}
2019-01-04 08:15:03 +00:00
/*! \brief Get the size of the moving average window. */
2018-12-17 05:48:44 +00:00
int windowSize() const noexcept { return bOrder(); }
};
2018-12-14 10:04:41 +00:00
} // namespace fratio