#ifndef _METRICS_STATISTICS_HPP_ #define _METRICS_STATISTICS_HPP_ #pragma once #include #include #include "IMinMax.hpp" namespace Radio { namespace Metrics { class Statistics { public: friend class MinMaxProvider; Statistics(radio_float_t updateInterval_minMax); ~Statistics(); void process(ComplexScalar const &xin); IMinMax const& minMax() const; class MinMaxProvider : public IMinMax { Statistics &m_parent; public: MinMaxProvider(Statistics &parent) : m_parent(parent) { } radio_float_t min_i() const { return SlidingMinMaxGet(&m_parent.m_sl_min_I); } radio_float_t min_q() const { return SlidingMinMaxGet(&m_parent.m_sl_min_Q); } radio_float_t min_mag() const { return SlidingMinMaxGet(&m_parent.m_sl_min_mag); } radio_float_t max_i() const { return SlidingMinMaxGet(&m_parent.m_sl_max_I); } radio_float_t max_q() const { return SlidingMinMaxGet(&m_parent.m_sl_max_Q); } radio_float_t max_mag() const { return SlidingMinMaxGet(&m_parent.m_sl_max_mag); } }; private: sl_minmax_t m_sl_min_I; sl_minmax_t m_sl_min_Q; sl_minmax_t m_sl_min_mag; sl_minmax_t m_sl_max_I; sl_minmax_t m_sl_max_Q; sl_minmax_t m_sl_max_mag; MinMaxProvider m_provider_minMax; }; } // Metrics } // Radio #endif // _METRICS_STATISTICS_HPP_