1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-13 19:28:41 -04:00

FFT factory: implementation base

This commit is contained in:
f4exb
2020-03-12 06:27:38 +01:00
parent 8e8323e925
commit 926f45d9fb
14 changed files with 244 additions and 12 deletions
+9 -3
View File
@@ -1,6 +1,8 @@
#include "dsp/spectrumvis.h"
#include "gui/glspectrum.h"
#include "dsp/dspcommands.h"
#include "dsp/dspengine.h"
#include "dsp/fftfactory.h"
#include "util/messagequeue.h"
#define MAX_FFT_SIZE 4096
@@ -19,7 +21,8 @@ const Real SpectrumVis::m_mult = (10.0f / log2f(10.0f));
SpectrumVis::SpectrumVis(Real scalef, GLSpectrum* glSpectrum) :
BasebandSampleSink(),
m_fft(FFTEngine::create()),
m_fft(nullptr),
m_fftEngineSequence(0),
m_fftBuffer(MAX_FFT_SIZE),
m_powerSpectrum(MAX_FFT_SIZE),
m_fftBufferFill(0),
@@ -39,7 +42,8 @@ SpectrumVis::SpectrumVis(Real scalef, GLSpectrum* glSpectrum) :
SpectrumVis::~SpectrumVis()
{
delete m_fft;
FFTFactory *fftFactory = DSPEngine::instance()->getFFTFactory();
fftFactory->releaseEngine(m_fftSize, false, m_fftEngineSequence);
}
void SpectrumVis::configure(MessageQueue* msgQueue,
@@ -374,8 +378,10 @@ void SpectrumVis::handleConfigure(int fftSize,
m_overlapPercent = overlapPercent;
}
FFTFactory *fftFactory = DSPEngine::instance()->getFFTFactory();
fftFactory->releaseEngine(m_fftSize, false, m_fftEngineSequence);
m_fftEngineSequence = fftFactory->getEngine(fftSize, false, &m_fft);
m_fftSize = fftSize;
m_fft->configure(m_fftSize, false);
m_window.create(window, m_fftSize);
m_overlapSize = (m_fftSize * m_overlapPercent) / 100;
m_refillSize = m_fftSize - m_overlapSize;