From 51870a2ae1620cf5ed1eefe770d019e746144f74 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 13 Jul 2024 13:01:32 +0200 Subject: [PATCH] Added shift to channel marker to take RIT into account --- plugins/channelrx/wdsprx/wdsprxgui.cpp | 12 +- sdrbase/dsp/channelmarker.cpp | 7 + sdrbase/dsp/channelmarker.h | 14 +- sdrgui/gui/glspectrumview.cpp | 175 ++++++++++++++----------- 4 files changed, 127 insertions(+), 81 deletions(-) diff --git a/plugins/channelrx/wdsprx/wdsprxgui.cpp b/plugins/channelrx/wdsprx/wdsprxgui.cpp index 4b87051c0..e57ae72c5 100644 --- a/plugins/channelrx/wdsprx/wdsprxgui.cpp +++ b/plugins/channelrx/wdsprx/wdsprxgui.cpp @@ -271,6 +271,7 @@ void WDSPRxGUI::on_rit_toggled(bool checked) { m_settings.m_rit = checked; m_settings.m_profiles[m_settings.m_profileIndex].m_rit = m_settings.m_rit; + m_channelMarker.setShift(checked ? m_settings.m_ritFrequency: 0); applySettings(); } @@ -278,6 +279,7 @@ void WDSPRxGUI::on_ritFrequency_valueChanged(int value) { m_settings.m_ritFrequency = value; ui->ritFrequencyText->setText(tr("%1").arg(value)); + m_channelMarker.setShift(m_settings.m_rit ? value: 0); applySettings(); } @@ -742,7 +744,11 @@ void WDSPRxGUI::applyBandwidths(unsigned int spanLog2, bool force) m_channelMarker.setBandwidth(bw * 200); m_channelMarker.setSidebands(dsb ? ChannelMarker::dsb : bw < 0 ? ChannelMarker::lsb : ChannelMarker::usb); ui->dsb->setIcon(bw < 0 ? m_iconDSBLSB: m_iconDSBUSB); - if (!dsb) { m_channelMarker.setLowCutoff(lw * 100); } + + if (!dsb) { + m_channelMarker.setLowCutoff(lw * 100); + } + blockApplySettings(wasBlocked); } @@ -753,6 +759,10 @@ void WDSPRxGUI::displaySettings() m_channelMarker.setBandwidth(m_settings.m_profiles[m_settings.m_profileIndex].m_highCutoff * 2); m_channelMarker.setTitle(m_settings.m_title); m_channelMarker.setLowCutoff(m_settings.m_profiles[m_settings.m_profileIndex].m_lowCutoff); + int shift = m_settings.m_profiles[m_settings.m_profileIndex].m_rit ? + m_settings.m_profiles[m_settings.m_profileIndex].m_ritFrequency : + 0; + m_channelMarker.setShift(shift); if (m_deviceUISet->m_deviceMIMOEngine) { diff --git a/sdrbase/dsp/channelmarker.cpp b/sdrbase/dsp/channelmarker.cpp index 87f5a3d4c..07c7dd648 100644 --- a/sdrbase/dsp/channelmarker.cpp +++ b/sdrbase/dsp/channelmarker.cpp @@ -52,6 +52,7 @@ ChannelMarker::ChannelMarker(QObject* parent) : m_bandwidth(0), m_oppositeBandwidth(0), m_lowCutoff(0), + m_shift(0), m_sidebands(dsb), m_visible(false), m_highlighted(false), @@ -107,6 +108,12 @@ void ChannelMarker::setLowCutoff(int lowCutoff) emit changedByAPI(); } +void ChannelMarker::setShift(int shift) +{ + m_shift = shift; + emit changedByAPI(); +} + void ChannelMarker::setSidebands(sidebands_t sidebands) { m_sidebands = sidebands; diff --git a/sdrbase/dsp/channelmarker.h b/sdrbase/dsp/channelmarker.h index f235a656c..33a6f8cad 100644 --- a/sdrbase/dsp/channelmarker.h +++ b/sdrbase/dsp/channelmarker.h @@ -42,11 +42,11 @@ public: typedef enum frequencyScaleDisplay_e { - FScaleDisplay_freq, - FScaleDisplay_title, - FScaleDisplay_addressSend, - FScaleDisplay_addressReceive, - FScaleDisplay_none + FScaleDisplay_freq, + FScaleDisplay_title, + FScaleDisplay_addressSend, + FScaleDisplay_addressReceive, + FScaleDisplay_none } frequencyScaleDisplay_t; ChannelMarker(QObject* parent = NULL); @@ -69,6 +69,9 @@ public: void setLowCutoff(int lowCutoff); int getLowCutoff() const { return m_lowCutoff; } + void setShift(int shift); + int getShift() const { return m_shift; } + void setSidebands(sidebands_t sidebands); sidebands_t getSidebands() const { return m_sidebands; } @@ -118,6 +121,7 @@ protected: int m_bandwidth; int m_oppositeBandwidth; int m_lowCutoff; + int m_shift; sidebands_t m_sidebands; bool m_visible; bool m_highlighted; diff --git a/sdrgui/gui/glspectrumview.cpp b/sdrgui/gui/glspectrumview.cpp index d4c486de3..1df1d9d54 100644 --- a/sdrgui/gui/glspectrumview.cpp +++ b/sdrgui/gui/glspectrumview.cpp @@ -564,9 +564,17 @@ void GLSpectrumView::setUseCalibration(bool useCalibration) update(); } -void GLSpectrumView::setMeasurementParams(SpectrumSettings::Measurement measurement, - int centerFrequencyOffset, int bandwidth, int chSpacing, int adjChBandwidth, - int harmonics, int peaks, bool highlight, int precision) +void GLSpectrumView::setMeasurementParams( + SpectrumSettings::Measurement measurement, + int centerFrequencyOffset, + int bandwidth, + int chSpacing, + int adjChBandwidth, + int harmonics, + int peaks, + bool highlight, + int precision +) { m_mutex.lock(); m_measurement = measurement; @@ -1280,16 +1288,16 @@ void GLSpectrumView::paintGL() GLfloat h = m_frequencyPixmap.height() / (GLfloat) m_waterfallHeight; GLfloat vtx1[] = { - -l, -h, - 1.0f+r, -h, - 1.0f+r, 0.0f, - -l, 0.0f + -l, - h, + 1.0f+r, -h, + 1.0f+r, 0.0f, + -l, 0.0f }; GLfloat tex1[] = { - 0, 1, - 1, 1, - 1, 0, - 0, 0 + 0, 1, + 1, 1, + 1, 0, + 0, 0 }; m_glShaderFrequencyScale.drawSurface(spectrogramGridMatrix, tex1, vtx1, 4); @@ -1300,16 +1308,16 @@ void GLSpectrumView::paintGL() GLfloat h = (m_bottomMargin/2) / (GLfloat) m_waterfallHeight; // m_bottomMargin is fm.ascent GLfloat vtx1[] = { - -w, 0.0f-h, - 0.0f, 0.0f-h, - 0.0f, 1.0f+h, - -w, 1.0f+h + -w, 0.0f-h, + 0.0f, 0.0f-h, + 0.0f, 1.0f+h, + -w, 1.0f+h }; GLfloat tex1[] = { - 0, 1, - 1, 1, - 1, 0, - 0, 0 + 0, 1, + 1, 1, + 1, 0, + 0, 0 }; m_glShaderSpectrogramTimeScale.drawSurface(spectrogramGridMatrix, tex1, vtx1, 4); @@ -1320,16 +1328,16 @@ void GLSpectrumView::paintGL() GLfloat h = m_topMargin / (GLfloat) m_spectrogramPowerPixmap.height(); GLfloat vtx1[] = { - -w, 1.0f, 0.0f, - 0.0f, 1.0f, 0.0f, - 0.0f, 1.0f, 1.0f+h, - -w, 1.0f, 1.0f+h, + -w, 1.0f, 0.0f, + 0.0f, 1.0f, 0.0f, + 0.0f, 1.0f, 1.0f+h, + -w, 1.0f, 1.0f+h, }; GLfloat tex1[] = { - 0, 1, - 1, 1, - 1, 0, - 0, 0 + 0, 1, + 1, 1, + 1, 0, + 0, 0 }; m_glShaderSpectrogramPowerScale.drawSurface(spectrogramGridMatrix, tex1, vtx1, 4, 3); @@ -2201,13 +2209,22 @@ void GLSpectrumView::measurePeak() findPeak(power, frequency); drawTextsRight( - {"Peak: ", ""}, { - displayPower(power, m_linear ? 'e' : 'f', m_linear ? 3 : 1), - displayFull(frequency) + "Peak: ", + "" }, - {m_peakPowerMaxStr, m_peakFrequencyMaxStr}, - {m_peakPowerUnits, "Hz"} + { + displayPower(power, m_linear ? 'e' : 'f', m_linear ? 3 : 1), + displayFull(frequency) + }, + { + m_peakPowerMaxStr, + m_peakFrequencyMaxStr + }, + { + m_peakPowerUnits, + "Hz" + } ); if (m_measurements) { m_measurements->setPeak(0, frequency, power); @@ -2231,8 +2248,8 @@ void GLSpectrumView::measurePeaks() right--; float power = m_linear ? - spectrum[peakBin] * (m_useCalibration ? m_calibrationGain : 1.0f) : - spectrum[peakBin] + (m_useCalibration ? m_calibrationShiftdB : 0.0f); + spectrum[peakBin] * (m_useCalibration ? m_calibrationGain : 1.0f) : + spectrum[peakBin] + (m_useCalibration ? m_calibrationShiftdB : 0.0f); int64_t frequency = binToFrequency(peakBin); // Add to table @@ -2767,7 +2784,7 @@ void GLSpectrumView::applyChanges() m_glWaterfallBoxMatrix.setToIdentity(); m_glWaterfallBoxMatrix.translate( -1.0f + ((float)(2*m_leftMargin) / (float) width()), - 1.0f - ((float)(2*waterfallTop) / (float) height()) + 1.0f - ((float)(2*waterfallTop) / (float) height()) ); m_glWaterfallBoxMatrix.scale( ((float) 2 * (width() - m_leftMargin - m_rightMargin)) / (float) width(), @@ -2777,7 +2794,7 @@ void GLSpectrumView::applyChanges() m_glHistogramBoxMatrix.setToIdentity(); m_glHistogramBoxMatrix.translate( -1.0f + ((float)(2*m_leftMargin) / (float) width()), - 1.0f - ((float)(2*histogramTop) / (float) height()) + 1.0f - ((float)(2*histogramTop) / (float) height()) ); m_glHistogramBoxMatrix.scale( ((float) 2 * (width() - m_leftMargin - m_rightMargin)) / (float) width(), @@ -2787,7 +2804,7 @@ void GLSpectrumView::applyChanges() m_glHistogramSpectrumMatrix.setToIdentity(); m_glHistogramSpectrumMatrix.translate( -1.0f + ((float)(2*m_leftMargin) / (float) width()), - 1.0f - ((float)(2*histogramTop) / (float) height()) + 1.0f - ((float)(2*histogramTop) / (float) height()) ); m_glHistogramSpectrumMatrix.scale( ((float) 2 * (width() - m_leftMargin - m_rightMargin)) / ((float) width() * (float)(m_nbBins)), @@ -2804,7 +2821,7 @@ void GLSpectrumView::applyChanges() m_glFrequencyScaleBoxMatrix.setToIdentity(); m_glFrequencyScaleBoxMatrix.translate ( -1.0f, - 1.0f - ((float) 2*frequencyScaleTop / (float) height()) + 1.0f - ((float) 2*frequencyScaleTop / (float) height()) ); m_glFrequencyScaleBoxMatrix.scale ( 2.0f, @@ -2864,7 +2881,7 @@ void GLSpectrumView::applyChanges() m_glWaterfallBoxMatrix.setToIdentity(); m_glWaterfallBoxMatrix.translate( -1.0f + ((float)(2*m_leftMargin) / (float) width()), - 1.0f - ((float)(2*m_topMargin) / (float) height()) + 1.0f - ((float)(2*m_topMargin) / (float) height()) ); m_glWaterfallBoxMatrix.scale( ((float) 2 * (width() - m_leftMargin - m_rightMargin)) / (float) width(), @@ -2881,7 +2898,7 @@ void GLSpectrumView::applyChanges() m_glFrequencyScaleBoxMatrix.setToIdentity(); m_glFrequencyScaleBoxMatrix.translate ( -1.0f, - 1.0f - ((float) 2*frequencyScaleTop / (float) height()) + 1.0f - ((float) 2*frequencyScaleTop / (float) height()) ); m_glFrequencyScaleBoxMatrix.scale ( 2.0f, @@ -2915,7 +2932,7 @@ void GLSpectrumView::applyChanges() m_glHistogramSpectrumMatrix.setToIdentity(); m_glHistogramSpectrumMatrix.translate( -1.0f + ((float)(2*m_leftMargin) / (float) width()), - 1.0f - ((float)(2*histogramTop) / (float) height()) + 1.0f - ((float)(2*histogramTop) / (float) height()) ); m_glHistogramSpectrumMatrix.scale( ((float) 2 * (width() - m_leftMargin - m_rightMargin)) / ((float) width() * (float)(m_nbBins)), @@ -2925,7 +2942,7 @@ void GLSpectrumView::applyChanges() m_glHistogramBoxMatrix.setToIdentity(); m_glHistogramBoxMatrix.translate( -1.0f + ((float)(2*m_leftMargin) / (float) width()), - 1.0f - ((float)(2*histogramTop) / (float) height()) + 1.0f - ((float)(2*histogramTop) / (float) height()) ); m_glHistogramBoxMatrix.scale( ((float) 2 * (width() - m_leftMargin - m_rightMargin)) / (float) width(), @@ -2942,7 +2959,7 @@ void GLSpectrumView::applyChanges() m_glFrequencyScaleBoxMatrix.setToIdentity(); m_glFrequencyScaleBoxMatrix.translate ( -1.0f, - 1.0f - ((float) 2*frequencyScaleTop / (float) height()) + 1.0f - ((float) 2*frequencyScaleTop / (float) height()) ); m_glFrequencyScaleBoxMatrix.scale ( 2.0f, @@ -3032,23 +3049,31 @@ void GLSpectrumView::applyChanges() xc = m_centerFrequency + dv->m_channelMarker->getCenterFrequency(); // marker center frequency dsbw = dv->m_channelMarker->getBandwidth(); - if (sidebands == ChannelMarker::usb) { - nw = dv->m_channelMarker->getLowCutoff(); // negative bandwidth + if (sidebands == ChannelMarker::usb) + { + nw = dv->m_channelMarker->getLowCutoff() + dv->m_channelMarker->getShift(); // negative bandwidth int bw = dv->m_channelMarker->getBandwidth() / 2; - pw = (qreal) bw; // positive bandwidth - } else if (sidebands == ChannelMarker::lsb) { - pw = dv->m_channelMarker->getLowCutoff(); + pw = (qreal) bw + dv->m_channelMarker->getShift(); // positive bandwidth + } + else if (sidebands == ChannelMarker::lsb) + { + pw = dv->m_channelMarker->getLowCutoff() + dv->m_channelMarker->getShift(); int bw = dv->m_channelMarker->getBandwidth() / 2; - nw = (qreal) bw; - } else if (sidebands == ChannelMarker::vusb) { - nw = -dv->m_channelMarker->getOppositeBandwidth(); // negative bandwidth - pw = dv->m_channelMarker->getBandwidth(); // positive bandwidth - } else if (sidebands == ChannelMarker::vlsb) { - pw = dv->m_channelMarker->getOppositeBandwidth(); // positive bandwidth - nw = -dv->m_channelMarker->getBandwidth(); // negative bandwidth - } else { - pw = dsbw / 2; - nw = -pw; + nw = (qreal) bw + dv->m_channelMarker->getShift(); + } + else if (sidebands == ChannelMarker::vusb) + { + nw = -dv->m_channelMarker->getOppositeBandwidth() + dv->m_channelMarker->getShift(); // negative bandwidth + pw = dv->m_channelMarker->getBandwidth() + dv->m_channelMarker->getShift(); // positive bandwidth + } + else if (sidebands == ChannelMarker::vlsb) { + pw = dv->m_channelMarker->getOppositeBandwidth() + dv->m_channelMarker->getShift(); // positive bandwidth + nw = -dv->m_channelMarker->getBandwidth() + dv->m_channelMarker->getShift(); // negative bandwidth + } + else + { + pw = (dsbw / 2) + dv->m_channelMarker->getShift(); + nw = -(dsbw / 2) + dv->m_channelMarker->getShift(); } // draw the DSB rectangle @@ -3057,7 +3082,7 @@ void GLSpectrumView::applyChanges() glMatrixDsb.setToIdentity(); glMatrixDsb.translate( -1.0f + 2.0f * ((m_leftMargin + m_frequencyScale.getPosFromValue(xc - (dsbw/2))) / (float) width()), - 1.0f + 1.0f ); glMatrixDsb.scale( 2.0f * (dsbw / (float) frequencySpan), @@ -3066,8 +3091,8 @@ void GLSpectrumView::applyChanges() dv->m_glMatrixDsbWaterfall = glMatrixDsb; dv->m_glMatrixDsbWaterfall.translate( - 0.0f, - (float) waterfallTop / (float) height() + 0.0f, + (float) waterfallTop / (float) height() ); dv->m_glMatrixDsbWaterfall.scale( (float) (width() - m_leftMargin - m_rightMargin) / (float) width(), @@ -3076,8 +3101,8 @@ void GLSpectrumView::applyChanges() dv->m_glMatrixDsbHistogram = glMatrixDsb; dv->m_glMatrixDsbHistogram.translate( - 0.0f, - (float) histogramTop / (float) height() + 0.0f, + (float) histogramTop / (float) height() ); dv->m_glMatrixDsbHistogram.scale( (float) (width() - m_leftMargin - m_rightMargin) / (float) width(), @@ -3086,8 +3111,8 @@ void GLSpectrumView::applyChanges() dv->m_glMatrixDsbFreqScale = glMatrixDsb; dv->m_glMatrixDsbFreqScale.translate( - 0.0f, - (float) frequencyScaleTop / (float) height() + 0.0f, + (float) frequencyScaleTop / (float) height() ); dv->m_glMatrixDsbFreqScale.scale( (float) (width() - m_leftMargin - m_rightMargin) / (float) width(), @@ -3100,7 +3125,7 @@ void GLSpectrumView::applyChanges() glMatrix.setToIdentity(); glMatrix.translate( -1.0f + 2.0f * ((m_leftMargin + m_frequencyScale.getPosFromValue(xc + nw)) / (float) width()), - 1.0f + 1.0f ); glMatrix.scale( 2.0f * ((pw-nw) / (float) frequencySpan), @@ -3109,8 +3134,8 @@ void GLSpectrumView::applyChanges() dv->m_glMatrixWaterfall = glMatrix; dv->m_glMatrixWaterfall.translate( - 0.0f, - (float) waterfallTop / (float) height() + 0.0f, + (float) waterfallTop / (float) height() ); dv->m_glMatrixWaterfall.scale( (float) (width() - m_leftMargin - m_rightMargin) / (float) width(), @@ -3119,8 +3144,8 @@ void GLSpectrumView::applyChanges() dv->m_glMatrixHistogram = glMatrix; dv->m_glMatrixHistogram.translate( - 0.0f, - (float) histogramTop / (float) height() + 0.0f, + (float) histogramTop / (float) height() ); dv->m_glMatrixHistogram.scale( (float) (width() - m_leftMargin - m_rightMargin) / (float) width(), @@ -3129,8 +3154,8 @@ void GLSpectrumView::applyChanges() dv->m_glMatrixFreqScale = glMatrix; dv->m_glMatrixFreqScale.translate( - 0.0f, - (float) frequencyScaleTop / (float) height() + 0.0f, + (float) frequencyScaleTop / (float) height() ); dv->m_glMatrixFreqScale.scale( (float) (width() - m_leftMargin - m_rightMargin) / (float) width(), @@ -3527,7 +3552,7 @@ void GLSpectrumView::updateHistogramPeaks() if ((m_histogramMarkers.at(i).m_markerType == SpectrumHistogramMarker::SpectrumMarkerTypePower) || ((m_histogramMarkers.at(i).m_markerType == SpectrumHistogramMarker::SpectrumMarkerTypePowerMax) && - (m_histogramMarkers.at(i).m_holdReset || (power > m_histogramMarkers.at(i).m_powerMax)))) + (m_histogramMarkers.at(i).m_holdReset || (power > m_histogramMarkers.at(i).m_powerMax)))) { float binSize = m_frequencyScale.getRange() / m_nbBins; m_histogramMarkers[i].m_fftBin = fftBin; @@ -3664,7 +3689,7 @@ void GLSpectrumView::updateCalibrationPoints() else if (m_calibrationPoints.size() == 1) { m_calibrationGain = m_calibrationPoints.first().m_powerCalibratedReference / - m_calibrationPoints.first().m_powerRelativeReference; + m_calibrationPoints.first().m_powerRelativeReference; m_calibrationShiftdB = CalcDb::dbPower(m_calibrationGain); } else @@ -4310,7 +4335,7 @@ void GLSpectrumView::wheelEvent(QWheelEvent *event) // Other mice/trackpads use smaller values int delta = event->angleDelta().y(); if (delta != 0) { - m_glShaderSpectrogram.verticalAngle(-5.0*delta/120.0); + m_glShaderSpectrogram.verticalAngle(-5.0*delta/120.0); } repaint(); // Force repaint in case acquisition is stopped }