00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef IFFTCOMPLEX_H
00020 #define IFFTCOMPLEX_H
00021
00022 #include "Typedefs.h"
00023 #include "Debug.h"
00024
00025 #include <fftw3.h>
00026
00027
00052 class IFFTComplex{
00053 protected:
00054 int _fftSize;
00055 int _frameSize;
00056 bool _zeroPhase;
00057
00058 fftwf_complex* _in;
00059 fftwf_complex* _out;
00060
00061 fftwf_plan _fftplan;
00062
00063 template <typename FrameMatrixType>
00064 void process(const FrameMatrixType& ffts, MatrixXC* frames);
00065
00066 public:
00067 IFFTComplex(int fftSize, int frameSize, bool zeroPhase = true);
00068 ~IFFTComplex();
00069
00070 void process(const MatrixXC& ffts, MatrixXC* frames);
00071 void process(const MatrixXR& ffts, MatrixXC* frames);
00072
00073 void setup();
00074 void reset();
00075
00082 int fftSize() const;
00083
00091 void setFftSize( int size, bool callSetup = true );
00092
00099 int frameSize() const;
00100
00108 void setFrameSize( int size, bool callSetup = true );
00109
00116 bool zeroPhase() const;
00117
00123 void setZeroPhase( bool zeroPhase, bool callSetup = true );
00124 };
00125
00126 #endif