mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-09-29 16:26:47 -04:00
Spectrum: set overlap by value not by percentage
This commit is contained in:
parent
f541b53454
commit
84c26e9678
@ -60,7 +60,7 @@ QByteArray GLSpectrumSettings::serialize() const
|
|||||||
{
|
{
|
||||||
SimpleSerializer s(1);
|
SimpleSerializer s(1);
|
||||||
|
|
||||||
s.writeU32(1, m_fftSize);
|
s.writeS32(1, m_fftSize);
|
||||||
s.writeS32(2, m_fftOverlap);
|
s.writeS32(2, m_fftOverlap);
|
||||||
s.writeS32(3, (int) m_fftWindow);
|
s.writeS32(3, (int) m_fftWindow);
|
||||||
s.writeReal(4, m_refLevel);
|
s.writeReal(4, m_refLevel);
|
||||||
@ -102,7 +102,7 @@ bool GLSpectrumSettings::deserialize(const QByteArray& data)
|
|||||||
|
|
||||||
if (d.getVersion() == 1)
|
if (d.getVersion() == 1)
|
||||||
{
|
{
|
||||||
d.readU32(1, &m_fftSize, 1024);
|
d.readS32(1, &m_fftSize, 1024);
|
||||||
d.readS32(2, &m_fftOverlap, 0);
|
d.readS32(2, &m_fftOverlap, 0);
|
||||||
d.readS32(3, &tmp, (int) FFTWindow::Hanning);
|
d.readS32(3, &tmp, (int) FFTWindow::Hanning);
|
||||||
m_fftWindow = (FFTWindow::Function) tmp;
|
m_fftWindow = (FFTWindow::Function) tmp;
|
||||||
|
@ -36,7 +36,7 @@ public:
|
|||||||
AvgModeMax
|
AvgModeMax
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int m_fftSize;
|
int m_fftSize;
|
||||||
int m_fftOverlap;
|
int m_fftOverlap;
|
||||||
FFTWindow::Function m_fftWindow;
|
FFTWindow::Function m_fftWindow;
|
||||||
Real m_refLevel;
|
Real m_refLevel;
|
||||||
|
@ -123,9 +123,9 @@ void SpectrumVis::feed(const Complex *begin, unsigned int length)
|
|||||||
|
|
||||||
if (m_settings.m_averagingMode == GLSpectrumSettings::AvgModeNone)
|
if (m_settings.m_averagingMode == GLSpectrumSettings::AvgModeNone)
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < m_settings.m_fftSize; i++)
|
for (int i = 0; i < m_settings.m_fftSize; i++)
|
||||||
{
|
{
|
||||||
if (i < length) {
|
if (i < (int) length) {
|
||||||
c = begin[i];
|
c = begin[i];
|
||||||
} else {
|
} else {
|
||||||
c = Complex{0,0};
|
c = Complex{0,0};
|
||||||
@ -157,9 +157,9 @@ void SpectrumVis::feed(const Complex *begin, unsigned int length)
|
|||||||
}
|
}
|
||||||
else if (m_settings.m_averagingMode == GLSpectrumSettings::AvgModeMoving)
|
else if (m_settings.m_averagingMode == GLSpectrumSettings::AvgModeMoving)
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < m_settings.m_fftSize; i++)
|
for (int i = 0; i < m_settings.m_fftSize; i++)
|
||||||
{
|
{
|
||||||
if (i < length) {
|
if (i < (int) length) {
|
||||||
c = begin[i];
|
c = begin[i];
|
||||||
} else {
|
} else {
|
||||||
c = Complex{0,0};
|
c = Complex{0,0};
|
||||||
@ -196,9 +196,9 @@ void SpectrumVis::feed(const Complex *begin, unsigned int length)
|
|||||||
{
|
{
|
||||||
double avg;
|
double avg;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < m_settings.m_fftSize; i++)
|
for (int i = 0; i < m_settings.m_fftSize; i++)
|
||||||
{
|
{
|
||||||
if (i < length) {
|
if (i < (int) length) {
|
||||||
c = begin[i];
|
c = begin[i];
|
||||||
} else {
|
} else {
|
||||||
c = Complex{0,0};
|
c = Complex{0,0};
|
||||||
@ -241,9 +241,9 @@ void SpectrumVis::feed(const Complex *begin, unsigned int length)
|
|||||||
{
|
{
|
||||||
double max;
|
double max;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < m_settings.m_fftSize; i++)
|
for (int i = 0; i < m_settings.m_fftSize; i++)
|
||||||
{
|
{
|
||||||
if (i < length) {
|
if (i < (int) length) {
|
||||||
c = begin[i];
|
c = begin[i];
|
||||||
} else {
|
} else {
|
||||||
c = Complex{0,0};
|
c = Complex{0,0};
|
||||||
@ -690,22 +690,16 @@ void SpectrumVis::applySettings(const GLSpectrumSettings& settings, bool force)
|
|||||||
{
|
{
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
QMutexLocker mutexLocker(&m_mutex);
|
||||||
|
|
||||||
unsigned int fftSize = settings.m_fftSize > MAX_FFT_SIZE ?
|
int fftSize = settings.m_fftSize > MAX_FFT_SIZE ?
|
||||||
MAX_FFT_SIZE :
|
MAX_FFT_SIZE :
|
||||||
settings.m_fftSize < 64 ?
|
settings.m_fftSize < 64 ?
|
||||||
64 :
|
64 :
|
||||||
settings.m_fftSize;
|
settings.m_fftSize;
|
||||||
|
|
||||||
int overlapPercent = settings.m_fftOverlap > 100 ?
|
|
||||||
100 :
|
|
||||||
settings.m_fftOverlap < 0 ?
|
|
||||||
0 :
|
|
||||||
settings.m_fftOverlap;
|
|
||||||
|
|
||||||
qDebug() << "SpectrumVis::applySettings:"
|
qDebug() << "SpectrumVis::applySettings:"
|
||||||
<< " m_fftSize: " << fftSize
|
<< " m_fftSize: " << fftSize
|
||||||
<< " m_fftWindow: " << settings.m_fftWindow
|
<< " m_fftWindow: " << settings.m_fftWindow
|
||||||
<< " m_fftOverlap: " << overlapPercent
|
<< " m_fftOverlap: " << settings.m_fftOverlap
|
||||||
<< " m_averagingIndex: " << settings.m_averagingIndex
|
<< " m_averagingIndex: " << settings.m_averagingIndex
|
||||||
<< " m_averagingMode: " << settings.m_averagingMode
|
<< " m_averagingMode: " << settings.m_averagingMode
|
||||||
<< " m_refLevel: " << settings.m_refLevel
|
<< " m_refLevel: " << settings.m_refLevel
|
||||||
@ -738,9 +732,10 @@ void SpectrumVis::applySettings(const GLSpectrumSettings& settings, bool force)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((fftSize != m_settings.m_fftSize)
|
if ((fftSize != m_settings.m_fftSize)
|
||||||
|| (overlapPercent != m_settings.m_fftOverlap) || force)
|
|| (settings.m_fftOverlap != m_settings.m_fftOverlap) || force)
|
||||||
{
|
{
|
||||||
m_overlapSize = (fftSize * overlapPercent) / 100;
|
m_overlapSize = settings.m_fftOverlap >= fftSize ? fftSize - 1 :
|
||||||
|
settings.m_fftOverlap < 0 ? 0 : settings.m_fftOverlap;
|
||||||
m_refillSize = fftSize - m_overlapSize;
|
m_refillSize = fftSize - m_overlapSize;
|
||||||
m_fftBufferFill = m_overlapSize;
|
m_fftBufferFill = m_overlapSize;
|
||||||
}
|
}
|
||||||
@ -762,7 +757,6 @@ void SpectrumVis::applySettings(const GLSpectrumSettings& settings, bool force)
|
|||||||
|
|
||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
m_settings.m_fftSize = fftSize;
|
m_settings.m_fftSize = fftSize;
|
||||||
m_settings.m_fftOverlap = overlapPercent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumVis::handleConfigureDSP(uint64_t centerFrequency, int sampleRate)
|
void SpectrumVis::handleConfigureDSP(uint64_t centerFrequency, int sampleRate)
|
||||||
|
@ -190,9 +190,9 @@ private:
|
|||||||
std::vector<Real> m_powerSpectrum;
|
std::vector<Real> m_powerSpectrum;
|
||||||
|
|
||||||
GLSpectrumSettings m_settings;
|
GLSpectrumSettings m_settings;
|
||||||
std::size_t m_overlapSize;
|
int m_overlapSize;
|
||||||
std::size_t m_refillSize;
|
int m_refillSize;
|
||||||
std::size_t m_fftBufferFill;
|
int m_fftBufferFill;
|
||||||
bool m_needMoreSamples;
|
bool m_needMoreSamples;
|
||||||
|
|
||||||
Real m_scalef;
|
Real m_scalef;
|
||||||
|
Loading…
Reference in New Issue
Block a user