From e9f122fac1971458a4e25eacb06656f1262bebb7 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 11 Oct 2015 06:34:12 +0200 Subject: [PATCH] NFM demod: optimized feed routine. Fixed channel power calculation --- plugins/channel/nfm/nfmdemod.cpp | 9 +++++---- plugins/channel/nfm/nfmdemod.h | 2 +- plugins/channel/nfm/nfmdemodgui.cpp | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/plugins/channel/nfm/nfmdemod.cpp b/plugins/channel/nfm/nfmdemod.cpp index b9ef6cdff..1d00df606 100644 --- a/plugins/channel/nfm/nfmdemod.cpp +++ b/plugins/channel/nfm/nfmdemod.cpp @@ -122,7 +122,8 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto for (SampleVector::const_iterator it = begin; it != end; ++it) { - Complex c(it->real() / 32768.0f, it->imag() / 32768.0f); + //Complex c(it->real() / 32768.0f, it->imag() / 32768.0f); + Complex c(it->real(), it->imag()); c *= m_nco.nextIQ(); { @@ -135,7 +136,7 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto //ci *= (m_agcLevel / m_AGC.getValue()); m_AGC.feed(ci); - m_magsq = m_AGC.getMagSq(); + //m_magsq = m_AGC.getMagSq() / (1<<30); // demod /* @@ -172,7 +173,7 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto // AF processing - squelchOpen = (getMagSq() > m_squelchLevel); + squelchOpen = (getMag() > m_squelchLevel); /* if (m_afSquelch.analyze(demod)) @@ -355,7 +356,7 @@ void NFMDemod::apply() if (m_config.m_squelch != m_running.m_squelch) { // input is a value in tenths of dB - m_squelchLevel = pow(10.0, m_config.m_squelch / 100.0); + m_squelchLevel = pow(10.0, m_config.m_squelch / 200.0); //m_squelchLevel *= m_squelchLevel; m_afSquelch.setThreshold(m_squelchLevel); } diff --git a/plugins/channel/nfm/nfmdemod.h b/plugins/channel/nfm/nfmdemod.h index d55cf2190..2c3c33a61 100644 --- a/plugins/channel/nfm/nfmdemod.h +++ b/plugins/channel/nfm/nfmdemod.h @@ -64,7 +64,7 @@ public: m_ctcssIndexSelected = selectedCtcssIndex; } - Real getMagSq() { return m_AGC.getAverage() / 4534.0; } + Real getMag() { return m_AGC.getAverage() / (1<<15); } private: class MsgConfigureNFMDemod : public Message { diff --git a/plugins/channel/nfm/nfmdemodgui.cpp b/plugins/channel/nfm/nfmdemodgui.cpp index fc30276f1..e09017166 100644 --- a/plugins/channel/nfm/nfmdemodgui.cpp +++ b/plugins/channel/nfm/nfmdemodgui.cpp @@ -341,7 +341,7 @@ void NFMDemodGUI::blockApplySettings(bool block) void NFMDemodGUI::tick() { - Real powDb = CalcDb::dbPower(m_nfmDemod->getMagSq()); + Real powDb = CalcDb::dbPower(m_nfmDemod->getMag()) * 2; m_channelPowerDbAvg.feed(powDb); ui->channelPower->setText(QString::number(m_channelPowerDbAvg.average(), 'f', 1)); }