From 723747e9dc0baf8f2dd5575fb156de4ec2354119 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 28 May 2018 02:40:26 +0200 Subject: [PATCH] SSB demod: yet again another clamping algorithm --- plugins/channelrx/demodssb/ssbdemod.cpp | 2 +- sdrbase/dsp/agc.cpp | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/plugins/channelrx/demodssb/ssbdemod.cpp b/plugins/channelrx/demodssb/ssbdemod.cpp index cf7a50ad4..2efeb6ea2 100644 --- a/plugins/channelrx/demodssb/ssbdemod.cpp +++ b/plugins/channelrx/demodssb/ssbdemod.cpp @@ -85,7 +85,7 @@ SSBDemod::SSBDemod(DeviceSourceAPI *deviceAPI) : m_magsqPeak = 0.0f; m_magsqCount = 0; - m_agc.setClampMax(SDR_RX_SCALED*SDR_RX_SCALED); + m_agc.setClampMax(SDR_RX_SCALED/100.0); m_agc.setClamping(m_agcClamping); SSBFilter = new fftfilt(m_LowCutoff / m_audioSampleRate, m_Bandwidth / m_audioSampleRate, ssbFftLen); diff --git a/sdrbase/dsp/agc.cpp b/sdrbase/dsp/agc.cpp index 95329508e..93671c617 100644 --- a/sdrbase/dsp/agc.cpp +++ b/sdrbase/dsp/agc.cpp @@ -104,25 +104,19 @@ double MagAGC::feedAndGetValue(const Complex& ci) { if (m_squared) { - double u0 = m_R / m_moving_average.average(); - double du = (u0*m_magsq) - (m_clampMax/4.0); - if (du > 0) { - m_u0 = (m_clampMax/4.0)*(1.0 + (log10(1+du)/8.0)); // experimental clipping limiter + if (m_magsq > m_clampMax) { + m_u0 = m_clampMax / m_magsq; } else { - m_u0 = u0; + m_u0 = m_R / m_moving_average.average(); } - //m_u0 = (u0 * m_magsq > m_clampMax) ? m_clampMax / m_magsq : u0; } else { - double u02 = m_R2 / m_moving_average.average(); - double du = (u02*m_magsq) - (m_clampMax/4.0); - if (du > 0) { - m_u0 = (m_clampMax/4.0)*(1.0 + (log10(1+du)/8.0)); // experimental clipping limiter + if (sqrt(m_magsq) > m_clampMax) { + m_u0 = m_clampMax / sqrt(m_magsq); } else { - m_u0 = sqrt(u02); + m_u0 = m_R / sqrt(m_moving_average.average()); } - //m_u0 = (u02 * m_magsq > m_clampMax) ? sqrt(m_clampMax / m_magsq) : sqrt(u02); } } else