From f368c62329933f5ef7bc9cd153b7643d65f39cab Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 5 Aug 2018 12:44:06 +0200 Subject: [PATCH] Fixed power display going to floor value in some demods --- debian/changelog | 5 +-- plugins/channelrx/demodam/amdemod.h | 33 +++++++++++++++---- plugins/channelrx/demodbfm/bfmdemod.h | 24 ++++++++++++-- plugins/channelrx/demodbfm/bfmplugin.cpp | 2 +- plugins/channelrx/demoddsd/dsddemod.h | 24 ++++++++++++-- plugins/channelrx/demoddsd/dsddemodplugin.cpp | 2 +- plugins/channelrx/demodnfm/nfmdemod.h | 24 ++++++++++++-- plugins/channelrx/demodnfm/nfmplugin.cpp | 2 +- plugins/channelrx/demodssb/ssbdemod.h | 24 ++++++++++++-- plugins/channelrx/demodssb/ssbplugin.cpp | 2 +- plugins/channelrx/demodwfm/wfmdemod.h | 24 ++++++++++++-- plugins/channelrx/demodwfm/wfmplugin.cpp | 2 +- 12 files changed, 139 insertions(+), 29 deletions(-) diff --git a/debian/changelog b/debian/changelog index b947fcf68..ce6c5765b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,10 @@ sdrangel (4.0.6-1) unstable; urgency=medium * Web API: RTL-SDR: fixed RF bandwidth setting - * Web API: enhnaced DV serial and AM demod interfaces + * Web API: enhanced DV serial and AM demod interfaces + * Fixed power display going to floor value in some demods - -- Edouard Griffiths, F4EXB Sun, 05 Aug 2018 09:14:18 +0200 + -- Edouard Griffiths, F4EXB Sun, 05 Aug 2018 19:14:18 +0200 sdrangel (4.0.5-1) unstable; urgency=medium diff --git a/plugins/channelrx/demodam/amdemod.h b/plugins/channelrx/demodam/amdemod.h index d8b292417..f08ed6451 100644 --- a/plugins/channelrx/demodam/amdemod.h +++ b/plugins/channelrx/demodam/amdemod.h @@ -125,20 +125,38 @@ public: bool getPllLocked() const { return m_settings.m_pll && m_pll.locked(); } Real getPllFrequency() const { return m_pll.getFreq(); } - void getMagSqLevels(double& avg, double& peak, int& nbSamples) - { - avg = m_magsqCount == 0 ? 1e-10 : m_magsqSum / m_magsqCount; - peak = m_magsqPeak == 0.0 ? 1e-10 : m_magsqPeak; - nbSamples = m_magsqCount == 0 ? 1 : m_magsqCount; - m_magsqSum = 0.0f; + void getMagSqLevels(double& avg, double& peak, int& nbSamples) + { + if (m_magsqCount > 0) + { + m_magsq = m_magsqSum / m_magsqCount; + m_magSqLevelStore.m_magsq = m_magsq; + m_magSqLevelStore.m_magsqPeak = m_magsqPeak; + } + + avg = m_magSqLevelStore.m_magsq; + peak = m_magSqLevelStore.m_magsqPeak; + nbSamples = m_magsqCount == 0 ? 1 : m_magsqCount; + + m_magsqSum = 0.0f; m_magsqPeak = 0.0f; m_magsqCount = 0; - } + } static const QString m_channelIdURI; static const QString m_channelId; private: + struct MagSqLevelsStore + { + MagSqLevelsStore() : + m_magsq(1e-12), + m_magsqPeak(1e-12) + {} + double m_magsq; + double m_magsqPeak; + }; + enum RateState { RSInitialFill, RSRunning @@ -167,6 +185,7 @@ private: double m_magsqSum; double m_magsqPeak; int m_magsqCount; + MagSqLevelsStore m_magSqLevelStore; MovingAverageUtil m_movingAverage; SimpleAGC<4800> m_volumeAGC; diff --git a/plugins/channelrx/demodbfm/bfmdemod.h b/plugins/channelrx/demodbfm/bfmdemod.h index 99c76d07f..700deb6cf 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.h +++ b/plugins/channelrx/demodbfm/bfmdemod.h @@ -146,10 +146,17 @@ public: void getMagSqLevels(double& avg, double& peak, int& nbSamples) { - avg = m_magsqCount == 0 ? 1e-10 : m_magsqSum / m_magsqCount; - m_magsq = avg; - peak = m_magsqPeak == 0.0 ? 1e-10 : m_magsqPeak; + if (m_magsqCount > 0) + { + m_magsq = m_magsqSum / m_magsqCount; + m_magSqLevelStore.m_magsq = m_magsq; + m_magSqLevelStore.m_magsqPeak = m_magsqPeak; + } + + avg = m_magSqLevelStore.m_magsq; + peak = m_magSqLevelStore.m_magsqPeak; nbSamples = m_magsqCount == 0 ? 1 : m_magsqCount; + m_magsqSum = 0.0f; m_magsqPeak = 0.0f; m_magsqCount = 0; @@ -184,6 +191,16 @@ public: static const QString m_channelId; private: + struct MagSqLevelsStore + { + MagSqLevelsStore() : + m_magsq(1e-12), + m_magsqPeak(1e-12) + {} + double m_magsq; + double m_magsqPeak; + }; + enum RateState { RSInitialFill, RSRunning @@ -224,6 +241,7 @@ private: double m_magsqSum; double m_magsqPeak; int m_magsqCount; + MagSqLevelsStore m_magSqLevelStore; AudioVector m_audioBuffer; uint m_audioBufferFill; diff --git a/plugins/channelrx/demodbfm/bfmplugin.cpp b/plugins/channelrx/demodbfm/bfmplugin.cpp index bc4903103..0d813d9ef 100644 --- a/plugins/channelrx/demodbfm/bfmplugin.cpp +++ b/plugins/channelrx/demodbfm/bfmplugin.cpp @@ -27,7 +27,7 @@ const PluginDescriptor BFMPlugin::m_pluginDescriptor = { QString("Broadcast FM Demodulator"), - QString("4.0.2"), + QString("4.0.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/channelrx/demoddsd/dsddemod.h b/plugins/channelrx/demoddsd/dsddemod.h index 9ffeef680..f5d906723 100644 --- a/plugins/channelrx/demoddsd/dsddemod.h +++ b/plugins/channelrx/demoddsd/dsddemod.h @@ -117,10 +117,17 @@ public: void getMagSqLevels(double& avg, double& peak, int& nbSamples) { - avg = m_magsqCount == 0 ? 1e-10 : m_magsqSum / m_magsqCount; - m_magsq = avg; - peak = m_magsqPeak == 0.0 ? 1e-10 : m_magsqPeak; + if (m_magsqCount > 0) + { + m_magsq = m_magsqSum / m_magsqCount; + m_magSqLevelStore.m_magsq = m_magsq; + m_magSqLevelStore.m_magsqPeak = m_magsqPeak; + } + + avg = m_magSqLevelStore.m_magsq; + peak = m_magSqLevelStore.m_magsqPeak; nbSamples = m_magsqCount == 0 ? 1 : m_magsqCount; + m_magsqSum = 0.0f; m_magsqPeak = 0.0f; m_magsqCount = 0; @@ -146,6 +153,16 @@ public: static const QString m_channelId; private: + struct MagSqLevelsStore + { + MagSqLevelsStore() : + m_magsq(1e-12), + m_magsqPeak(1e-12) + {} + double m_magsq; + double m_magsqPeak; + }; + typedef enum { signalFormatNone, @@ -208,6 +225,7 @@ private: double m_magsqSum; double m_magsqPeak; int m_magsqCount; + MagSqLevelsStore m_magSqLevelStore; SampleVector m_scopeSampleBuffer; AudioVector m_audioBuffer; diff --git a/plugins/channelrx/demoddsd/dsddemodplugin.cpp b/plugins/channelrx/demoddsd/dsddemodplugin.cpp index 61414fd45..32c365ae0 100644 --- a/plugins/channelrx/demoddsd/dsddemodplugin.cpp +++ b/plugins/channelrx/demoddsd/dsddemodplugin.cpp @@ -27,7 +27,7 @@ const PluginDescriptor DSDDemodPlugin::m_pluginDescriptor = { QString("DSD Demodulator"), - QString("4.0.1"), + QString("4.0.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index be42291c2..ae1ec8c9b 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -154,10 +154,17 @@ public: void getMagSqLevels(double& avg, double& peak, int& nbSamples) { - avg = m_magsqCount == 0 ? 1e-10 : m_magsqSum / m_magsqCount; - m_magsq = avg; - peak = m_magsqPeak == 0.0 ? 1e-10 : m_magsqPeak; + if (m_magsqCount > 0) + { + m_magsq = m_magsqSum / m_magsqCount; + m_magSqLevelStore.m_magsq = m_magsq; + m_magSqLevelStore.m_magsqPeak = m_magsqPeak; + } + + avg = m_magSqLevelStore.m_magsq; + peak = m_magSqLevelStore.m_magsqPeak; nbSamples = m_magsqCount == 0 ? 1 : m_magsqCount; + m_magsqSum = 0.0f; m_magsqPeak = 0.0f; m_magsqCount = 0; @@ -167,6 +174,16 @@ public: static const QString m_channelId; private: + struct MagSqLevelsStore + { + MagSqLevelsStore() : + m_magsq(1e-12), + m_magsqPeak(1e-12) + {} + double m_magsq; + double m_magsqPeak; + }; + enum RateState { RSInitialFill, RSRunning @@ -203,6 +220,7 @@ private: double m_magsqSum; double m_magsqPeak; int m_magsqCount; + MagSqLevelsStore m_magSqLevelStore; MovingAverageUtil m_movingAverage; AFSquelch m_afSquelch; diff --git a/plugins/channelrx/demodnfm/nfmplugin.cpp b/plugins/channelrx/demodnfm/nfmplugin.cpp index 928dcc072..e23e7fa6b 100644 --- a/plugins/channelrx/demodnfm/nfmplugin.cpp +++ b/plugins/channelrx/demodnfm/nfmplugin.cpp @@ -9,7 +9,7 @@ const PluginDescriptor NFMPlugin::m_pluginDescriptor = { QString("NFM Demodulator"), - QString("3.14.6"), + QString("4.0.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/channelrx/demodssb/ssbdemod.h b/plugins/channelrx/demodssb/ssbdemod.h index 4dabab796..27521aa01 100644 --- a/plugins/channelrx/demodssb/ssbdemod.h +++ b/plugins/channelrx/demodssb/ssbdemod.h @@ -126,10 +126,17 @@ public: void getMagSqLevels(double& avg, double& peak, int& nbSamples) { - avg = m_magsqCount == 0 ? 1e-10 : m_magsqSum / m_magsqCount; - m_magsq = avg; - peak = m_magsqPeak == 0.0 ? 1e-10 : m_magsqPeak; + if (m_magsqCount > 0) + { + m_magsq = m_magsqSum / m_magsqCount; + m_magSqLevelStore.m_magsq = m_magsq; + m_magSqLevelStore.m_magsqPeak = m_magsqPeak; + } + + avg = m_magSqLevelStore.m_magsq; + peak = m_magSqLevelStore.m_magsqPeak; nbSamples = m_magsqCount == 0 ? 1 : m_magsqCount; + m_magsqSum = 0.0f; m_magsqPeak = 0.0f; m_magsqCount = 0; @@ -153,6 +160,16 @@ public: static const QString m_channelId; private: + struct MagSqLevelsStore + { + MagSqLevelsStore() : + m_magsq(1e-12), + m_magsqPeak(1e-12) + {} + double m_magsq; + double m_magsqPeak; + }; + class MsgConfigureSSBDemodPrivate : public Message { MESSAGE_CLASS_DECLARATION @@ -268,6 +285,7 @@ private: double m_magsqSum; double m_magsqPeak; int m_magsqCount; + MagSqLevelsStore m_magSqLevelStore; MagAGC m_agc; bool m_agcActive; bool m_agcClamping; diff --git a/plugins/channelrx/demodssb/ssbplugin.cpp b/plugins/channelrx/demodssb/ssbplugin.cpp index f964c394b..04281096d 100644 --- a/plugins/channelrx/demodssb/ssbplugin.cpp +++ b/plugins/channelrx/demodssb/ssbplugin.cpp @@ -10,7 +10,7 @@ const PluginDescriptor SSBPlugin::m_pluginDescriptor = { QString("SSB Demodulator"), - QString("4.0.2"), + QString("4.0.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/channelrx/demodwfm/wfmdemod.h b/plugins/channelrx/demodwfm/wfmdemod.h index 0e594eb33..fa707a600 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.h +++ b/plugins/channelrx/demodwfm/wfmdemod.h @@ -109,10 +109,17 @@ public: void getMagSqLevels(double& avg, double& peak, int& nbSamples) { - avg = m_magsqCount == 0 ? 1e-10 : m_magsqSum / m_magsqCount; - m_magsq = avg; - peak = m_magsqPeak == 0.0 ? 1e-10 : m_magsqPeak; + if (m_magsqCount > 0) + { + m_magsq = m_magsqSum / m_magsqCount; + m_magSqLevelStore.m_magsq = m_magsq; + m_magSqLevelStore.m_magsqPeak = m_magsqPeak; + } + + avg = m_magSqLevelStore.m_magsq; + peak = m_magSqLevelStore.m_magsqPeak; nbSamples = m_magsqCount == 0 ? 1 : m_magsqCount; + m_magsqSum = 0.0f; m_magsqPeak = 0.0f; m_magsqCount = 0; @@ -145,6 +152,16 @@ public: static const QString m_channelId; private: + struct MagSqLevelsStore + { + MagSqLevelsStore() : + m_magsq(1e-12), + m_magsqPeak(1e-12) + {} + double m_magsq; + double m_magsqPeak; + }; + enum RateState { RSInitialFill, RSRunning @@ -172,6 +189,7 @@ private: double m_magsqSum; double m_magsqPeak; int m_magsqCount; + MagSqLevelsStore m_magSqLevelStore; MovingAverageUtil m_movingAverage; Real m_fmExcursion; diff --git a/plugins/channelrx/demodwfm/wfmplugin.cpp b/plugins/channelrx/demodwfm/wfmplugin.cpp index fa0c2ad8f..8d2836832 100644 --- a/plugins/channelrx/demodwfm/wfmplugin.cpp +++ b/plugins/channelrx/demodwfm/wfmplugin.cpp @@ -10,7 +10,7 @@ const PluginDescriptor WFMPlugin::m_pluginDescriptor = { QString("WFM Demodulator"), - QString("4.0.0"), + QString("4.0.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true,