From c09c6258b4123c642647117352d68933526d4bb3 Mon Sep 17 00:00:00 2001 From: jens Date: Mon, 11 Jul 2022 15:12:32 +0200 Subject: [PATCH] Improved trackers --- radio/metrics/Tracker.cpp | 28 ++++++++++++++++++---------- radio/metrics/Tracker.hpp | 1 - 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/radio/metrics/Tracker.cpp b/radio/metrics/Tracker.cpp index 1450816..8aea434 100644 --- a/radio/metrics/Tracker.cpp +++ b/radio/metrics/Tracker.cpp @@ -10,12 +10,11 @@ namespace Metrics { Tracker::Tracker(RealScalar rho, RealScalar smoothness) -: m_mags(NUM_QUADRRANTS) -, m_rho(rho) +: m_rho(rho) , m_smoothness(smoothness) , m_trackers(NUM_QUADRRANTS) { - m_mags = 0; + reset(); } Tracker::~Tracker() @@ -24,8 +23,12 @@ Tracker::~Tracker() void Tracker::reset() { - m_mags = 0; - m_trackers = 0; + CVec initVals = {ComplexScalar(-0.5,-0.5), ComplexScalar(+0.5,-0.5), ComplexScalar(-0.5,+0.5), ComplexScalar(+0.5,+0.5)}; + + for (auto v : initVals) + { + m_trackers[getQuadrant(v)] = v; + } } CVec Tracker::trackers() const @@ -36,13 +39,18 @@ CVec Tracker::trackers() const void Tracker::process(ComplexScalar const &x) { size_t qu = getQuadrant(x); - m_mags *= m_rho; - RealScalar mag = abs(x); - if (mag > m_mags[qu]) + ComplexScalar diff = x - m_trackers[qu]; + RealScalar dist = abs(diff); + RealScalar weight = exp(-16*dist); + + if (abs(x) > abs(m_trackers[qu])) { - m_mags[qu] = mag; - m_trackers[qu] = m_smoothness*x + (RealScalar(1.0)-m_smoothness)*m_trackers[qu]; + m_trackers[qu] = m_smoothness*x + (RealScalar(1)-m_smoothness)*m_trackers[qu]; + } + else + { + m_trackers[qu] += RealScalar(0.5)*weight*diff; } } diff --git a/radio/metrics/Tracker.hpp b/radio/metrics/Tracker.hpp index 41126ee..100dadc 100644 --- a/radio/metrics/Tracker.hpp +++ b/radio/metrics/Tracker.hpp @@ -21,7 +21,6 @@ public: CVec trackers() const; void reset(); private: - RVec m_mags; RealScalar m_rho; RealScalar m_smoothness;