Refactored

This commit is contained in:
2022-07-08 14:39:06 +02:00
parent 1b9a4caefb
commit 5a92b9af76
5 changed files with 97 additions and 66 deletions
+1 -62
View File
@@ -11,6 +11,7 @@
#include <JuceHeader.h>
#include "LogComponent.h"
#include "FrameReceiver.hpp"
#include "TimingGeneratorGardner.hpp"
#include <cpp/radio/Vector.hpp>
#include <cpp/radio/FirComplex.hpp>
@@ -274,68 +275,6 @@ public:
virtual void receiverDataChanged(Receiver *pObj) = 0;
};
// Symbol timing recovery
class TimingGeneratorGardner : public Interpolation::TimingGenerator
{
// Loop-Filter
lead_lag_filter_t *filter;
lead_lag_coeff_t *coeff;
// Gardner Symbol Timing Recovery
str_t m_SymbolTimingRevovery;
sl_var_t sl_var;
bool is_time;
radio_float_t m_omega;
public:
TimingGeneratorGardner()
: Interpolation::TimingGenerator()
, filter(nullptr)
, coeff(nullptr)
, is_time(true)
{
STRGardnerInit(&m_SymbolTimingRevovery);
SlidingVarInit(&sl_var, 12000, 12000);
}
virtual ~TimingGeneratorGardner() = default;
void reset()
{
LeadLagInit(filter, 0.00);
}
void loopFilterSetup(lead_lag_filter_t *pFilter, lead_lag_coeff_t *pCoeff)
{
filter = pFilter;
coeff = pCoeff;
}
bool 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 getMuVar()
{
return SlidingVarGet(&sl_var);
}
};
class Receiver : public ReceiverInterface, public Timer
{
public: