- moved Interpolator out of big loop into tight processing loop
git-svn-id: http://moon:8086/svn/software/trunk/projects/mpsk_rx_gui@1000 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
+58
-3
@@ -271,6 +271,63 @@ 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;
|
||||
bool is_time;
|
||||
radio_float_t m_omega;
|
||||
|
||||
public:
|
||||
TimingGeneratorGardner()
|
||||
: Interpolation::TimingGenerator()
|
||||
, filter(nullptr)
|
||||
, coeff(nullptr)
|
||||
{
|
||||
STRGardnerInit(&m_SymbolTimingRevovery);
|
||||
is_time = true;
|
||||
}
|
||||
virtual ~TimingGeneratorGardner() = default;
|
||||
|
||||
void reset()
|
||||
{
|
||||
LeadLagSetState(filter, 0);
|
||||
}
|
||||
|
||||
void loopFilterSetup(lead_lag_filter_t *pFilter, lead_lag_coeff_t *pCoeff)
|
||||
{
|
||||
filter = pFilter;
|
||||
coeff = pCoeff;
|
||||
}
|
||||
|
||||
void setOmega(radio_float_t omega)
|
||||
{
|
||||
LeadLagInit(filter, omega);
|
||||
m_omega = omega;
|
||||
}
|
||||
|
||||
void 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);
|
||||
}
|
||||
is_time = not is_time;
|
||||
|
||||
update(m_omega);
|
||||
}
|
||||
};
|
||||
|
||||
class Receiver : public ReceiverInterface, public IDeFormatter, public Timer
|
||||
{
|
||||
public:
|
||||
@@ -322,9 +379,7 @@ private:
|
||||
lead_lag_filter_t m_loop_filter_cpr;
|
||||
|
||||
// Gardner Symbol Timing Recovery
|
||||
str_t m_SymbolTimingRevovery;
|
||||
timing_corrector_t m_timing_corrector;
|
||||
radio_float_t m_Vc;
|
||||
TimingGeneratorGardner m_timingGenerator;
|
||||
|
||||
// AGC
|
||||
// Blind
|
||||
|
||||
Reference in New Issue
Block a user