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