From 7ec955fc6102bf3e6fbf5d2277d71eab4f62c4ac Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 9 Jul 2023 00:00:51 +0200 Subject: [PATCH] GLSpectrum: fixed SSB handling --- sdrgui/gui/glspectrumview.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sdrgui/gui/glspectrumview.cpp b/sdrgui/gui/glspectrumview.cpp index a3b5ce433..c6cfb3e9e 100644 --- a/sdrgui/gui/glspectrumview.cpp +++ b/sdrgui/gui/glspectrumview.cpp @@ -2706,7 +2706,7 @@ void GLSpectrumView::applyChanges() if (m_sampleRate > 0) { - float timeScaleDiv = ((float)m_sampleRate / (float)m_timingRate) * (m_ssbSpectrum ? 2 : 1); + float timeScaleDiv = ((float)m_sampleRate / (float)m_timingRate); float halfFFTSize = m_fftSize / 2; if (halfFFTSize > m_fftOverlap) { @@ -2800,7 +2800,7 @@ void GLSpectrumView::applyChanges() if (m_sampleRate > 0) { - float timeScaleDiv = ((float)m_sampleRate / (float)m_timingRate) * (m_ssbSpectrum ? 2 : 1); + float timeScaleDiv = ((float)m_sampleRate / (float)m_timingRate); float halfFFTSize = m_fftSize / 2; if (halfFFTSize > m_fftOverlap) { @@ -4329,7 +4329,10 @@ void GLSpectrumView::zoom(const QPointF& p, int y) float zoomFreq = m_frequencyScale.getRangeMin() + pwx*m_frequencyScale.getRange(); // Calculate current centre frequency - float currentCF = (m_frequencyZoomFactor == 1) ? m_centerFrequency : ((m_frequencyZoomPos - 0.5) * m_sampleRate + m_centerFrequency); + int adjSampleRate = m_ssbSpectrum ? m_sampleRate/2 : m_sampleRate; + qint64 adjCenterFrequency = m_centerFrequency + (m_ssbSpectrum ? m_sampleRate/4 : 0); + float currentCF = (m_frequencyZoomFactor == 1) ? + adjCenterFrequency : (m_frequencyZoomPos - 0.5) * adjSampleRate + adjCenterFrequency; // Calculate difference from frequency under cursor to centre frequency float freqDiff = (currentCF - zoomFreq); @@ -4360,7 +4363,7 @@ void GLSpectrumView::zoom(const QPointF& p, int y) float zoomedCF = zoomFreq + zoomedFreqDiff; // Calculate zoom position which will set the desired center frequency - float zoomPos = (zoomedCF - m_centerFrequency) / m_sampleRate + 0.5; + float zoomPos = (zoomedCF - adjCenterFrequency) / adjSampleRate + 0.5; zoomPos = std::max(0.0f, zoomPos); zoomPos = std::min(1.0f, zoomPos);