From b8b4906d9d4d52e83b03ac36643b049396df5520 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Thu, 16 Jun 2022 08:50:02 +0000 Subject: [PATCH] - changed STR lead-lag params - refactored TimingGeneratorGardner git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@994 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- radio/tests/interpolation/farrow/test.cpp | 31 ++++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/radio/tests/interpolation/farrow/test.cpp b/radio/tests/interpolation/farrow/test.cpp index 9de383b..65ca65d 100644 --- a/radio/tests/interpolation/farrow/test.cpp +++ b/radio/tests/interpolation/farrow/test.cpp @@ -78,8 +78,8 @@ void wavSave(const char *pName, WAVEHEADER const &format, CVec &iq) } -const radio_float_t STR_GAIN_LEAD_AQU = (radio_float_t)1.00E-2; // 2E-3 -const radio_float_t STR_GAIN_LAG_AQU = (radio_float_t)1.00E-7; // 5E-7 +const radio_float_t STR_GAIN_LEAD_AQU = (radio_float_t)2.00E-3; // 2E-3 +const radio_float_t STR_GAIN_LAG_AQU = (radio_float_t)5.00E-7; // 5E-7 const radio_float_t STR_GAIN_LEAD_TRK = (radio_float_t)4.00E-6; // 8E-4 const radio_float_t STR_GAIN_LAG_TRK = (radio_float_t)1.00E-9; // 1E-6 @@ -91,6 +91,8 @@ class TimingGeneratorGardner : public Interpolation::TimingGenerator // Gardner Symbol Timing Recovery str_t m_SymbolTimingRevovery; + bool is_time; + radio_float_t m_omega; public: TimingGeneratorGardner() @@ -99,26 +101,31 @@ class TimingGeneratorGardner : public Interpolation::TimingGenerator LeadLagInit(&loop_filter_str, 1.0); LeadLagSetCoeff(&str_loopfilter_coeff, STR_GAIN_LEAD_AQU, STR_GAIN_LAG_AQU); STRGardnerInit(&m_SymbolTimingRevovery); - m_SymbolTimingRevovery.alternate_impl = 1; + is_time = true; } void setOmega(radio_float_t omega) { LeadLagInit(&loop_filter_str, omega); + m_omega = omega; } virtual ~TimingGeneratorGardner() = default; void process(ComplexScalar const &iq) { - radio_float_t vc=0; - radio_float_t vd=0; - + // @2 x symbolrate // Symbol timing recovery - vd = STRGardnerProcess(&m_SymbolTimingRevovery, toCpx(iq)); - vc = LeadLagProcess(&loop_filter_str, &str_loopfilter_coeff, vd); - cout << "Vd = " << vd << ", Vc = " << vc << ", mu = " << m_mu << endl; + radio_float_t vd = STRGardnerProcess(&m_SymbolTimingRevovery, toCpx(iq)); - update(vc); + if (is_time) + { + // @1 x symbolrate + cout << "Vd = " << vd << ", omega = " << m_omega << ", mu = " << m_mu << endl; + m_omega = LeadLagProcess(&loop_filter_str, &str_loopfilter_coeff, vd); + } + is_time = not is_time; + + update(m_omega); } }; @@ -135,9 +142,9 @@ void test() // Setup IQ data WAVEHEADER header; -// CVec iq_in = wavLoad("m2_12k_12k_i_q_short.wav", header); +// CVec iq_in = wavLoad("m2_12k_12k_i_q_short_2sps.wav", header); // CVec iq_in = wavLoad("sine_12k_ef_1_percent.wav", header); - CVec iq_in = wavLoad("sine_12k.wav", header); + CVec iq_in = wavLoad("sine_12k_s.wav", header); CVec iq_out; iq_out.reserve(8*iq_in.size());