From fd915613e42b95630743904629a293162d94df54 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 26 Jun 2018 01:06:45 +0200 Subject: [PATCH] Scope: added magnitude squared (linear power) display overlays --- doc/img/ChAnalyzerNG_plugin_overlay_lin.png | Bin 0 -> 2106 bytes doc/img/ChAnalyzerNG_plugin_overlay_lin.xcf | Bin 0 -> 6573 bytes plugins/channelrx/chanalyzer/readme.md | 4 +++ sdrgui/dsp/scopevisng.cpp | 32 ++++++++++++++++++-- sdrgui/gui/glscopenggui.cpp | 2 +- 5 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 doc/img/ChAnalyzerNG_plugin_overlay_lin.png create mode 100644 doc/img/ChAnalyzerNG_plugin_overlay_lin.xcf diff --git a/doc/img/ChAnalyzerNG_plugin_overlay_lin.png b/doc/img/ChAnalyzerNG_plugin_overlay_lin.png new file mode 100644 index 0000000000000000000000000000000000000000..23706118d0d30e1d05b0acb00900267c0a404c43 GIT binary patch literal 2106 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 literal 0 HcmV?d00001 diff --git a/plugins/channelrx/chanalyzer/readme.md b/plugins/channelrx/chanalyzer/readme.md index 653c76896..e4f069307 100644 --- a/plugins/channelrx/chanalyzer/readme.md +++ b/plugins/channelrx/chanalyzer/readme.md @@ -269,6 +269,10 @@ The signal is synchronized with the PLL in 4 phase mode (locker icon is green). ![Channel Analyzer NG plugin scope1 controls](../../../doc/img/ChAnalyzerNG_plugin_overlay_dB.png) +**Note3**: in the MagSq mode when the trace is selected (1) the display overlay on the top right of the trace shows 2 figures in scientific notation. From left to right: peak power and average power. + +![Channel Analyzer NG plugin scope2 controls](../../../doc/img/ChAnalyzerNG_plugin_overlay_lin.png) +

5. Source select

This is for future use when more than one incoming complex signals can be applied. The signal index appears on the right of the button diff --git a/sdrgui/dsp/scopevisng.cpp b/sdrgui/dsp/scopevisng.cpp index 70a8044c3..ca6377310 100644 --- a/sdrgui/dsp/scopevisng.cpp +++ b/sdrgui/dsp/scopevisng.cpp @@ -465,8 +465,36 @@ int ScopeVisNG::processTraces(const SampleVector::const_iterator& cbegin, const } else if (projectionType == Projector::ProjectionMagSq) { - v = ((*itCtl)->m_projector.run(*begin) - itData->m_ofs)*itData->m_amp - 1.0f; - // TODO: power display overlay for squared magnitude + Real magsq = (*itCtl)->m_projector.run(*begin); + v = (magsq - itData->m_ofs)*itData->m_amp - 1.0f; + + if ((traceCount >= shift) && (traceCount < shift+length)) // power display overlay values construction + { + if (traceCount == shift) + { + (*itCtl)->m_maxPow = 0.0f; + (*itCtl)->m_sumPow = 0.0f; + (*itCtl)->m_nbPow = 1; + } + + if (magsq > 0.0f) + { + if (magsq > (*itCtl)->m_maxPow) + { + (*itCtl)->m_maxPow = magsq; + } + + (*itCtl)->m_sumPow += magsq; + (*itCtl)->m_nbPow++; + } + } + + if ((m_nbSamples == 1) && ((*itCtl)->m_nbPow > 0)) // on last sample create power display overlay + { + double avgPow = (*itCtl)->m_sumPow / (*itCtl)->m_nbPow; + itData->m_textOverlay = QString("%1 %2").arg((*itCtl)->m_maxPow, 0, 'e', 2).arg(avgPow, 0, 'e', 2); + (*itCtl)->m_nbPow = 0; + } } else if (projectionType == Projector::ProjectionMagDB) { diff --git a/sdrgui/gui/glscopenggui.cpp b/sdrgui/gui/glscopenggui.cpp index 425d45f2f..3362ec55f 100644 --- a/sdrgui/gui/glscopenggui.cpp +++ b/sdrgui/gui/glscopenggui.cpp @@ -1217,7 +1217,7 @@ void GLScopeNGGUI::disableLiveMode(bool disable) void GLScopeNGGUI::fillTraceData(ScopeVisNG::TraceData& traceData) { traceData.m_projectionType = (Projector::ProjectionType) ui->traceMode->currentIndex(); - traceData.m_hasTextOverlay = (traceData.m_projectionType == Projector::ProjectionMagDB); + traceData.m_hasTextOverlay = (traceData.m_projectionType == Projector::ProjectionMagDB) || (traceData.m_projectionType == Projector::ProjectionMagSq); traceData.m_textOverlay.clear(); traceData.m_inputIndex = 0; traceData.m_amp = 0.2 / amps[ui->amp->value()];