- use Tracker

git-svn-id: http://moon:8086/svn/software/trunk/projects/mpsk_rx_gui@1037 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2022-06-18 14:06:48 +00:00
parent b4a96dfd2b
commit 04c3c9cfff
2 changed files with 18 additions and 27 deletions
+9 -23
View File
@@ -51,6 +51,8 @@ Receiver::Receiver(LogHandler *pLogHandler)
, m_farrow(m_timingGenerator) , m_farrow(m_timingGenerator)
, m_frameReceiver(this) , m_frameReceiver(this)
, m_pSymMapper(0) , m_pSymMapper(0)
, m_statisticsProvider(EQ_UPD_INTERVAL)
, m_tracker(m_statisticsProvider.minMax())
{ {
m_params.numBitsPerSymbol = 2; m_params.numBitsPerSymbol = 2;
m_params.samplerate = 48000; m_params.samplerate = 48000;
@@ -122,9 +124,9 @@ sym_err_t* Receiver::getSoftSyms()
return m_pSymbolBuffer; 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() void Receiver::initDefaultParams()
@@ -182,15 +184,6 @@ void Receiver::init()
{ {
const ScopedLock sl (m_lock); 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(); initDefaultParams();
m_ReceiverEnable = false; m_ReceiverEnable = false;
@@ -509,8 +502,9 @@ void Receiver::processBaseband(CVec const &iq, uint32_t len)
if (ClockIsTick(&m_symClock, 1)) if (ClockIsTick(&m_symClock, 1))
{ {
#ifndef DISABLE_UNUSED_STATISTICS #ifndef DISABLE_UNUSED_STATISTICS
#endif
minMaxProcess(&m_statistics.ddcMinMax, IQ_eq_in); minMaxProcess(&m_statistics.ddcMinMax, IQ_eq_in);
#endif
m_statisticsProvider.process(toComplexScalar(IQ_eq_in));
// ----------------------------------------------------- // -----------------------------------------------------
// AGC Blind process samples // AGC Blind process samples
// @1 x symbolrate // @1 x symbolrate
@@ -519,12 +513,12 @@ void Receiver::processBaseband(CVec const &iq, uint32_t len)
{ {
if (m_params.agcMu_index == agc_state_acquisition) 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]); AGC_Train(&agcBlind, e_agc, m_params.agcMu[m_params.agcMu_index]);
} }
if (m_params.agcMu_index == agc_state_track) 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]); 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 // Lock-detector development
// @1 x symbolrate // @1 x symbolrate
// ----------------------------------------------------- // -----------------------------------------------------
radio_float_t alpha = 0.002; m_tracker.process(toComplexScalar(IQ_soft));
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));
// Statistics // Statistics
#ifndef DISABLE_UNUSED_STATISTICS #ifndef DISABLE_UNUSED_STATISTICS
+9 -4
View File
@@ -18,6 +18,8 @@
#include <cpp/radio/interpolation/Farrow.hpp> #include <cpp/radio/interpolation/Farrow.hpp>
#include <cpp/radio/interpolation/DownSampler.hpp> #include <cpp/radio/interpolation/DownSampler.hpp>
#include <cpp/radio/interpolation/PolyPhase.hpp> #include <cpp/radio/interpolation/PolyPhase.hpp>
#include <cpp/radio/metrics/Statistics.hpp>
#include <cpp/radio/metrics/Tracker.hpp>
#include <cpp/radio/Nco.hpp> #include <cpp/radio/Nco.hpp>
@@ -240,7 +242,7 @@ public:
virtual void setParams(const params_t &params) = 0; virtual void setParams(const params_t &params) = 0;
virtual const params_t& getParams() = 0; virtual const params_t& getParams() = 0;
virtual const status_t& getStatus() = 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 reset() = 0;
virtual void statisticsReset() = 0; virtual void statisticsReset() = 0;
virtual void strReset() = 0; virtual void strReset() = 0;
@@ -354,8 +356,6 @@ private:
bool m_ReceiverEnable; bool m_ReceiverEnable;
sample_clock_t m_symClock; sample_clock_t m_symClock;
pfd_t m_pfdCpr; pfd_t m_pfdCpr;
cpx_t m_trackers_[4];
cpx_t m_trackers[4];
// Filter // Filter
Interpolation::DownSampler m_firArmDown; Interpolation::DownSampler m_firArmDown;
@@ -396,6 +396,10 @@ private:
sym_stat_t m_sym_stat; sym_stat_t m_sym_stat;
statistics_t m_statistics; statistics_t m_statistics;
// Metrics
Metrics::Statistics m_statisticsProvider;
Metrics::Tracker m_tracker;
FrameReceiver m_frameReceiver; FrameReceiver m_frameReceiver;
params_t m_params; params_t m_params;
@@ -403,6 +407,7 @@ private:
Processor::Buffer<ComplexScalar> m_buffer_agc; Processor::Buffer<ComplexScalar> m_buffer_agc;
Processor::Buffer<ComplexScalar> m_buffer_ip; Processor::Buffer<ComplexScalar> m_buffer_ip;
void timerCallback(); void timerCallback();
void processBaseband(CVec const &iq, uint32_t len); void processBaseband(CVec const &iq, uint32_t len);
void minMaxInit(minmax_t *pObj, radio_float_t min_initial, radio_float_t max_initial) void minMaxInit(minmax_t *pObj, radio_float_t min_initial, radio_float_t max_initial)
@@ -464,7 +469,7 @@ private:
void statisticsReset() override; void statisticsReset() override;
void dfeOffUpdateFromCma() override; void dfeOffUpdateFromCma() override;
void dfeOnUpdateFromDfeOff() override; void dfeOnUpdateFromDfeOff() override;
cpx_t& getTracker(uint32 index) override; cpx_t getTracker(uint32 index) override;
void onData(void *pData, uint32_t size) override void onData(void *pData, uint32_t size) override
{ {