Clean up redundant internal FFTW3 support; liquid-dsp will use FFTW3 if compiled in.

This commit is contained in:
Charles J. Cliffe
2016-07-20 18:43:54 -04:00
parent 8826547f38
commit 117f56dd9e
15 changed files with 0 additions and 1702 deletions
-59
View File
@@ -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;
-10
View File
@@ -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;
-122
View File
@@ -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) {
-9
View File
@@ -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;