- 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:
+9
-23
@@ -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
|
||||
|
||||
+9
-4
@@ -18,6 +18,8 @@
|
||||
#include <cpp/radio/interpolation/Farrow.hpp>
|
||||
#include <cpp/radio/interpolation/DownSampler.hpp>
|
||||
#include <cpp/radio/interpolation/PolyPhase.hpp>
|
||||
#include <cpp/radio/metrics/Statistics.hpp>
|
||||
#include <cpp/radio/metrics/Tracker.hpp>
|
||||
|
||||
#include <cpp/radio/Nco.hpp>
|
||||
|
||||
@@ -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<ComplexScalar> m_buffer_agc;
|
||||
Processor::Buffer<ComplexScalar> 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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user