52 lines
969 B
C++
52 lines
969 B
C++
#include "TimingGeneratorGardner.hpp"
|
|
|
|
namespace Radio
|
|
{
|
|
|
|
TimingGeneratorGardner::TimingGeneratorGardner()
|
|
: Interpolation::TimingGenerator()
|
|
, filter(nullptr)
|
|
, coeff(nullptr)
|
|
, is_time(true)
|
|
{
|
|
STRGardnerInit(&m_SymbolTimingRevovery);
|
|
SlidingVarInit(&sl_var, 12000, 12000);
|
|
}
|
|
|
|
void TimingGeneratorGardner::reset()
|
|
{
|
|
LeadLagInit(filter, 0.00);
|
|
}
|
|
|
|
void TimingGeneratorGardner::loopFilterSetup(lead_lag_filter_t *pFilter, lead_lag_coeff_t *pCoeff)
|
|
{
|
|
filter = pFilter;
|
|
coeff = pCoeff;
|
|
}
|
|
|
|
bool TimingGeneratorGardner::process(ComplexScalar const &iq)
|
|
{
|
|
// @2 x symbolrate
|
|
// Symbol timing recovery
|
|
radio_float_t vd = STRGardnerProcess(&m_SymbolTimingRevovery, toCpx(iq));
|
|
|
|
if (is_time)
|
|
{
|
|
// @1 x symbolrate
|
|
m_omega = LeadLagProcess(filter, coeff, vd);
|
|
SlidingVarProcess(&sl_var, getMu());
|
|
}
|
|
is_time = not is_time;
|
|
|
|
update(m_omega);
|
|
|
|
return not is_time;
|
|
}
|
|
|
|
radio_float_t TimingGeneratorGardner::getMuVar()
|
|
{
|
|
return SlidingVarGet(&sl_var);
|
|
}
|
|
|
|
} // Radio
|