From 6b97d9ea598b523ef42f6b6622dec618a3d5e04e Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 26 Apr 2017 11:09:07 +0200 Subject: [PATCH] WFM Demod: implemented the signal gauge --- plugins/channelrx/demodwfm/wfmdemod.cpp | 24 ++++++++++++++++++---- plugins/channelrx/demodwfm/wfmdemod.h | 15 ++++++++++++++ plugins/channelrx/demodwfm/wfmdemodgui.cpp | 19 ++++++++++++++--- plugins/channelrx/demodwfm/wfmplugin.cpp | 2 +- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/plugins/channelrx/demodwfm/wfmdemod.cpp b/plugins/channelrx/demodwfm/wfmdemod.cpp index 45fffef46..e42417a6e 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.cpp +++ b/plugins/channelrx/demodwfm/wfmdemod.cpp @@ -31,7 +31,13 @@ MESSAGE_CLASS_DEFINITION(WFMDemod::MsgConfigureWFMDemod, Message) WFMDemod::WFMDemod(BasebandSampleSink* sampleSink) : m_sampleSink(sampleSink), m_audioFifo(4, 250000), - m_settingsMutex(QMutex::Recursive) + m_settingsMutex(QMutex::Recursive), + m_squelchOpen(false), + m_magsq(0.0f), + m_magsqSum(0.0f), + m_magsqPeak(0.0f), + m_magsqCount(0) + { setObjectName("WFMDemod"); @@ -90,16 +96,26 @@ void WFMDemod::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(); rf_out = m_rfFilter->runFilt(c, &rf); // filter RF before demod - for (int i =0 ; i m_magsqPeak) + { + m_magsqPeak = magsq; + } + + m_magsqCount++; if(m_movingAverage.average() >= m_squelchLevel) m_squelchState = m_running.m_rfBandwidth / 20; // decay rate diff --git a/plugins/channelrx/demodwfm/wfmdemod.h b/plugins/channelrx/demodwfm/wfmdemod.h index 390ee5390..dff66af64 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.h +++ b/plugins/channelrx/demodwfm/wfmdemod.h @@ -53,6 +53,17 @@ public: Real getMagSq() const { return m_movingAverage.average(); } bool getSquelchOpen() const { return m_squelchOpen; } + void getMagSqLevels(Real& avg, Real& peak, int& nbSamples) + { + avg = m_magsqSum / m_magsqCount; + m_magsq = avg; + peak = m_magsqPeak; + nbSamples = m_magsqCount; + m_magsqSum = 0.0f; + m_magsqPeak = 0.0f; + m_magsqCount = 0; + } + private: class MsgConfigureWFMDemod : public Message { MESSAGE_CLASS_DECLARATION @@ -131,6 +142,10 @@ private: Real m_squelchLevel; int m_squelchState; bool m_squelchOpen; + Real m_magsq; //!< displayed averaged value + Real m_magsqSum; + Real m_magsqPeak; + int m_magsqCount; Real m_lastArgument; MovingAverage m_movingAverage; diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.cpp b/plugins/channelrx/demodwfm/wfmdemodgui.cpp index 61eabb326..f573c55b7 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodgui.cpp @@ -224,6 +224,7 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg ui->setupUi(this); ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold)); ui->deltaFrequency->setValueRange(7, 0U, 9999999U); + ui->channelPowerMeter->setColorTheme(LevelMeterSignalDB::ColorGreenAndBlue); setAttribute(Qt::WA_DeleteOnClose, true); @@ -314,9 +315,21 @@ void WFMDemodGUI::enterEvent(QEvent*) void WFMDemodGUI::tick() { - Real powDb = CalcDb::dbPower(m_wfmDemod->getMagSq()); - m_channelPowerDbAvg.feed(powDb); - ui->channelPower->setText(QString::number(m_channelPowerDbAvg.average(), 'f', 1)); +// Real powDb = CalcDb::dbPower(m_wfmDemod->getMagSq()); +// m_channelPowerDbAvg.feed(powDb); +// ui->channelPower->setText(QString::number(m_channelPowerDbAvg.average(), 'f', 1)); + + Real magsqAvg, magsqPeak; + int nbMagsqSamples; + m_wfmDemod->getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples); + Real powDbAvg = CalcDb::dbPower(magsqAvg); + Real powDbPeak = CalcDb::dbPower(magsqPeak); + + ui->channelPower->setText(QString::number(powDbAvg, 'f', 1)); + ui->channelPowerMeter->levelChanged( + (100.0f + powDbAvg) / 100.0f, + (100.0f + powDbPeak) / 100.0f, + nbMagsqSamples); bool squelchOpen = m_wfmDemod->getSquelchOpen(); diff --git a/plugins/channelrx/demodwfm/wfmplugin.cpp b/plugins/channelrx/demodwfm/wfmplugin.cpp index c478feb97..9f3bc9f45 100644 --- a/plugins/channelrx/demodwfm/wfmplugin.cpp +++ b/plugins/channelrx/demodwfm/wfmplugin.cpp @@ -7,7 +7,7 @@ const PluginDescriptor WFMPlugin::m_pluginDescriptor = { QString("WFM Demodulator"), - QString("3.1.0"), + QString("3.4.1"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true,