mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-18 14:21:49 -05:00
BFM demod: RDS decoder cleanup
This commit is contained in:
parent
1a9dca1632
commit
1be47adfef
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
const Real RDSDemod::m_pllBeta = 50;
|
const Real RDSDemod::m_pllBeta = 50;
|
||||||
const int RDSDemod::m_udpSize = 1472;
|
const int RDSDemod::m_udpSize = 1472;
|
||||||
|
const Real RDSDemod::m_fsc = 1187.5;
|
||||||
|
|
||||||
RDSDemod::RDSDemod()
|
RDSDemod::RDSDemod()
|
||||||
{
|
{
|
||||||
@ -46,7 +47,6 @@ RDSDemod::RDSDemod()
|
|||||||
m_parms.numsamples = 0;
|
m_parms.numsamples = 0;
|
||||||
m_parms.loop_out = 0;
|
m_parms.loop_out = 0;
|
||||||
m_parms.prev_loop = 0;
|
m_parms.prev_loop = 0;
|
||||||
|
|
||||||
m_parms.prev_acc = 0;
|
m_parms.prev_acc = 0;
|
||||||
m_parms.counter = 0;
|
m_parms.counter = 0;
|
||||||
m_parms.reading_frame = 0;
|
m_parms.reading_frame = 0;
|
||||||
@ -60,22 +60,13 @@ RDSDemod::~RDSDemod()
|
|||||||
delete m_socket;
|
delete m_socket;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RDSDemod::setSampleRate(int srate)
|
void RDSDemod::setSampleRate(int srate) /// FIXME: fix rate for now
|
||||||
{
|
{
|
||||||
m_srate = srate;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RDSDemod::process(Real demod, Real pilot)
|
void RDSDemod::process(Real demod, Real pilot)
|
||||||
{
|
{
|
||||||
|
m_sampleBuffer[m_sampleBufferIndex] = m_parms.lo_clock * m_parms.subcarr_bb[0]; // UDP debug
|
||||||
double fsc = 57000;
|
|
||||||
|
|
||||||
Real dPilot = pilot - m_pilotPrev;
|
|
||||||
|
|
||||||
if (dPilot < 0)
|
|
||||||
{
|
|
||||||
dPilot += 2 * M_PI;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_sampleBufferIndex < m_udpSize)
|
if (m_sampleBufferIndex < m_udpSize)
|
||||||
{
|
{
|
||||||
@ -89,26 +80,12 @@ void RDSDemod::process(Real demod, Real pilot)
|
|||||||
|
|
||||||
// Subcarrier downmix & phase recovery
|
// Subcarrier downmix & phase recovery
|
||||||
|
|
||||||
m_parms.subcarr_phi += 2 * M_PI * fsc * (1.0 / m_srate);
|
|
||||||
|
|
||||||
/*
|
|
||||||
if (m_parms.subcarr_phi > 48 * 2 * M_PI)
|
|
||||||
{
|
|
||||||
m_parms.subcarr_phi -= 48 * 2 * M_PI;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
m_parms.subcarr_bb[0] = filter_lp_2400_iq(demod, 0);
|
m_parms.subcarr_bb[0] = filter_lp_2400_iq(demod, 0);
|
||||||
//m_parms.subcarr_bb[1] = filter_lp_2400_iq(demod * std::sin(m_parms.subcarr_phi), 1);
|
|
||||||
|
|
||||||
m_parms.clock_phi += dPilot / 16.0;
|
|
||||||
m_parms.clock_phi = std::fmod(m_parms.clock_phi, 2 * M_PI);
|
|
||||||
m_parms.lo_clock = (m_parms.clock_phi < M_PI ? 1 : -1);
|
|
||||||
|
|
||||||
m_sampleBuffer[m_sampleBufferIndex] = m_parms.lo_clock * m_parms.subcarr_bb[0]; // UDP debug
|
|
||||||
|
|
||||||
// 1187.5 Hz clock
|
// 1187.5 Hz clock
|
||||||
|
|
||||||
m_parms.clock_phi = (m_parms.subcarr_phi / 48.0) + m_parms.clock_offset;
|
m_parms.subcarr_phi += (2 * M_PI * m_fsc) / (Real) m_srate;
|
||||||
|
m_parms.clock_phi = m_parms.subcarr_phi + m_parms.clock_offset;
|
||||||
|
|
||||||
// Clock phase recovery
|
// Clock phase recovery
|
||||||
|
|
||||||
@ -124,6 +101,9 @@ void RDSDemod::process(Real demod, Real pilot)
|
|||||||
m_parms.clock_offset -= 0.005 * m_parms.d_cphi;
|
m_parms.clock_offset -= 0.005 * m_parms.d_cphi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_parms.clock_phi = std::fmod(m_parms.clock_phi, 2 * M_PI);
|
||||||
|
m_parms.lo_clock = (m_parms.clock_phi < M_PI ? 1 : -1);
|
||||||
|
|
||||||
/* Decimate band-limited signal */
|
/* Decimate band-limited signal */
|
||||||
if (m_parms.numsamples % 8 == 0)
|
if (m_parms.numsamples % 8 == 0)
|
||||||
{
|
{
|
||||||
@ -143,7 +123,6 @@ void RDSDemod::process(Real demod, Real pilot)
|
|||||||
m_parms.prev_bb = m_parms.subcarr_bb[0];
|
m_parms.prev_bb = m_parms.subcarr_bb[0];
|
||||||
m_parms.prev_clock_phi = m_parms.clock_phi;
|
m_parms.prev_clock_phi = m_parms.clock_phi;
|
||||||
m_prev = demod;
|
m_prev = demod;
|
||||||
m_pilotPrev - pilot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RDSDemod::biphase(Real acc, Real d_cphi)
|
void RDSDemod::biphase(Real acc, Real d_cphi)
|
||||||
@ -167,7 +146,7 @@ void RDSDemod::biphase(Real acc, Real d_cphi)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Real qua = (1.0 * abs(m_parms.tot_errs[0] - m_parms.tot_errs[1]) / (m_parms.tot_errs[0] + m_parms.tot_errs[1])) * 100;
|
Real qua = (1.0 * abs(m_parms.tot_errs[0] - m_parms.tot_errs[1]) / (m_parms.tot_errs[0] + m_parms.tot_errs[1])) * 100;
|
||||||
qDebug("RDSDemod::biphase: frame: %d acc: %+6.3f errs: %3d %3d qual: %3.0f%% clk: %7.2f\n",
|
qDebug("RDSDemod::biphase: frame: %d acc: %+6.3f errs: %3d %3d qual: %3.0f%% clk: %7.2f",
|
||||||
m_parms.reading_frame,
|
m_parms.reading_frame,
|
||||||
acc,
|
acc,
|
||||||
m_parms.tot_errs[0],
|
m_parms.tot_errs[0],
|
||||||
|
@ -74,8 +74,6 @@ private:
|
|||||||
Real m_yw[1+1];
|
Real m_yw[1+1];
|
||||||
Real m_prev;
|
Real m_prev;
|
||||||
|
|
||||||
Real m_pilotPrev;
|
|
||||||
|
|
||||||
int m_srate;
|
int m_srate;
|
||||||
|
|
||||||
QUdpSocket *m_socket;
|
QUdpSocket *m_socket;
|
||||||
@ -84,6 +82,7 @@ private:
|
|||||||
|
|
||||||
static const int m_udpSize;
|
static const int m_udpSize;
|
||||||
static const Real m_pllBeta;
|
static const Real m_pllBeta;
|
||||||
|
static const Real m_fsc;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* PLUGINS_CHANNEL_BFM_RDSDEMOD_H_ */
|
#endif /* PLUGINS_CHANNEL_BFM_RDSDEMOD_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user