- improved trackers and AGC
git-svn-id: http://moon:8086/svn/software/trunk/projects/mpsk_rx_gui@1033 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
+19
-22
@@ -509,15 +509,24 @@ void Receiver::processBaseband(CVec const &iq, uint32_t len)
|
||||
if (ClockIsTick(&m_symClock, 1))
|
||||
{
|
||||
#ifndef DISABLE_UNUSED_STATISTICS
|
||||
minMaxProcess(&m_statistics.ddcMinMax, IQ_eq_in);
|
||||
#endif
|
||||
minMaxProcess(&m_statistics.ddcMinMax, IQ_eq_in);
|
||||
// -----------------------------------------------------
|
||||
// AGC Blind process samples
|
||||
// @1 x symbolrate
|
||||
// -----------------------------------------------------
|
||||
if (m_params.agc_mode != agc_mode_disabled)
|
||||
{
|
||||
AGC_Process(&agcBlind, CpxMagS(IQ_eq_in), m_params.agcMu[m_params.agcMu_index], m_pSymMapper->R2_cma);
|
||||
if (m_params.agcMu_index == agc_state_acquisition)
|
||||
{
|
||||
e_agc = 1.0 - CpxMagS(m_trackers[0]);
|
||||
AGC_Train(&agcBlind, e_agc, m_params.agcMu[m_params.agcMu_index]);
|
||||
}
|
||||
if (m_params.agcMu_index == agc_state_track)
|
||||
{
|
||||
e_agc = 1.0 - CpxMagS(m_trackers[0]);
|
||||
AGC_Train(&agcBlind, e_agc, m_params.agcMu[m_params.agcMu_index]);
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
@@ -620,27 +629,15 @@ void Receiver::processBaseband(CVec const &iq, uint32_t len)
|
||||
// Lock-detector development
|
||||
// @1 x symbolrate
|
||||
// -----------------------------------------------------
|
||||
cpx_t winner_diff = Cpx(0,0);
|
||||
radio_float_t winner_d = 1000;
|
||||
int winner_i = 0;
|
||||
for (int i=0; i < 4; i++)
|
||||
{
|
||||
cpx_t diff = CpxSubS(IQ_soft, m_trackers_[i]);
|
||||
radio_float_t distance = CpxMagS(diff);
|
||||
radio_float_t alpha = 0.002;
|
||||
radio_float_t beta = 1.0 - alpha;
|
||||
cpx_t s_min = m_statistics.ddcMinMax.min;
|
||||
cpx_t s_max = m_statistics.ddcMinMax.max;
|
||||
m_trackers[0] = CpxAddS(CpxScaleRealS(m_trackers[0], beta), CpxScaleRealS(Cpx(s_max.real, s_min.imag), alpha));
|
||||
m_trackers[1] = CpxAddS(CpxScaleRealS(m_trackers[1], beta), CpxScaleRealS(Cpx(s_max.real, s_max.imag), alpha));
|
||||
m_trackers[2] = CpxAddS(CpxScaleRealS(m_trackers[2], beta), CpxScaleRealS(Cpx(s_min.real, s_max.imag), alpha));
|
||||
m_trackers[3] = CpxAddS(CpxScaleRealS(m_trackers[3], beta), CpxScaleRealS(Cpx(s_min.real, s_min.imag), alpha));
|
||||
|
||||
// Find tracker with smallest distance from current symbol
|
||||
if (distance < winner_d)
|
||||
{
|
||||
winner_d = distance;
|
||||
winner_i = i;
|
||||
winner_diff = diff;
|
||||
}
|
||||
}
|
||||
m_trackers_[winner_i] = CpxAddS(m_trackers_[winner_i], CpxScaleRealS(winner_diff, winner_d*TRACKER_MU+TRACKER_EPS));
|
||||
for (int i=0; i < 4; i++)
|
||||
{
|
||||
m_trackers[i] = CpxAddS(CpxScaleRealS(m_trackers[i], 0.998f), CpxScaleRealS(m_trackers_[i], 0.002f));
|
||||
}
|
||||
|
||||
// Statistics
|
||||
#ifndef DISABLE_UNUSED_STATISTICS
|
||||
|
||||
Reference in New Issue
Block a user