Allow FFT object to be constructed without inverse FFT. Added SpectralVisualizer component that does an extremely inefficient visualization of the spectral processing stages.

This commit is contained in:
xenakios
2017-12-03 22:00:40 +02:00
parent a1f7c52eb0
commit 16868d5ccd
4 changed files with 82 additions and 7 deletions

View File

@ -20,7 +20,7 @@
#include <stdlib.h>
#include <math.h>
FFT::FFT(int nsamples_)
FFT::FFT(int nsamples_, bool no_inverse)
{
nsamples=nsamples_;
if (nsamples%2!=0) {
@ -43,13 +43,15 @@ FFT::FFT(int nsamples_)
{
//fftwf_plan_with_nthreads(2);
planfftw=fftwf_plan_r2r_1d(nsamples,data.data(),data.data(),FFTW_R2HC,FFTW_MEASURE);
planifftw=fftwf_plan_r2r_1d(nsamples,data.data(),data.data(),FFTW_HC2R,FFTW_MEASURE);
if (no_inverse == false)
planifftw=fftwf_plan_r2r_1d(nsamples,data.data(),data.data(),FFTW_HC2R,FFTW_MEASURE);
} else
{
//fftwf_plan_with_nthreads(2);
planfftw=fftwf_plan_r2r_1d(nsamples,data.data(),data.data(),FFTW_R2HC,FFTW_ESTIMATE);
//fftwf_plan_with_nthreads(2);
planifftw=fftwf_plan_r2r_1d(nsamples,data.data(),data.data(),FFTW_HC2R,FFTW_ESTIMATE);
if (no_inverse == false)
planifftw=fftwf_plan_r2r_1d(nsamples,data.data(),data.data(),FFTW_HC2R,FFTW_ESTIMATE);
}
//double t1 = Time::getMillisecondCounterHiRes();
//Logger::writeToLog("Creating FFTW3 plans took "+String(t1-t0)+ "ms");
@ -64,7 +66,8 @@ FFT::FFT(int nsamples_)
FFT::~FFT()
{
fftwf_destroy_plan(planfftw);
fftwf_destroy_plan(planifftw);
if (planifftw!=nullptr)
fftwf_destroy_plan(planifftw);
};
void FFT::smp2freq()

View File

@ -122,7 +122,7 @@ enum FFTWindow{W_RECTANGULAR,W_HAMMING,W_HANN,W_BLACKMAN,W_BLACKMAN_HARRIS};
class FFT
{//FFT class that considers phases as random
public:
FFT(int nsamples_);//samples must be even
FFT(int nsamples_, bool no_inverse=false);//samples must be even
~FFT();
void smp2freq();//input is smp, output is freq (phases are discarded)
void freq2smp();//input is freq,output is smp (phases are random)