From 52eb869b7c04e295ae81d9b674f37380a2763a47 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 26 Jul 2017 00:08:29 +0200 Subject: [PATCH] SSB demod: AGC: implemented threshold gate to mitigate transients --- plugins/channelrx/demodssb/ssbdemod.cpp | 17 ++++++++++++++--- plugins/channelrx/demodssb/ssbdemod.h | 22 +++++++++++++++------- plugins/channelrx/demodssb/ssbdemodgui.cpp | 8 +++++--- plugins/channelrx/demodssb/ssbdemodgui.ui | 12 ++++++------ 4 files changed, 40 insertions(+), 19 deletions(-) diff --git a/plugins/channelrx/demodssb/ssbdemod.cpp b/plugins/channelrx/demodssb/ssbdemod.cpp index fc28113ad..7c3f62329 100644 --- a/plugins/channelrx/demodssb/ssbdemod.cpp +++ b/plugins/channelrx/demodssb/ssbdemod.cpp @@ -37,6 +37,7 @@ SSBDemod::SSBDemod(BasebandSampleSink* sampleSink) : m_agcActive(false), m_agcNbSamples(12000), m_agcPowerThreshold(1e-2), + m_agcThresholdGate(0), m_sampleSink(sampleSink), m_audioFifo(4, 24000), m_settingsMutex(QMutex::Recursive) @@ -91,7 +92,8 @@ void SSBDemod::configure(MessageQueue* messageQueue, bool audioMute, bool agc, int agcTimeLog2, - int agcPowerThreshold) + int agcPowerThreshold, + int agcThresholdGate) { Message* cmd = MsgConfigureSSBDemod::create( Bandwidth, @@ -104,7 +106,8 @@ void SSBDemod::configure(MessageQueue* messageQueue, audioMute, agc, agcTimeLog2, - agcPowerThreshold); + agcPowerThreshold, + agcThresholdGate); messageQueue->push(cmd); } @@ -313,6 +316,7 @@ bool SSBDemod::handleMessage(const Message& cmd) int agcNbSamples = 48 * (1<agc->isChecked()); s.writeS32(12, ui->agcTimeLog2->value()); s.writeS32(13, ui->agcPowerThreshold->value()); + s.writeS32(14, ui->agcThresholdGate->value()); return s.final(); } @@ -138,7 +139,7 @@ bool SSBDemodGUI::deserialize(const QByteArray& data) ui->agcPowerThresholdText->setText(s); d.readS32(14, &tmp, 5); ui->agcThresholdGate->setValue(tmp); - s = QString::number(tmp*10, 'f', 0); + s = QString::number(tmp, 'f', 0); ui->agcThresholdGateText->setText(s); blockApplySettings(false); @@ -304,7 +305,7 @@ void SSBDemodGUI::on_agcPowerThreshold_valueChanged(int value) void SSBDemodGUI::on_agcThresholdGate_valueChanged(int value) { - QString s = QString::number(value * 10, 'f', 0); + QString s = QString::number(value, 'f', 0); ui->agcThresholdGateText->setText(s); applySettings(); } @@ -515,7 +516,8 @@ void SSBDemodGUI::applySettings() ui->audioMute->isChecked(), ui->agc->isChecked(), ui->agcTimeLog2->value(), - ui->agcPowerThreshold->value()); + ui->agcPowerThreshold->value(), + ui->agcThresholdGate->value()); } } diff --git a/plugins/channelrx/demodssb/ssbdemodgui.ui b/plugins/channelrx/demodssb/ssbdemodgui.ui index a4fb0ec03..e634ea148 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.ui +++ b/plugins/channelrx/demodssb/ssbdemodgui.ui @@ -6,7 +6,7 @@ 0 0 - 435 + 370 160 @@ -36,7 +36,7 @@ 0 0 - 421 + 360 151 @@ -568,13 +568,13 @@ Set threshiold gate (ms) - 50 + 20 1 - 5 + 4 @@ -582,7 +582,7 @@ - 24 + 16 0 @@ -590,7 +590,7 @@ Threshiold gate (ms) - 000 + 00 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter