From 1765298c2c27656c958cfacd048661789bf4dc9a Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 16 Feb 2021 05:51:23 +0100 Subject: [PATCH] Spectrum frequency zoom: update channel markers accordingly --- sdrgui/gui/glspectrum.cpp | 48 ++++++++++++++++++++++++++++++--------- sdrgui/gui/glspectrum.h | 2 ++ 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/sdrgui/gui/glspectrum.cpp b/sdrgui/gui/glspectrum.cpp index ac1555dde..f77db9c0e 100644 --- a/sdrgui/gui/glspectrum.cpp +++ b/sdrgui/gui/glspectrum.cpp @@ -1344,9 +1344,7 @@ void GLSpectrum::applyChanges() m_leftMargin += 2 * M; - m_frequencyScale.setSize(width() - m_leftMargin - m_rightMargin); - m_frequencyScale.setRange(Unit::Frequency, m_centerFrequency - m_sampleRate / 2, m_centerFrequency + m_sampleRate / 2); - m_frequencyScale.setMakeOpposite(m_lsbDisplay); + setFrequencyScale(); m_glWaterfallBoxMatrix.setToIdentity(); m_glWaterfallBoxMatrix.translate( @@ -1438,9 +1436,7 @@ void GLSpectrum::applyChanges() m_leftMargin = m_timeScale.getScaleWidth(); m_leftMargin += 2 * M; - m_frequencyScale.setSize(width() - m_leftMargin - m_rightMargin); - m_frequencyScale.setRange(Unit::Frequency, m_centerFrequency - m_sampleRate / 2.0, m_centerFrequency + m_sampleRate / 2.0); - m_frequencyScale.setMakeOpposite(m_lsbDisplay); + setFrequencyScale(); m_glWaterfallBoxMatrix.setToIdentity(); m_glWaterfallBoxMatrix.translate( @@ -1490,9 +1486,7 @@ void GLSpectrum::applyChanges() m_leftMargin = m_powerScale.getScaleWidth(); m_leftMargin += 2 * M; - m_frequencyScale.setSize(width() - m_leftMargin - m_rightMargin); - m_frequencyScale.setRange(Unit::Frequency, m_centerFrequency - m_sampleRate / 2, m_centerFrequency + m_sampleRate / 2); - m_frequencyScale.setMakeOpposite(m_lsbDisplay); + setFrequencyScale(); m_glHistogramSpectrumMatrix.setToIdentity(); m_glHistogramSpectrumMatrix.translate( @@ -1591,6 +1585,19 @@ void GLSpectrum::applyChanges() } // channel overlays + int64_t centerFrequency; + int frequencySpan; + + if (m_frequencyZoomFactor == 1.0f) + { + centerFrequency = m_centerFrequency; + frequencySpan = m_sampleRate; + } + else + { + getFrequencyZoom(centerFrequency, frequencySpan); + } + for (int i = 0; i < m_channelMarkerStates.size(); ++i) { ChannelMarkerState* dv = m_channelMarkerStates[i]; @@ -1628,7 +1635,7 @@ void GLSpectrum::applyChanges() 1.0f ); glMatrixDsb.scale( - 2.0f * (dsbw / (float)m_sampleRate), + 2.0f * (dsbw / (float) frequencySpan), -2.0f ); @@ -1671,7 +1678,7 @@ void GLSpectrum::applyChanges() 1.0f ); glMatrix.scale( - 2.0f * ((pw-nw) / (float)m_sampleRate), + 2.0f * ((pw-nw) / (float) frequencySpan), -2.0f ); @@ -2264,6 +2271,25 @@ void GLSpectrum::updateFFTLimits() m_spectrumVis->getInputMessageQueue()->push(msg); } +void GLSpectrum::setFrequencyScale() +{ + int frequencySpan; + int64_t centerFrequency; + + getFrequencyZoom(centerFrequency, frequencySpan); + m_frequencyScale.setSize(width() - m_leftMargin - m_rightMargin); + m_frequencyScale.setRange(Unit::Frequency, centerFrequency - frequencySpan / 2.0, centerFrequency + frequencySpan / 2.0); + m_frequencyScale.setMakeOpposite(m_lsbDisplay); +} + +void GLSpectrum::getFrequencyZoom(int64_t& centerFrequency, int& frequencySpan) +{ + frequencySpan = (m_frequencyZoomFactor == 1) ? + m_sampleRate : m_sampleRate * (1.0 / m_frequencyZoomFactor); + centerFrequency = (m_frequencyZoomFactor == 1) ? + m_centerFrequency : (m_frequencyZoomPos - 0.5) * m_sampleRate + m_centerFrequency; +} + // void GLSpectrum::updateFFTLimits() // { // m_fftMin = m_frequencyZoomFactor == 1 ? 0 : (m_frequencyZoomPos - (0.5f / m_frequencyZoomFactor)) * m_fftSize; diff --git a/sdrgui/gui/glspectrum.h b/sdrgui/gui/glspectrum.h index 0f7d641f9..78aaee359 100644 --- a/sdrgui/gui/glspectrum.h +++ b/sdrgui/gui/glspectrum.h @@ -347,6 +347,8 @@ private: void frequencyZoom(QWheelEvent*); void resetFrequencyZoom(); void updateFFTLimits(); + void setFrequencyScale(); + void getFrequencyZoom(int64_t& centerFrequency, int& frequencySpan); void enterEvent(QEvent* event); void leaveEvent(QEvent* event);