00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef FFTCOMPLEX_H
00020 #define FFTCOMPLEX_H
00021
00022 #include "Typedefs.h"
00023 #include "Debug.h"
00024
00025 #include <fftw3.h>
00026
00048 class FFTComplex{
00049 protected:
00050 int _frameSize;
00051 int _fftSize;
00052 bool _zeroPhase;
00053
00054 fftwf_complex* _in;
00055
00056 fftwf_complex* _out;
00057
00058 fftwf_plan _fftplan;
00059
00060 template <typename FrameMatrixType>
00061 void process(const FrameMatrixType& frames, MatrixXC* fft);
00062
00063
00064 public:
00079 FFTComplex(int frameSize, int fftSize, bool zeroPhase = true);
00080
00084 ~FFTComplex();
00085
00099 void process(const MatrixXC& frames, MatrixXC* fft);
00100 void process(const MatrixXR& frames, MatrixXC* fft);
00101
00102 void setup();
00103 void reset();
00104
00110 int fftSize() const;
00111
00119 void setFftSize( int size, bool callSetup = true );
00120
00127 int frameSize() const;
00128
00136 void setFrameSize( int size, bool callSetup = true );
00137
00143 bool zeroPhase() const;
00144
00150 void setZeroPhase( bool zeroPhase, bool callSetup = true );
00151 };
00152
00153 #endif