- added metrics

git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@1035 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2022-06-18 07:09:49 +00:00
parent 2f49fb692d
commit dea5ae345d
5 changed files with 191 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
#include <radio/radio_types.h>
namespace Radio
{
namespace Metrics
{
class IMinMax
{
public:
virtual ~IMinMax() = default;
virtual radio_float_t min_i() const = 0;
virtual radio_float_t min_q() const = 0;
virtual radio_float_t min_mag() const = 0;
virtual radio_float_t max_i() const = 0;
virtual radio_float_t max_q() const = 0;
virtual radio_float_t max_mag() const = 0;
};
} // Metrics
} // Radio
+45
View File
@@ -0,0 +1,45 @@
#include "Statistics.hpp"
#include <radio/cpx.h>
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::provider_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
+75
View File
@@ -0,0 +1,75 @@
#ifndef _METRICS_STATISTICS_HPP_
#define _METRICS_STATISTICS_HPP_
#pragma once
#include <cpp/radio/Vector.hpp>
#include <radio/statistics.h>
#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& provider_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_
+23
View File
@@ -0,0 +1,23 @@
#include "Tracker.hpp"
namespace Radio
{
namespace Metrics
{
Tracker::Tracker(IMinMax const &prov_minMax)
: m_prov_minMax(prov_minMax)
{
}
Tracker::~Tracker()
{
}
void Tracker::process(ComplexScalar const &x)
{
}
} // Metrics
} // Radio
+27
View File
@@ -0,0 +1,27 @@
#ifndef _METRICS_TRACKER_HPP_
#define _METRICS_TRACKER_HPP_
#pragma once
#include <cpp/radio/Vector.hpp>
#include "IMinMax.hpp"
namespace Radio
{
namespace Metrics
{
class Tracker
{
public:
Tracker(IMinMax const &statsProvider);
virtual ~Tracker();
void process(ComplexScalar const &x);
private:
IMinMax const &m_prov_minMax;
};
} // Metrics
} // Radio
#endif // _METRICS_TRACKER_HPP_