diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index 27bdef877..0ba1915a7 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,46 @@ void GLSpectrumGUI::on_markers_clicked(bool checked) applySettings(); } +// 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", "", "*.csv"); + 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); + 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(); + } + 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 + + +