mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-06-03 06:24:48 -04:00
Spectrum averaging (2): moving average
This commit is contained in:
@@ -25,10 +25,12 @@ SpectrumVis::SpectrumVis(Real scalef, GLSpectrum* glSpectrum) :
|
||||
m_needMoreSamples(false),
|
||||
m_scalef(scalef),
|
||||
m_glSpectrum(glSpectrum),
|
||||
m_averageNb(0),
|
||||
m_ofs(0),
|
||||
m_mutex(QMutex::Recursive)
|
||||
{
|
||||
setObjectName("SpectrumVis");
|
||||
handleConfigure(1024, 0, FFTWindow::BlackmanHarris);
|
||||
handleConfigure(1024, 0, 0, FFTWindow::BlackmanHarris);
|
||||
}
|
||||
|
||||
SpectrumVis::~SpectrumVis()
|
||||
@@ -36,9 +38,9 @@ SpectrumVis::~SpectrumVis()
|
||||
delete m_fft;
|
||||
}
|
||||
|
||||
void SpectrumVis::configure(MessageQueue* msgQueue, int fftSize, int overlapPercent, FFTWindow::Function window)
|
||||
void SpectrumVis::configure(MessageQueue* msgQueue, int fftSize, int overlapPercent, unsigned int averagingNb, FFTWindow::Function window)
|
||||
{
|
||||
MsgConfigureSpectrumVis* cmd = new MsgConfigureSpectrumVis(fftSize, overlapPercent, window);
|
||||
MsgConfigureSpectrumVis* cmd = new MsgConfigureSpectrumVis(fftSize, overlapPercent, averagingNb, window);
|
||||
msgQueue->push(cmd);
|
||||
}
|
||||
|
||||
@@ -171,7 +173,7 @@ bool SpectrumVis::handleMessage(const Message& message)
|
||||
if (MsgConfigureSpectrumVis::match(message))
|
||||
{
|
||||
MsgConfigureSpectrumVis& conf = (MsgConfigureSpectrumVis&) message;
|
||||
handleConfigure(conf.getFFTSize(), conf.getOverlapPercent(), conf.getWindow());
|
||||
handleConfigure(conf.getFFTSize(), conf.getOverlapPercent(), conf.getAverageNb(), conf.getWindow());
|
||||
return true;
|
||||
}
|
||||
else
|
||||
@@ -180,7 +182,7 @@ bool SpectrumVis::handleMessage(const Message& message)
|
||||
}
|
||||
}
|
||||
|
||||
void SpectrumVis::handleConfigure(int fftSize, int overlapPercent, FFTWindow::Function window)
|
||||
void SpectrumVis::handleConfigure(int fftSize, int overlapPercent, unsigned int averageNb, FFTWindow::Function window)
|
||||
{
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
|
||||
@@ -212,7 +214,7 @@ void SpectrumVis::handleConfigure(int fftSize, int overlapPercent, FFTWindow::Fu
|
||||
m_overlapSize = (m_fftSize * m_overlapPercent) / 100;
|
||||
m_refillSize = m_fftSize - m_overlapSize;
|
||||
m_fftBufferFill = m_overlapSize;
|
||||
m_average.resize(fftSize, 10);
|
||||
m_averageNb = 100;
|
||||
m_average.resize(fftSize, averageNb);
|
||||
m_averageNb = averageNb;
|
||||
m_ofs = 20.0f * log10f(1.0f / m_fftSize);
|
||||
}
|
||||
|
||||
@@ -19,27 +19,30 @@ public:
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
||||
public:
|
||||
MsgConfigureSpectrumVis(int fftSize, int overlapPercent, FFTWindow::Function window) :
|
||||
MsgConfigureSpectrumVis(int fftSize, int overlapPercent, unsigned int averageNb, FFTWindow::Function window) :
|
||||
Message(),
|
||||
m_fftSize(fftSize),
|
||||
m_overlapPercent(overlapPercent),
|
||||
m_averageNb(averageNb),
|
||||
m_window(window)
|
||||
{ }
|
||||
|
||||
int getFFTSize() const { return m_fftSize; }
|
||||
int getOverlapPercent() const { return m_overlapPercent; }
|
||||
unsigned int getAverageNb() const { return m_averageNb; }
|
||||
FFTWindow::Function getWindow() const { return m_window; }
|
||||
|
||||
private:
|
||||
int m_fftSize;
|
||||
int m_overlapPercent;
|
||||
unsigned int m_averageNb;
|
||||
FFTWindow::Function m_window;
|
||||
};
|
||||
|
||||
SpectrumVis(Real scalef, GLSpectrum* glSpectrum = 0);
|
||||
virtual ~SpectrumVis();
|
||||
|
||||
void configure(MessageQueue* msgQueue, int fftSize, int overlapPercent, FFTWindow::Function window);
|
||||
void configure(MessageQueue* msgQueue, int fftSize, int overlapPercent, unsigned int averagingNb, FFTWindow::Function window);
|
||||
|
||||
virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly);
|
||||
void feedTriggered(const SampleVector::const_iterator& triggerPoint, const SampleVector::const_iterator& end, bool positiveOnly);
|
||||
@@ -71,7 +74,7 @@ private:
|
||||
|
||||
QMutex m_mutex;
|
||||
|
||||
void handleConfigure(int fftSize, int overlapPercent, FFTWindow::Function window);
|
||||
void handleConfigure(int fftSize, int overlapPercent, unsigned int averageNb, FFTWindow::Function window);
|
||||
};
|
||||
|
||||
#endif // INCLUDE_SPECTRUMVIS_H
|
||||
|
||||
Reference in New Issue
Block a user