1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-02 21:27:48 -04:00

Spectrum: use common constants for FFT size limits and set limits to 64 to 8k

This commit is contained in:
f4exb 2021-04-20 11:54:58 +02:00
parent 986b6f3711
commit aad48501a1
4 changed files with 37 additions and 14 deletions

View File

@ -63,6 +63,8 @@ public:
bool m_usb; //!< USB display with increasing frequencies towads the right - else decreasing frequencies bool m_usb; //!< USB display with increasing frequencies towads the right - else decreasing frequencies
QString m_wsSpectrumAddress; QString m_wsSpectrumAddress;
uint16_t m_wsSpectrumPort; uint16_t m_wsSpectrumPort;
static const int m_log2FFTSizeMin = 6; // 64
static const int m_log2FFTSizeMax = 13; // 8k
SpectrumSettings(); SpectrumSettings();
virtual ~SpectrumSettings(); virtual ~SpectrumSettings();

View File

@ -30,8 +30,6 @@
#include "spectrumvis.h" #include "spectrumvis.h"
#define MAX_FFT_SIZE 4096
#ifndef LINUX #ifndef LINUX
inline double log2(double n) inline double log2(double n)
{ {
@ -53,9 +51,9 @@ SpectrumVis::SpectrumVis(Real scalef) :
m_running(true), m_running(true),
m_fft(nullptr), m_fft(nullptr),
m_fftEngineSequence(0), m_fftEngineSequence(0),
m_fftBuffer(MAX_FFT_SIZE), m_fftBuffer(4096),
m_powerSpectrum(MAX_FFT_SIZE), m_powerSpectrum(4096),
m_psd(MAX_FFT_SIZE), m_psd(4096),
m_fftBufferFill(0), m_fftBufferFill(0),
m_needMoreSamples(false), m_needMoreSamples(false),
m_frequencyZoomFactor(1.0f), m_frequencyZoomFactor(1.0f),
@ -774,10 +772,10 @@ void SpectrumVis::applySettings(const SpectrumSettings& settings, bool force)
{ {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
int fftSize = settings.m_fftSize > MAX_FFT_SIZE ? int fftSize = settings.m_fftSize > (1<<SpectrumSettings::m_log2FFTSizeMax) ?
MAX_FFT_SIZE : (1<<SpectrumSettings::m_log2FFTSizeMax) :
settings.m_fftSize < 64 ? settings.m_fftSize < (1<<SpectrumSettings::m_log2FFTSizeMin) ?
64 : (1<<SpectrumSettings::m_log2FFTSizeMin) :
settings.m_fftSize; settings.m_fftSize;
qDebug() << "SpectrumVis::applySettings:" qDebug() << "SpectrumVis::applySettings:"
@ -808,6 +806,13 @@ void SpectrumVis::applySettings(const SpectrumSettings& settings, bool force)
m_fftEngineSequence = fftFactory->getEngine(fftSize, false, &m_fft); m_fftEngineSequence = fftFactory->getEngine(fftSize, false, &m_fft);
m_ofs = 20.0f * log10f(1.0f / fftSize); m_ofs = 20.0f * log10f(1.0f / fftSize);
m_powFFTDiv = fftSize * fftSize; m_powFFTDiv = fftSize * fftSize;
if (fftSize > m_settings.m_fftSize)
{
m_fftBuffer.resize(fftSize);
m_powerSpectrum.resize(fftSize);
m_psd.resize(fftSize);
}
} }
if ((fftSize != m_settings.m_fftSize) if ((fftSize != m_settings.m_fftSize)

View File

@ -138,11 +138,11 @@ void GLSpectrumGUI::displaySettings()
ui->fftWindow->setCurrentIndex(m_settings.m_fftWindow); ui->fftWindow->setCurrentIndex(m_settings.m_fftWindow);
for (int i = 0; i < 6; i++) for (int i = SpectrumSettings::m_log2FFTSizeMin; i <= SpectrumSettings::m_log2FFTSizeMax; i++)
{ {
if (m_settings.m_fftSize == (1 << (i + 7))) if (m_settings.m_fftSize == (1 << i))
{ {
ui->fftSize->setCurrentIndex(i); ui->fftSize->setCurrentIndex(i - SpectrumSettings::m_log2FFTSizeMin);
break; break;
} }
} }
@ -236,7 +236,7 @@ void GLSpectrumGUI::on_fftWindow_currentIndexChanged(int index)
void GLSpectrumGUI::on_fftSize_currentIndexChanged(int index) void GLSpectrumGUI::on_fftSize_currentIndexChanged(int index)
{ {
qDebug("GLSpectrumGUI::on_fftSize_currentIndexChanged: %d", index); qDebug("GLSpectrumGUI::on_fftSize_currentIndexChanged: %d", index);
m_settings.m_fftSize = 1 << (7 + index); m_settings.m_fftSize = 1 << (SpectrumSettings::m_log2FFTSizeMin + index);
setMaximumOverlap(); setMaximumOverlap();
applySettings(); applySettings();
setAveragingToolitp(); setAveragingToolitp();
@ -576,7 +576,13 @@ void GLSpectrumGUI::setAveragingToolitp()
void GLSpectrumGUI::setFFTSize(int log2FFTSize) void GLSpectrumGUI::setFFTSize(int log2FFTSize)
{ {
ui->fftSize->setCurrentIndex(log2FFTSize < 7 ? 0 : log2FFTSize > 12 ? 5 : log2FFTSize - 7); // 128 to 4096 in powers of 2 ui->fftSize->setCurrentIndex(
log2FFTSize < SpectrumSettings::m_log2FFTSizeMin ?
0
: log2FFTSize > SpectrumSettings::m_log2FFTSizeMax ?
SpectrumSettings::m_log2FFTSizeMax - SpectrumSettings::m_log2FFTSizeMin
: log2FFTSize - SpectrumSettings::m_log2FFTSizeMin
);
} }
void GLSpectrumGUI::setMaximumOverlap() void GLSpectrumGUI::setMaximumOverlap()

View File

@ -129,6 +129,11 @@
<property name="sizeAdjustPolicy"> <property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum> <enum>QComboBox::AdjustToContents</enum>
</property> </property>
<item>
<property name="text">
<string>64</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>128</string> <string>128</string>
@ -159,6 +164,11 @@
<string>4k</string> <string>4k</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>8k</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item> <item>