#include "Statistics.hpp" #include namespace Radio { namespace Metrics { Statistics::Statistics(radio_float_t updateInterval_minMax) : m_provider_minMax(*this) { SlidingMinMaxInit(&m_sl_min_I, updateInterval_minMax, (radio_float_t)1E12, -1); SlidingMinMaxInit(&m_sl_min_Q, updateInterval_minMax, (radio_float_t)1E12, -1); SlidingMinMaxInit(&m_sl_min_mag, updateInterval_minMax, (radio_float_t)1E12, -1); SlidingMinMaxInit(&m_sl_max_I, updateInterval_minMax, (radio_float_t)1E12, +1); SlidingMinMaxInit(&m_sl_max_Q, updateInterval_minMax, (radio_float_t)1E12, +1); SlidingMinMaxInit(&m_sl_max_mag, updateInterval_minMax, (radio_float_t)1E12, +1); } Statistics::~Statistics() { SlidingMinMaxFree(&m_sl_min_I); SlidingMinMaxFree(&m_sl_min_Q); SlidingMinMaxFree(&m_sl_min_mag); SlidingMinMaxFree(&m_sl_max_I); SlidingMinMaxFree(&m_sl_max_Q); SlidingMinMaxFree(&m_sl_max_mag); } IMinMax const& Statistics::minMax() const { return m_provider_minMax; } void Statistics::process(ComplexScalar const &x) { SlidingMinMaxProcess(&m_sl_min_I, x.real()); SlidingMinMaxProcess(&m_sl_min_Q, x.imag()); SlidingMinMaxProcess(&m_sl_min_mag, CpxMagS(toCpx(x))); SlidingMinMaxProcess(&m_sl_max_I, x.real()); SlidingMinMaxProcess(&m_sl_max_Q, x.imag()); SlidingMinMaxProcess(&m_sl_max_mag, CpxMagS(toCpx(x))); } } // Metrics } // Radio