diff --git a/plugins/channel/nfm/nfmdemod.cpp b/plugins/channel/nfm/nfmdemod.cpp index c64298ba1..edd352e68 100644 --- a/plugins/channel/nfm/nfmdemod.cpp +++ b/plugins/channel/nfm/nfmdemod.cpp @@ -80,7 +80,8 @@ void NFMDemod::feed(SampleVector::const_iterator begin, SampleVector::const_iter demod = m_volume * m_lowpass.filter(demod); sample = demod * 32767; - if (!(framedrop & 3)) + // Display audio spectrum to 12kHz + if (!(framedrop & 1)) m_sampleBuffer.push_back(Sample(sample, sample)); if(m_squelchState > 0) diff --git a/plugins/channel/nfm/nfmdemodgui.cpp b/plugins/channel/nfm/nfmdemodgui.cpp index 0b314fafd..ed022220e 100644 --- a/plugins/channel/nfm/nfmdemodgui.cpp +++ b/plugins/channel/nfm/nfmdemodgui.cpp @@ -163,7 +163,7 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, QWidget* parent) : m_pluginAPI->addAudioSource(m_audioFifo); m_pluginAPI->addSampleSink(m_threadedSampleSink); - ui->glSpectrum->setCenterFrequency(0); + ui->glSpectrum->setCenterFrequency(6000); ui->glSpectrum->setSampleRate(12000); ui->glSpectrum->setDisplayWaterfall(true); ui->glSpectrum->setDisplayMaxHold(true); diff --git a/plugins/channel/ssb/ssbdemodgui.cpp b/plugins/channel/ssb/ssbdemodgui.cpp index a861e10b2..46544d649 100644 --- a/plugins/channel/ssb/ssbdemodgui.cpp +++ b/plugins/channel/ssb/ssbdemodgui.cpp @@ -137,11 +137,10 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, QWidget* parent) : m_pluginAPI->addAudioSource(m_audioFifo); m_pluginAPI->addSampleSink(m_threadedSampleSink); - ui->glSpectrum->setCenterFrequency(0); - ui->glSpectrum->setSampleRate(12000); + ui->glSpectrum->setCenterFrequency(3000); + ui->glSpectrum->setSampleRate(6000); ui->glSpectrum->setDisplayWaterfall(true); ui->glSpectrum->setDisplayMaxHold(true); - m_spectrumVis->configure(m_threadedSampleSink->getMessageQueue(), 64, 10, FFTWindow::BlackmanHarris); m_channelMarker = new ChannelMarker(this); m_channelMarker->setColor(Qt::red); diff --git a/sdrbase/dsp/spectrumvis.cpp b/sdrbase/dsp/spectrumvis.cpp index 1bc9a43f4..21fcc1efd 100644 --- a/sdrbase/dsp/spectrumvis.cpp +++ b/sdrbase/dsp/spectrumvis.cpp @@ -60,19 +60,30 @@ void SpectrumVis::feed(SampleVector::const_iterator begin, SampleVector::const_i Real ofs = 20.0f * log10f(1.0f / m_fftSize); Real mult = (10.0f / log2f(10.0f)); const Complex* fftOut = m_fft->out(); - size_t spectrumStart = 0; + Complex c; + Real v; + size_t halfSize = m_fftSize / 2; if ( positiveOnly ) { - Real logZero = ofs + mult * log2f( 0 ); - for(size_t i = 0; i < m_fftSize / 2; i++) - m_logPowerSpectrum[i] = logZero; - spectrumStart = m_fftSize / 2; - } - for(size_t i = spectrumStart; i < m_fftSize; i++) { - Complex c = fftOut[((i + (m_fftSize >> 1)) & (m_fftSize - 1))]; - Real v = c.real() * c.real() + c.imag() * c.imag(); - v = mult * log2f(v) + ofs; - m_logPowerSpectrum[i] = v; + for(size_t i = 0; i < halfSize; i++) { + c = fftOut[i]; + v = c.real() * c.real() + c.imag() * c.imag(); + v = mult * log2f(v) + ofs; + m_logPowerSpectrum[i * 2] = v; + m_logPowerSpectrum[i * 2 + 1] = v; + } + } else { + for(size_t i = 0; i < halfSize; i++) { + c = fftOut[i + halfSize]; + v = c.real() * c.real() + c.imag() * c.imag(); + v = mult * log2f(v) + ofs; + m_logPowerSpectrum[i] = v; + + c = fftOut[i]; + v = c.real() * c.real() + c.imag() * c.imag(); + v = mult * log2f(v) + ofs; + m_logPowerSpectrum[i + halfSize] = v; + } } // send new data to visualisation