- changed STR lead-lag params
- refactored TimingGeneratorGardner git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@994 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -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_LEAD_AQU = (radio_float_t)2.00E-3; // 2E-3
|
||||||
const radio_float_t STR_GAIN_LAG_AQU = (radio_float_t)1.00E-7; // 5E-7
|
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_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
|
||||||
|
|
||||||
@@ -91,6 +91,8 @@ class TimingGeneratorGardner : public Interpolation::TimingGenerator
|
|||||||
|
|
||||||
// Gardner Symbol Timing Recovery
|
// Gardner Symbol Timing Recovery
|
||||||
str_t m_SymbolTimingRevovery;
|
str_t m_SymbolTimingRevovery;
|
||||||
|
bool is_time;
|
||||||
|
radio_float_t m_omega;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TimingGeneratorGardner()
|
TimingGeneratorGardner()
|
||||||
@@ -99,26 +101,31 @@ class TimingGeneratorGardner : public Interpolation::TimingGenerator
|
|||||||
LeadLagInit(&loop_filter_str, 1.0);
|
LeadLagInit(&loop_filter_str, 1.0);
|
||||||
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);
|
||||||
m_SymbolTimingRevovery.alternate_impl = 1;
|
is_time = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setOmega(radio_float_t omega)
|
void setOmega(radio_float_t omega)
|
||||||
{
|
{
|
||||||
LeadLagInit(&loop_filter_str, 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)
|
||||||
{
|
{
|
||||||
radio_float_t vc=0;
|
// @2 x symbolrate
|
||||||
radio_float_t vd=0;
|
|
||||||
|
|
||||||
// Symbol timing recovery
|
// Symbol timing recovery
|
||||||
vd = STRGardnerProcess(&m_SymbolTimingRevovery, toCpx(iq));
|
radio_float_t vd = STRGardnerProcess(&m_SymbolTimingRevovery, toCpx(iq));
|
||||||
vc = LeadLagProcess(&loop_filter_str, &str_loopfilter_coeff, vd);
|
|
||||||
cout << "Vd = " << vd << ", Vc = " << vc << ", mu = " << m_mu << endl;
|
|
||||||
|
|
||||||
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
|
// Setup IQ data
|
||||||
WAVEHEADER header;
|
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_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;
|
CVec iq_out;
|
||||||
iq_out.reserve(8*iq_in.size());
|
iq_out.reserve(8*iq_in.size());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user