From 9776e77fd50c7cb7e0a5bfee27613b2bfbc02d03 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 3 Dec 2023 13:48:44 +0100 Subject: [PATCH] SSB demod: tie AGC steep transition correction to AGC clamping --- plugins/channelrx/demodssb/ssbdemodsink.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/channelrx/demodssb/ssbdemodsink.cpp b/plugins/channelrx/demodssb/ssbdemodsink.cpp index 56d04cbd1..4b32e0b56 100644 --- a/plugins/channelrx/demodssb/ssbdemodsink.cpp +++ b/plugins/channelrx/demodssb/ssbdemodsink.cpp @@ -179,11 +179,12 @@ void SSBDemodSink::processOneSample(Complex &ci) // Prevent overload based on squared magnitude variation // Only if AGC is active - if (m_agcActive && (std::abs(m_magsqCur - m_magsqPrev) > m_agcTarget*m_agcTarget*5.0)) + if (m_agcActive && m_agcClamping && (std::abs(m_magsqCur - m_magsqPrev) > m_agcTarget*m_agcTarget*5.0) & (agcVal > 100.0)) { - m_agc.reset(m_agcTarget*100.0); // Quench AGC at -20dB the target - m_agc.resetStepCounters(); - m_squelchDelayLine.write(sideband[i]); + float target = m_agcTarget*sqrt(agcVal); // Quench AGC depending on previous value + m_agc.reset(target); + m_squelchDelayLine.write(fftfilt::cmplx{target, 0.0}); + m_magsqCur = target*target; } else {