- TimingGenerator generates dOmega

git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@1002 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2022-06-16 16:28:35 +00:00
parent e418e45fd3
commit 56fc1810a9
+7 -13
View File
@@ -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)2.00E-3; // 2E-3 const radio_float_t STR_GAIN_LEAD_AQU = (radio_float_t)2.00E-2; // 2E-3
const radio_float_t STR_GAIN_LAG_AQU = (radio_float_t)5.00E-7; // 5E-7 const radio_float_t STR_GAIN_LAG_AQU = (radio_float_t)5.00E-4; // 5E-7
const radio_float_t STR_GAIN_LEAD_TRK = (radio_float_t)4.00E-6; // 8E-4 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 const radio_float_t STR_GAIN_LAG_TRK = (radio_float_t)1.00E-9; // 1E-6
@@ -92,23 +92,18 @@ class TimingGeneratorGardner : public Interpolation::TimingGenerator
// Gardner Symbol Timing Recovery // Gardner Symbol Timing Recovery
str_t m_SymbolTimingRevovery; str_t m_SymbolTimingRevovery;
bool is_time; bool is_time;
radio_float_t m_omega; radio_float_t m_dOmega;
public: public:
TimingGeneratorGardner() TimingGeneratorGardner()
: Interpolation::TimingGenerator() : Interpolation::TimingGenerator()
{ {
LeadLagInit(&loop_filter_str, 1.0); LeadLagInit(&loop_filter_str, 0.01);
LeadLagSetCoeff(&str_loopfilter_coeff, STR_GAIN_LEAD_AQU, STR_GAIN_LAG_AQU); LeadLagSetCoeff(&str_loopfilter_coeff, STR_GAIN_LEAD_AQU, STR_GAIN_LAG_AQU);
STRGardnerInit(&m_SymbolTimingRevovery); STRGardnerInit(&m_SymbolTimingRevovery);
is_time = true; is_time = true;
} }
void setOmega(radio_float_t omega)
{
LeadLagInit(&loop_filter_str, omega);
m_omega = omega;
}
virtual ~TimingGeneratorGardner() = default; virtual ~TimingGeneratorGardner() = default;
void process(ComplexScalar const &iq) void process(ComplexScalar const &iq)
@@ -116,16 +111,15 @@ class TimingGeneratorGardner : public Interpolation::TimingGenerator
// @2 x symbolrate // @2 x symbolrate
// Symbol timing recovery // Symbol timing recovery
radio_float_t vd = STRGardnerProcess(&m_SymbolTimingRevovery, toCpx(iq)); radio_float_t vd = STRGardnerProcess(&m_SymbolTimingRevovery, toCpx(iq));
if (is_time) if (is_time)
{ {
// @1 x symbolrate // @1 x symbolrate
cout << "Vd = " << vd << ", omega = " << m_omega << ", mu = " << getMu() << endl; cout << "Vd = " << vd << ", omega = " << m_dOmega << ", mu = " << getMu() << endl;
m_omega = LeadLagProcess(&loop_filter_str, &str_loopfilter_coeff, vd); m_dOmega = LeadLagProcess(&loop_filter_str, &str_loopfilter_coeff, vd);
} }
is_time = not is_time; is_time = not is_time;
update(m_omega); update(m_dOmega);
} }
}; };