Files
mpsk_rx_gui/Source/TimingGeneratorGardner.cpp
T
2022-07-08 14:39:06 +02:00

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