mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2026-06-02 14:04:47 -04:00
Clean up redundant internal FFTW3 support; liquid-dsp will use FFTW3 if compiled in.
This commit is contained in:
@@ -9,42 +9,19 @@ ScopeVisualProcessor::ScopeVisualProcessor(): outputBuffers("ScopeVisualProcesso
|
||||
fft_ceil_ma = fft_ceil_maa = 0;
|
||||
fft_floor_ma = fft_floor_maa = 0;
|
||||
maxScopeSamples = 1024;
|
||||
#if USE_FFTW3
|
||||
fftw_plan = nullptr;
|
||||
#else
|
||||
fftPlan = nullptr;
|
||||
#endif
|
||||
}
|
||||
|
||||
ScopeVisualProcessor::~ScopeVisualProcessor() {
|
||||
#if USE_FFTW3
|
||||
if (fftw_plan) {
|
||||
fftwf_destroy_plan(fftw_plan);
|
||||
}
|
||||
|
||||
#else
|
||||
if (fftPlan) {
|
||||
fft_destroy_plan(fftPlan);
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void ScopeVisualProcessor::setup(int fftSize_in) {
|
||||
fftSize = fftSize_in;
|
||||
desiredInputSize = fftSize;
|
||||
|
||||
#if USE_FFTW3
|
||||
|
||||
fftInData.resize(fftSize);
|
||||
fftwOutput.resize(fftSize);
|
||||
|
||||
if (fftw_plan) {
|
||||
fftwf_destroy_plan(fftw_plan);
|
||||
}
|
||||
fftw_plan = fftwf_plan_dft_r2c_1d(fftSize, fftInData.data(), fftwOutput.data(), FFTW_ESTIMATE);
|
||||
#else
|
||||
|
||||
fftInData.resize(fftSize);
|
||||
fftOutput.resize(fftSize);
|
||||
@@ -53,7 +30,6 @@ void ScopeVisualProcessor::setup(int fftSize_in) {
|
||||
fft_destroy_plan(fftPlan);
|
||||
}
|
||||
fftPlan = fft_create_plan(fftSize, fftInData.data(), fftOutput.data(), LIQUID_FFT_FORWARD, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void ScopeVisualProcessor::setScopeEnabled(bool scopeEnable) {
|
||||
@@ -142,26 +118,6 @@ void ScopeVisualProcessor::process() {
|
||||
if (spectrumEnabled) {
|
||||
iMax = audioInputData->data.size();
|
||||
|
||||
#if USE_FFTW3
|
||||
if (audioInputData->channels==1) {
|
||||
for (i = 0; i < fftSize; i++) {
|
||||
if (i < iMax) {
|
||||
fftInData[i] = audioInputData->data[i];
|
||||
} else {
|
||||
fftInData[i] = 0;
|
||||
}
|
||||
}
|
||||
} else if (audioInputData->channels==2) {
|
||||
iMax = iMax/2;
|
||||
for (i = 0; i < fftSize; i++) {
|
||||
if (i < iMax) {
|
||||
fftInData[i] = audioInputData->data[i] + audioInputData->data[iMax+i];
|
||||
} else {
|
||||
fftInData[i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (audioInputData->channels==1) {
|
||||
for (i = 0; i < fftSize; i++) {
|
||||
if (i < iMax) {
|
||||
@@ -184,7 +140,6 @@ void ScopeVisualProcessor::process() {
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
renderData = outputBuffers.getBuffer();
|
||||
|
||||
@@ -202,19 +157,6 @@ void ScopeVisualProcessor::process() {
|
||||
fft_result_maa.resize((fftSize/2));
|
||||
}
|
||||
|
||||
#if USE_FFTW3
|
||||
fftwf_execute(fftw_plan);
|
||||
|
||||
for (i = 0; i < (fftSize/2); i++) {
|
||||
//cast result to double to prevent overflows / excessive precision losses in the following computations...
|
||||
double a = (double) fftwOutput[i][0];
|
||||
double b = (double) fftwOutput[i][1];
|
||||
|
||||
//computes norm = sqrt(a**2 + b**2)
|
||||
//being actually floats cast into doubles, we are indeed overflow-free here.
|
||||
fft_result[i] = sqrt(a*a + b*b);
|
||||
}
|
||||
#else
|
||||
fft_execute(fftPlan);
|
||||
for (i = 0; i < (fftSize/2); i++) {
|
||||
|
||||
@@ -226,7 +168,6 @@ void ScopeVisualProcessor::process() {
|
||||
//being actually floats cast into doubles, we are indeed overflow-free here.
|
||||
fft_result[i] = sqrt(a*a + b*b);
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = 0; i < (fftSize/2); i++) {
|
||||
fft_result_ma[i] += (fft_result[i] - fft_result_ma[i]) * fft_average_rate;
|
||||
|
||||
@@ -4,10 +4,6 @@
|
||||
#include "AudioThread.h"
|
||||
#include "ScopePanel.h"
|
||||
|
||||
#if USE_FFTW3
|
||||
#include "fftw3.h"
|
||||
#endif
|
||||
|
||||
class ScopeRenderData: public ReferenceCounter {
|
||||
public:
|
||||
std::vector<float> waveform_points;
|
||||
@@ -36,15 +32,9 @@ protected:
|
||||
std::atomic_bool scopeEnabled;
|
||||
std::atomic_bool spectrumEnabled;
|
||||
|
||||
#if USE_FFTW3
|
||||
std::vector<float> fftInData;
|
||||
std::vector<fftwf_complex> fftwOutput;
|
||||
std::vector<fftwf_plan> fftw_plan;
|
||||
#else
|
||||
std::vector<liquid_float_complex> fftInData;
|
||||
std::vector<liquid_float_complex> fftOutput;
|
||||
fftplan fftPlan;
|
||||
#endif
|
||||
|
||||
unsigned int fftSize;
|
||||
int desiredInputSize;
|
||||
|
||||
@@ -9,19 +9,11 @@ SpectrumVisualProcessor::SpectrumVisualProcessor() : outputBuffers("SpectrumVisu
|
||||
resampler = nullptr;
|
||||
resamplerRatio = 0;
|
||||
|
||||
#if USE_FFTW3
|
||||
fftwInput = nullptr;
|
||||
fftwOutput = nullptr;
|
||||
fftInData = nullptr;
|
||||
fftLastData = nullptr;
|
||||
fftw_plan = nullptr;
|
||||
#else
|
||||
fftInput = nullptr;
|
||||
fftOutput = nullptr;
|
||||
fftInData = nullptr;
|
||||
fftLastData = nullptr;
|
||||
fftPlan = nullptr;
|
||||
#endif
|
||||
|
||||
is_view.store(false);
|
||||
fftSize.store(0);
|
||||
@@ -129,42 +121,6 @@ void SpectrumVisualProcessor::setup(unsigned int fftSize_in) {
|
||||
fftSizeInternal = fftSize_in * SPECTRUM_VZM;
|
||||
lastDataSize = 0;
|
||||
|
||||
#if USE_FFTW3
|
||||
int memSize = sizeof(fftwf_complex) * fftSizeInternal;
|
||||
|
||||
if (fftwInput) {
|
||||
free(fftwInput);
|
||||
}
|
||||
//fftwInput = (fftwf_complex*) fftwf_malloc(memSize);
|
||||
fftwInput = (fftwf_complex*)malloc(memSize);
|
||||
memset(fftwInput,0,memSize);
|
||||
|
||||
if (fftInData) {
|
||||
free(fftInData);
|
||||
}
|
||||
//fftInData = (fftwf_complex*) fftwf_malloc(memSize);
|
||||
fftInData = (fftwf_complex*)malloc(memSize);
|
||||
memset(fftwInput,0,memSize);
|
||||
|
||||
if (fftLastData) {
|
||||
free(fftLastData);
|
||||
}
|
||||
//fftLastData = (fftwf_complex*) fftwf_malloc(memSize);
|
||||
fftLastData = (fftwf_complex*)malloc(memSize);
|
||||
memset(fftwInput,0,memSize);
|
||||
|
||||
if (fftwOutput) {
|
||||
free(fftwOutput);
|
||||
}
|
||||
//fftwOutput = (fftwf_complex*) fftwf_malloc(memSize);
|
||||
fftwOutput = (fftwf_complex*)malloc(memSize);
|
||||
memset(fftwInput,0,memSize);
|
||||
|
||||
if (fftw_plan) {
|
||||
fftwf_destroy_plan(fftw_plan);
|
||||
}
|
||||
fftw_plan = fftwf_plan_dft_1d(fftSizeInternal, fftwInput, fftwOutput, FFTW_FORWARD, FFTW_ESTIMATE);
|
||||
#else
|
||||
int memSize = sizeof(liquid_float_complex) * fftSizeInternal;
|
||||
|
||||
if (fftInput) {
|
||||
@@ -195,7 +151,6 @@ void SpectrumVisualProcessor::setup(unsigned int fftSize_in) {
|
||||
fft_destroy_plan(fftPlan);
|
||||
}
|
||||
fftPlan = fft_create_plan(fftSizeInternal, fftInput, fftOutput, LIQUID_FFT_FORWARD, 0);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
@@ -385,85 +340,26 @@ void SpectrumVisualProcessor::process() {
|
||||
|
||||
msresamp_crcf_execute(resampler, &shiftBuffer[0], desired_input_size, &resampleBuffer[0], &num_written);
|
||||
|
||||
#if USE_FFTW3
|
||||
if (num_written < fftSizeInternal) {
|
||||
for (unsigned int i = 0; i < num_written; i++) {
|
||||
fftInData[i][0] = resampleBuffer[i].real;
|
||||
fftInData[i][1] = resampleBuffer[i].imag;
|
||||
}
|
||||
for (unsigned int i = num_written; i < fftSizeInternal; i++) {
|
||||
fftInData[i][0] = 0;
|
||||
fftInData[i][1] = 0;
|
||||
}
|
||||
} else {
|
||||
for (unsigned int i = 0; i < fftSizeInternal; i++) {
|
||||
fftInData[i][0] = resampleBuffer[i].real;
|
||||
fftInData[i][1] = resampleBuffer[i].imag;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (num_written < fftSizeInternal) {
|
||||
memcpy(fftInData, resampleBuffer.data(), num_written * sizeof(liquid_float_complex));
|
||||
memset(&(fftInData[num_written]), 0, (fftSizeInternal-num_written) * sizeof(liquid_float_complex));
|
||||
} else {
|
||||
memcpy(fftInData, resampleBuffer.data(), fftSizeInternal * sizeof(liquid_float_complex));
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
this->desiredInputSize.store(fftSizeInternal);
|
||||
|
||||
num_written = data->size();
|
||||
#if USE_FFTW3
|
||||
if (data->size() < fftSizeInternal) {
|
||||
for (size_t i = 0, iMax = data->size(); i < iMax; i++) {
|
||||
fftInData[i][0] = (*data)[i].real;
|
||||
fftInData[i][1] = (*data)[i].imag;
|
||||
}
|
||||
for (size_t i = data->size(); i < fftSizeInternal; i++) {
|
||||
fftInData[i][0] = 0;
|
||||
fftInData[i][1] = 0;
|
||||
}
|
||||
} else {
|
||||
for (unsigned int i = 0; i < fftSizeInternal; i++) {
|
||||
fftInData[i][0] = (*data)[i].real;
|
||||
fftInData[i][1] = (*data)[i].imag;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (data->size() < fftSizeInternal) {
|
||||
memcpy(fftInData, data->data(), data->size() * sizeof(liquid_float_complex));
|
||||
memset(&fftInData[data->size()], 0, (fftSizeInternal - data->size()) * sizeof(liquid_float_complex));
|
||||
} else {
|
||||
memcpy(fftInData, data->data(), fftSizeInternal * sizeof(liquid_float_complex));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool execute = false;
|
||||
|
||||
#if USE_FFTW3
|
||||
if (num_written >= fftSizeInternal) {
|
||||
execute = true;
|
||||
memcpy(fftwInput, fftInData, fftSizeInternal * sizeof(fftwf_complex));
|
||||
memcpy(fftLastData, fftwInput, fftSizeInternal * sizeof(fftwf_complex));
|
||||
|
||||
} else {
|
||||
if (lastDataSize + num_written < fftSizeInternal) { // priming
|
||||
unsigned int num_copy = fftSizeInternal - lastDataSize;
|
||||
if (num_written > num_copy) {
|
||||
num_copy = num_written;
|
||||
}
|
||||
memcpy(fftLastData, fftInData, num_copy * sizeof(fftwf_complex));
|
||||
lastDataSize += num_copy;
|
||||
} else {
|
||||
unsigned int num_last = (fftSizeInternal - num_written);
|
||||
memcpy(fftwInput, fftLastData + (lastDataSize - num_last), num_last * sizeof(fftwf_complex));
|
||||
memcpy(fftwInput + num_last, fftInData, num_written * sizeof(fftwf_complex));
|
||||
memcpy(fftLastData, fftwInput, fftSizeInternal * sizeof(fftwf_complex));
|
||||
execute = true;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (num_written >= fftSizeInternal) {
|
||||
execute = true;
|
||||
memcpy(fftInput, fftInData, fftSizeInternal * sizeof(liquid_float_complex));
|
||||
@@ -485,7 +381,6 @@ void SpectrumVisualProcessor::process() {
|
||||
execute = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (execute) {
|
||||
SpectrumVisualData *output = outputBuffers.getBuffer();
|
||||
@@ -503,22 +398,6 @@ void SpectrumVisualProcessor::process() {
|
||||
|
||||
float fft_ceil = 0, fft_floor = 1;
|
||||
|
||||
#if USE_FFTW3
|
||||
fftwf_execute(fftw_plan);
|
||||
|
||||
for (int i = 0, iMax = fftSizeInternal / 2; i < iMax; i++) {
|
||||
float a = fftwOutput[i][0];
|
||||
float b = fftwOutput[i][1];
|
||||
float c = sqrt(a * a + b * b);
|
||||
|
||||
float x = fftwOutput[fftSizeInternal / 2 + i][0];
|
||||
float y = fftwOutput[fftSizeInternal / 2 + i][1];
|
||||
float z = sqrt(x * x + y * y);
|
||||
|
||||
fft_result[i] = (z);
|
||||
fft_result[fftSizeInternal / 2 + i] = (c);
|
||||
}
|
||||
#else
|
||||
fft_execute(fftPlan);
|
||||
|
||||
for (int i = 0, iMax = fftSizeInternal / 2; i < iMax; i++) {
|
||||
@@ -533,7 +412,6 @@ void SpectrumVisualProcessor::process() {
|
||||
fft_result[i] = (z);
|
||||
fft_result[fftSizeInternal / 2 + i] = (c);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (newResampler && lastView) {
|
||||
if (bwDiff < 0) {
|
||||
|
||||
@@ -4,10 +4,6 @@
|
||||
#include "DemodDefs.h"
|
||||
#include <cmath>
|
||||
|
||||
#if USE_FFTW3
|
||||
#include "fftw3.h"
|
||||
#endif
|
||||
|
||||
#define SPECTRUM_VZM 2
|
||||
#define PEAK_RESET_COUNT 30
|
||||
|
||||
@@ -68,13 +64,8 @@ private:
|
||||
long lastBandwidth;
|
||||
bool lastView;
|
||||
|
||||
#if USE_FFTW3
|
||||
fftwf_complex *fftwInput, *fftwOutput, *fftInData, *fftLastData;
|
||||
fftwf_plan fftw_plan;
|
||||
#else
|
||||
liquid_float_complex *fftInput, *fftOutput, *fftInData, *fftLastData;
|
||||
fftplan fftPlan;
|
||||
#endif
|
||||
|
||||
unsigned int lastDataSize;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user