diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.cpp b/plugins/channelrx/demodbfm/bfmdemodgui.cpp index 87dfc9ac8..2e0f4c42a 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodgui.cpp @@ -359,7 +359,14 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban ui->glSpectrum->setDisplayWaterfall(false); ui->glSpectrum->setDisplayMaxHold(false); ui->glSpectrum->setSsbSpectrum(true); - m_spectrumVis->configure(m_spectrumVis->getInputMessageQueue(), 64, 10, 0, 0, FFTWindow::BlackmanHarris); + m_spectrumVis->configure( + m_spectrumVis->getInputMessageQueue(), + 64, // FFT size + 10, // overlapping % + 0, // number of averaging samples + 0, // no averaging + FFTWindow::BlackmanHarris, + false); // logarithmic scale connect(&MainWindow::getInstance()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); m_channelMarker.blockSignals(true); diff --git a/plugins/channelrx/udpsrc/udpsrcgui.cpp b/plugins/channelrx/udpsrc/udpsrcgui.cpp index 2a645c287..a3332091f 100644 --- a/plugins/channelrx/udpsrc/udpsrcgui.cpp +++ b/plugins/channelrx/udpsrc/udpsrcgui.cpp @@ -187,7 +187,13 @@ UDPSrcGUI::UDPSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam ui->glSpectrum->setSampleRate(ui->sampleRate->text().toInt()); ui->glSpectrum->setDisplayWaterfall(true); ui->glSpectrum->setDisplayMaxHold(true); - m_spectrumVis->configure(m_spectrumVis->getInputMessageQueue(), 64, 10, 0, 0, FFTWindow::BlackmanHarris); + m_spectrumVis->configure(m_spectrumVis->getInputMessageQueue(), + 64, // FFT size + 10, // overlapping % + 0, // number of averaging samples + 0, // no averaging + FFTWindow::BlackmanHarris, + false); // logarithmic scale ui->glSpectrum->connectTimer(MainWindow::getInstance()->getMasterTimer()); connect(&MainWindow::getInstance()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); diff --git a/plugins/channeltx/udpsink/udpsinkgui.cpp b/plugins/channeltx/udpsink/udpsinkgui.cpp index 88e33c399..1d7b8da74 100644 --- a/plugins/channeltx/udpsink/udpsinkgui.cpp +++ b/plugins/channeltx/udpsink/udpsinkgui.cpp @@ -142,7 +142,13 @@ UDPSinkGUI::UDPSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS ui->glSpectrum->setSampleRate(ui->sampleRate->text().toInt()); ui->glSpectrum->setDisplayWaterfall(true); ui->glSpectrum->setDisplayMaxHold(true); - m_spectrumVis->configure(m_spectrumVis->getInputMessageQueue(), 64, 10, 0, 0, FFTWindow::BlackmanHarris); + m_spectrumVis->configure(m_spectrumVis->getInputMessageQueue(), + 64, // FFT size + 10, // overlapping % + 0, // number of averaging samples + 0, // no averaging + FFTWindow::BlackmanHarris, + false); // logarithmic scale ui->glSpectrum->connectTimer(MainWindow::getInstance()->getMasterTimer()); connect(&MainWindow::getInstance()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); diff --git a/sdrgui/dsp/spectrumvis.cpp b/sdrgui/dsp/spectrumvis.cpp index 2c1542ec8..ae386182e 100644 --- a/sdrgui/dsp/spectrumvis.cpp +++ b/sdrgui/dsp/spectrumvis.cpp @@ -44,9 +44,10 @@ void SpectrumVis::configure(MessageQueue* msgQueue, int overlapPercent, unsigned int averagingNb, int averagingMode, - FFTWindow::Function window) + FFTWindow::Function window, + bool linear) { - MsgConfigureSpectrumVis* cmd = new MsgConfigureSpectrumVis(fftSize, overlapPercent, averagingNb, averagingMode, window); + MsgConfigureSpectrumVis* cmd = new MsgConfigureSpectrumVis(fftSize, overlapPercent, averagingNb, averagingMode, window, linear); msgQueue->push(cmd); } diff --git a/sdrgui/dsp/spectrumvis.h b/sdrgui/dsp/spectrumvis.h index e6832627a..de1c35236 100644 --- a/sdrgui/dsp/spectrumvis.h +++ b/sdrgui/dsp/spectrumvis.h @@ -27,12 +27,19 @@ public: MESSAGE_CLASS_DECLARATION public: - MsgConfigureSpectrumVis(int fftSize, int overlapPercent, unsigned int averageNb, int averagingMode, FFTWindow::Function window) : + MsgConfigureSpectrumVis( + int fftSize, + int overlapPercent, + unsigned int averageNb, + int averagingMode, + FFTWindow::Function window, + bool linear) : Message(), m_fftSize(fftSize), m_overlapPercent(overlapPercent), m_averageNb(averageNb), - m_window(window) + m_window(window), + m_linear(linear) { m_averagingMode = averagingMode < 0 ? AvgModeNone : averagingMode > 2 ? AvgModeFixed : (SpectrumVis::AveragingMode) averagingMode; } @@ -42,6 +49,7 @@ public: unsigned int getAverageNb() const { return m_averageNb; } SpectrumVis::AveragingMode getAveragingMode() const { return m_averagingMode; } FFTWindow::Function getWindow() const { return m_window; } + bool getLinear() const { return m_linear; } private: int m_fftSize; @@ -49,6 +57,7 @@ public: unsigned int m_averageNb; SpectrumVis::AveragingMode m_averagingMode; FFTWindow::Function m_window; + bool m_linear; }; SpectrumVis(Real scalef, GLSpectrum* glSpectrum = 0); @@ -59,7 +68,8 @@ public: int overlapPercent, unsigned int averagingNb, int averagingMode, - FFTWindow::Function window); + FFTWindow::Function window, + bool m_linear); virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); void feedTriggered(const SampleVector::const_iterator& triggerPoint, const SampleVector::const_iterator& end, bool positiveOnly); diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index a13a49c40..e9040f870 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -200,7 +200,8 @@ void GLSpectrumGUI::applySettings() m_fftOverlap, m_averagingNb, m_averagingMode, - (FFTWindow::Function)m_fftWindow); + (FFTWindow::Function)m_fftWindow, + m_linear); } setAveragingToolitp(); @@ -215,7 +216,8 @@ void GLSpectrumGUI::on_fftWindow_currentIndexChanged(int index) m_fftOverlap, m_averagingNb, m_averagingMode, - (FFTWindow::Function)m_fftWindow); + (FFTWindow::Function)m_fftWindow, + m_linear); } } @@ -228,7 +230,8 @@ void GLSpectrumGUI::on_fftSize_currentIndexChanged(int index) m_fftOverlap, m_averagingNb, m_averagingMode, - (FFTWindow::Function)m_fftWindow); + (FFTWindow::Function)m_fftWindow, + m_linear); } setAveragingToolitp(); } @@ -243,7 +246,8 @@ void GLSpectrumGUI::on_averagingMode_currentIndexChanged(int index) m_fftOverlap, m_averagingNb, m_averagingMode, - (FFTWindow::Function)m_fftWindow); + (FFTWindow::Function)m_fftWindow, + m_linear); } if (m_glSpectrum != 0) @@ -267,7 +271,8 @@ void GLSpectrumGUI::on_averaging_currentIndexChanged(int index) m_fftOverlap, m_averagingNb, m_averagingMode, - (FFTWindow::Function)m_fftWindow); + (FFTWindow::Function)m_fftWindow, + m_linear); } if (m_glSpectrum != 0) @@ -280,6 +285,21 @@ void GLSpectrumGUI::on_averaging_currentIndexChanged(int index) setAveragingToolitp(); } +void GLSpectrumGUI::on_linscale_toggled(bool checked) +{ + m_linear = checked; + + if(m_spectrumVis != 0) { + m_spectrumVis->configure(m_messageQueueToVis, + m_fftSize, + m_fftOverlap, + m_averagingNb, + m_averagingMode, + (FFTWindow::Function)m_fftWindow, + m_linear); + } +} + void GLSpectrumGUI::on_refLevel_currentIndexChanged(int index) { m_refLevel = 0 - index * 5; diff --git a/sdrgui/gui/glspectrumgui.h b/sdrgui/gui/glspectrumgui.h index 773274595..13d305231 100644 --- a/sdrgui/gui/glspectrumgui.h +++ b/sdrgui/gui/glspectrumgui.h @@ -63,6 +63,7 @@ private: int m_averagingIndex; int m_averagingMaxScale; //!< Max power of 10 multiplier to 2,5,10 base ex: 2 -> 2,5,10,20,50,100,200,500,1000 unsigned int m_averagingNb; + bool m_linear; //!< linear else logarithmic scale void applySettings(); int getAveragingIndex(int averaging) const; @@ -85,6 +86,7 @@ private slots: void on_traceIntensity_valueChanged(int index); void on_averagingMode_currentIndexChanged(int index); void on_averaging_currentIndexChanged(int index); + void on_linscale_toggled(bool checked); void on_waterfall_toggled(bool checked); void on_histogram_toggled(bool checked); diff --git a/sdrgui/gui/glspectrumgui.ui b/sdrgui/gui/glspectrumgui.ui index ed90ebf08..6942e96bc 100644 --- a/sdrgui/gui/glspectrumgui.ui +++ b/sdrgui/gui/glspectrumgui.ui @@ -6,7 +6,7 @@ 0 0 - 331 + 342 59 @@ -633,6 +633,24 @@ + + + + Logarithmic / Linear scale selection + + + + + + + :/logarithmic.png + :/linear.png:/logarithmic.png + + + true + + + diff --git a/sdrgui/resources/linear.png b/sdrgui/resources/linear.png new file mode 100644 index 000000000..115bcaf8a Binary files /dev/null and b/sdrgui/resources/linear.png differ diff --git a/sdrgui/resources/linear.xcf b/sdrgui/resources/linear.xcf new file mode 100644 index 000000000..53d08ebdf Binary files /dev/null and b/sdrgui/resources/linear.xcf differ diff --git a/sdrgui/resources/logarithmic.png b/sdrgui/resources/logarithmic.png new file mode 100644 index 000000000..32bb9bd1a Binary files /dev/null and b/sdrgui/resources/logarithmic.png differ diff --git a/sdrgui/resources/logarithmic.xcf b/sdrgui/resources/logarithmic.xcf new file mode 100644 index 000000000..81e755797 Binary files /dev/null and b/sdrgui/resources/logarithmic.xcf differ diff --git a/sdrgui/resources/res.qrc b/sdrgui/resources/res.qrc index 6b645b992..d628419ae 100644 --- a/sdrgui/resources/res.qrc +++ b/sdrgui/resources/res.qrc @@ -1,5 +1,7 @@ + linear.png + logarithmic.png pin_last.png sweep.png minusrx.png