From 907871f16466f697903741c4a1f591126a97af05 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 26 Sep 2022 13:30:58 +0100 Subject: [PATCH 1/3] Spectrum GUI: Add button to save spectrum data to text file. --- sdrgui/gui/glspectrumgui.cpp | 35 +++++++++++++++++++++++++++++++++++ sdrgui/gui/glspectrumgui.h | 1 + sdrgui/gui/glspectrumgui.ui | 14 ++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index 27bdef877..c5e20cac0 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -21,6 +21,8 @@ #include #include +#include +#include #include "gui/glspectrumgui.h" #include "dsp/fftwindow.h" @@ -491,6 +493,39 @@ void GLSpectrumGUI::on_markers_clicked(bool checked) applySettings(); } +// Save spectrum data to a text file +void GLSpectrumGUI::on_save_clicked(bool checked) +{ + // Get filename to write + QFileDialog fileDialog(nullptr, "Select file to save data to", "", "*.*"); + fileDialog.setAcceptMode(QFileDialog::AcceptSave); + if (fileDialog.exec()) + { + QStringList fileNames = fileDialog.selectedFiles(); + if (fileNames.size() > 0) + { + // Get spectrum data (This vector can be larger than fftSize) + std::vector spectrum; + m_spectrumVis->getPowerSpectrumCopy(spectrum); + + // Write to text file + QFile file(fileNames[0]); + if (file.open(QIODevice::WriteOnly)) + { + QTextStream out(&file); + for (int i = 0; i < m_settings.m_fftSize; i++) { + out << spectrum[i] << "\n"; + } + file.close(); + } + else + { + QMessageBox::critical(this, "Spectrum", QString("Failed to open file %1").arg(fileNames[0])); + } + } + } +} + void GLSpectrumGUI::on_refLevel_valueChanged(int value) { m_settings.m_refLevel = value - m_calibrationShiftdB; diff --git a/sdrgui/gui/glspectrumgui.h b/sdrgui/gui/glspectrumgui.h index 0a13a981a..35c6d937c 100644 --- a/sdrgui/gui/glspectrumgui.h +++ b/sdrgui/gui/glspectrumgui.h @@ -107,6 +107,7 @@ private slots: void on_linscale_toggled(bool checked); void on_wsSpectrum_toggled(bool checked); void on_markers_clicked(bool checked); + void on_save_clicked(bool checked); void on_waterfall_toggled(bool checked); void on_spectrogram_toggled(bool checked); diff --git a/sdrgui/gui/glspectrumgui.ui b/sdrgui/gui/glspectrumgui.ui index 26d46dcd6..b7ecc5180 100644 --- a/sdrgui/gui/glspectrumgui.ui +++ b/sdrgui/gui/glspectrumgui.ui @@ -1023,6 +1023,20 @@ + + + + Save spectrum data to file + + + + + + + :/save.png:/save.png + + + From b935b32274209a264ab56b4bbc2a33925ecdb363 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 26 Sep 2022 13:32:00 +0100 Subject: [PATCH 2/3] Fix gcc warning --- sdrgui/gui/glspectrumgui.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index c5e20cac0..883a9d356 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -496,6 +496,8 @@ void GLSpectrumGUI::on_markers_clicked(bool checked) // Save spectrum data to a text file void GLSpectrumGUI::on_save_clicked(bool checked) { + (void) checked; + // Get filename to write QFileDialog fileDialog(nullptr, "Select file to save data to", "", "*.*"); fileDialog.setAcceptMode(QFileDialog::AcceptSave); From f85045b291727325435b735c38e61b8dad2f0fa7 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 26 Sep 2022 18:03:14 +0100 Subject: [PATCH 3/3] Save spectrum as CSV file with frequency and header --- sdrgui/gui/glspectrumgui.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index 883a9d356..0ba1915a7 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -493,13 +493,13 @@ void GLSpectrumGUI::on_markers_clicked(bool checked) applySettings(); } -// Save spectrum data to a text file +// Save spectrum data to a CSV file void GLSpectrumGUI::on_save_clicked(bool checked) { (void) checked; // Get filename to write - QFileDialog fileDialog(nullptr, "Select file to save data to", "", "*.*"); + QFileDialog fileDialog(nullptr, "Select file to save data to", "", "*.csv"); fileDialog.setAcceptMode(QFileDialog::AcceptSave); if (fileDialog.exec()) { @@ -515,8 +515,13 @@ void GLSpectrumGUI::on_save_clicked(bool checked) if (file.open(QIODevice::WriteOnly)) { QTextStream out(&file); - for (int i = 0; i < m_settings.m_fftSize; i++) { - out << spectrum[i] << "\n"; + float frequency = m_glSpectrum->getCenterFrequency() - (m_glSpectrum->getSampleRate() / 2.0f); + float rbw = m_glSpectrum->getSampleRate() / (float)m_settings.m_fftSize; + out << "\"Frequency\",\"Power\"\n"; + for (int i = 0; i < m_settings.m_fftSize; i++) + { + out << frequency << "," << spectrum[i] << "\n"; + frequency += rbw; } file.close(); }