From 6a9e60efa9470fb599e1d9114bb311141e62f42d Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Sat, 13 Aug 2016 14:50:20 -0400 Subject: [PATCH] Only use audio signal level for AM based modems --- src/demod/DemodulatorThread.cpp | 23 ++++++++++++----------- src/modules/modem/Modem.cpp | 11 ++++++++++- src/modules/modem/Modem.h | 5 ++++- src/modules/modem/ModemAnalog.cpp | 2 +- src/modules/modem/ModemDigital.cpp | 2 +- src/modules/modem/analog/ModemAM.cpp | 1 + src/modules/modem/analog/ModemDSB.cpp | 1 + src/modules/modem/analog/ModemLSB.cpp | 1 + src/modules/modem/analog/ModemUSB.cpp | 1 + 9 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/demod/DemodulatorThread.cpp b/src/demod/DemodulatorThread.cpp index 1bb0edd..fe9454f 100644 --- a/src/demod/DemodulatorThread.cpp +++ b/src/demod/DemodulatorThread.cpp @@ -139,21 +139,22 @@ void DemodulatorThread::run() { if (audioOutputQueue != nullptr && ati && ati->data.size()) { float accum = 0; - for (auto i : ati->data) { - accum += abMagnitude(0.948059448969, 0.392699081699, i, 0.0); - } + if (cModem->useSignalOutput()) { + + for (auto i : ati->data) { + accum += abMagnitude(0.948059448969, 0.392699081699, i, 0.0); + } - float audioSignalLevel = linearToDb(accum / float(ati->data.size())); + currentSignalLevel = linearToDb(accum / float(ati->data.size())); - accum = 0; + } else { - for (auto i : inp->data) { - accum += abMagnitude(0.948059448969, 0.392699081699, i.real, i.imag); - } + for (auto i : inp->data) { + accum += abMagnitude(0.948059448969, 0.392699081699, i.real, i.imag); + } - float iqSignalLevel = linearToDb(accum / float(inp->data.size())); - - currentSignalLevel = iqSignalLevel>audioSignalLevel?iqSignalLevel:audioSignalLevel; + currentSignalLevel = linearToDb(accum / float(inp->data.size())); + } float sf = signalFloor.load(), sc = signalCeil.load(), sl = squelchLevel.load(); diff --git a/src/modules/modem/Modem.cpp b/src/modules/modem/Modem.cpp index 3cbfd84..da782ee 100644 --- a/src/modules/modem/Modem.cpp +++ b/src/modules/modem/Modem.cpp @@ -32,7 +32,7 @@ ModemArgInfo::ModemArgInfo(void) { } Modem::Modem() { - + useSignalOutput(false); } Modem::~Modem() { @@ -108,3 +108,12 @@ void Modem::rebuildKit() { void Modem::clearRebuildKit() { refreshKit.store(false); } + + +bool Modem::useSignalOutput() { + return _useSignalOutput.load(); +} + +void Modem::useSignalOutput(bool useOutput) { + _useSignalOutput.store(useOutput); +} diff --git a/src/modules/modem/Modem.h b/src/modules/modem/Modem.h index 7ea996c..423c65b 100644 --- a/src/modules/modem/Modem.h +++ b/src/modules/modem/Modem.h @@ -152,8 +152,11 @@ public: void rebuildKit(); void clearRebuildKit(); + bool useSignalOutput(); + void useSignalOutput(bool useOutput); + private: static ModemFactoryList modemFactories; static DefaultRatesList modemDefaultRates; - std::atomic_bool refreshKit; + std::atomic_bool refreshKit, _useSignalOutput; }; diff --git a/src/modules/modem/ModemAnalog.cpp b/src/modules/modem/ModemAnalog.cpp index 29561a3..14f0b3c 100644 --- a/src/modules/modem/ModemAnalog.cpp +++ b/src/modules/modem/ModemAnalog.cpp @@ -1,6 +1,6 @@ #include "ModemAnalog.h" -ModemAnalog::ModemAnalog() : aOutputCeil(1), aOutputCeilMA(1), aOutputCeilMAA(1) { +ModemAnalog::ModemAnalog() : Modem(), aOutputCeil(1), aOutputCeilMA(1), aOutputCeilMAA(1) { } diff --git a/src/modules/modem/ModemDigital.cpp b/src/modules/modem/ModemDigital.cpp index ce2bbd6..3723d15 100644 --- a/src/modules/modem/ModemDigital.cpp +++ b/src/modules/modem/ModemDigital.cpp @@ -5,7 +5,7 @@ ModemDigitalOutput::ModemDigitalOutput() { } -ModemDigital::ModemDigital() { +ModemDigital::ModemDigital() : Modem() { #if ENABLE_DIGITAL_LAB digitalOut = nullptr; #endif diff --git a/src/modules/modem/analog/ModemAM.cpp b/src/modules/modem/analog/ModemAM.cpp index ded9749..ab0aac0 100644 --- a/src/modules/modem/analog/ModemAM.cpp +++ b/src/modules/modem/analog/ModemAM.cpp @@ -2,6 +2,7 @@ ModemAM::ModemAM() : ModemAnalog() { demodAM = ampmodem_create(0.5, 0.0, LIQUID_AMPMODEM_DSB, 0); + useSignalOutput(true); } ModemAM::~ModemAM() { diff --git a/src/modules/modem/analog/ModemDSB.cpp b/src/modules/modem/analog/ModemDSB.cpp index 25c79fa..2cfe35c 100644 --- a/src/modules/modem/analog/ModemDSB.cpp +++ b/src/modules/modem/analog/ModemDSB.cpp @@ -2,6 +2,7 @@ ModemDSB::ModemDSB() : ModemAnalog() { demodAM_DSB = ampmodem_create(0.5, 0.0, LIQUID_AMPMODEM_DSB, 1); + useSignalOutput(true); } ModemDSB::~ModemDSB() { diff --git a/src/modules/modem/analog/ModemLSB.cpp b/src/modules/modem/analog/ModemLSB.cpp index ddad7c4..2d704cf 100644 --- a/src/modules/modem/analog/ModemLSB.cpp +++ b/src/modules/modem/analog/ModemLSB.cpp @@ -11,6 +11,7 @@ ModemLSB::ModemLSB() : ModemAnalog() { ssbShift = nco_crcf_create(LIQUID_NCO); nco_crcf_set_frequency(ssbShift, (2.0 * M_PI) * 0.25); c2rFilt = firhilbf_create(5, 90.0); + useSignalOutput(true); } ModemBase *ModemLSB::factory() { diff --git a/src/modules/modem/analog/ModemUSB.cpp b/src/modules/modem/analog/ModemUSB.cpp index c35bcfc..534974e 100644 --- a/src/modules/modem/analog/ModemUSB.cpp +++ b/src/modules/modem/analog/ModemUSB.cpp @@ -11,6 +11,7 @@ ModemUSB::ModemUSB() : ModemAnalog() { ssbShift = nco_crcf_create(LIQUID_NCO); nco_crcf_set_frequency(ssbShift, (2.0f * M_PI) * 0.25f); c2rFilt = firhilbf_create(5, 90.0); + useSignalOutput(true); } ModemBase *ModemUSB::factory() {