From 04c3c9cfffae44c67ee724bbd3924c453e947ee3 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 18 Jun 2022 14:06:48 +0000 Subject: [PATCH] - use Tracker git-svn-id: http://moon:8086/svn/software/trunk/projects/mpsk_rx_gui@1037 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- Source/Receiver.cpp | 32 +++++++++----------------------- Source/Receiver.hpp | 13 +++++++++---- 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/Source/Receiver.cpp b/Source/Receiver.cpp index ed56146..2c009d8 100644 --- a/Source/Receiver.cpp +++ b/Source/Receiver.cpp @@ -51,6 +51,8 @@ Receiver::Receiver(LogHandler *pLogHandler) , m_farrow(m_timingGenerator) , m_frameReceiver(this) , m_pSymMapper(0) + , m_statisticsProvider(EQ_UPD_INTERVAL) + , m_tracker(m_statisticsProvider.minMax()) { m_params.numBitsPerSymbol = 2; m_params.samplerate = 48000; @@ -122,9 +124,9 @@ sym_err_t* Receiver::getSoftSyms() return m_pSymbolBuffer; } -cpx_t& Receiver::getTracker(uint32 index) +cpx_t Receiver::getTracker(uint32 index) { - return m_trackers[index]; + return toCpx(m_tracker.trackers()[index]); } void Receiver::initDefaultParams() @@ -182,15 +184,6 @@ void Receiver::init() { const ScopedLock sl (m_lock); - m_trackers[0] = Cpx(1,1); - m_trackers[1] = Cpx(-1,1); - m_trackers[2] = Cpx(-1,-1); - m_trackers[3] = Cpx(1,-1); - m_trackers_[0] = Cpx(1,1); - m_trackers_[1] = Cpx(-1,1); - m_trackers_[2] = Cpx(-1,-1); - m_trackers_[3] = Cpx(1,-1); - initDefaultParams(); m_ReceiverEnable = false; @@ -509,8 +502,9 @@ void Receiver::processBaseband(CVec const &iq, uint32_t len) if (ClockIsTick(&m_symClock, 1)) { #ifndef DISABLE_UNUSED_STATISTICS -#endif minMaxProcess(&m_statistics.ddcMinMax, IQ_eq_in); +#endif + m_statisticsProvider.process(toComplexScalar(IQ_eq_in)); // ----------------------------------------------------- // AGC Blind process samples // @1 x symbolrate @@ -519,12 +513,12 @@ void Receiver::processBaseband(CVec const &iq, uint32_t len) { if (m_params.agcMu_index == agc_state_acquisition) { - e_agc = 1.0 - CpxMagS(m_trackers[0]); + e_agc = 1.0 - CpxMagS(getTracker(0)); AGC_Train(&agcBlind, e_agc, m_params.agcMu[m_params.agcMu_index]); } if (m_params.agcMu_index == agc_state_track) { - e_agc = 1.0 - CpxMagS(m_trackers[0]); + e_agc = 1.0 - CpxMagS(getTracker(0)); AGC_Train(&agcBlind, e_agc, m_params.agcMu[m_params.agcMu_index]); } } @@ -629,15 +623,7 @@ void Receiver::processBaseband(CVec const &iq, uint32_t len) // Lock-detector development // @1 x symbolrate // ----------------------------------------------------- - radio_float_t alpha = 0.002; - radio_float_t beta = 1.0 - alpha; - cpx_t s_min = m_statistics.ddcMinMax.min; - cpx_t s_max = m_statistics.ddcMinMax.max; - m_trackers[0] = CpxAddS(CpxScaleRealS(m_trackers[0], beta), CpxScaleRealS(Cpx(s_max.real, s_min.imag), alpha)); - m_trackers[1] = CpxAddS(CpxScaleRealS(m_trackers[1], beta), CpxScaleRealS(Cpx(s_max.real, s_max.imag), alpha)); - m_trackers[2] = CpxAddS(CpxScaleRealS(m_trackers[2], beta), CpxScaleRealS(Cpx(s_min.real, s_max.imag), alpha)); - m_trackers[3] = CpxAddS(CpxScaleRealS(m_trackers[3], beta), CpxScaleRealS(Cpx(s_min.real, s_min.imag), alpha)); - + m_tracker.process(toComplexScalar(IQ_soft)); // Statistics #ifndef DISABLE_UNUSED_STATISTICS diff --git a/Source/Receiver.hpp b/Source/Receiver.hpp index 1b95ce3..d5f844e 100644 --- a/Source/Receiver.hpp +++ b/Source/Receiver.hpp @@ -18,6 +18,8 @@ #include #include #include +#include +#include #include @@ -240,7 +242,7 @@ public: virtual void setParams(const params_t ¶ms) = 0; virtual const params_t& getParams() = 0; virtual const status_t& getStatus() = 0; - virtual const cpx_t& getTracker(uint32 index) = 0; + virtual cpx_t getTracker(uint32 index) = 0; virtual void reset() = 0; virtual void statisticsReset() = 0; virtual void strReset() = 0; @@ -354,8 +356,6 @@ private: bool m_ReceiverEnable; sample_clock_t m_symClock; pfd_t m_pfdCpr; - cpx_t m_trackers_[4]; - cpx_t m_trackers[4]; // Filter Interpolation::DownSampler m_firArmDown; @@ -396,6 +396,10 @@ private: sym_stat_t m_sym_stat; statistics_t m_statistics; + // Metrics + Metrics::Statistics m_statisticsProvider; + Metrics::Tracker m_tracker; + FrameReceiver m_frameReceiver; params_t m_params; @@ -403,6 +407,7 @@ private: Processor::Buffer m_buffer_agc; Processor::Buffer m_buffer_ip; + void timerCallback(); void processBaseband(CVec const &iq, uint32_t len); void minMaxInit(minmax_t *pObj, radio_float_t min_initial, radio_float_t max_initial) @@ -464,7 +469,7 @@ private: void statisticsReset() override; void dfeOffUpdateFromCma() override; void dfeOnUpdateFromDfeOff() override; - cpx_t& getTracker(uint32 index) override; + cpx_t getTracker(uint32 index) override; void onData(void *pData, uint32_t size) override {