00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CORRELATION_H
00020 #define CORRELATION_H
00021
00022 #include "Typedefs.h"
00023 #include "Debug.h"
00024
00025 #include "FFT.h"
00026 #include "IFFT.h"
00027
00028 #include <limits>
00029
00060 class Correlation {
00061 protected:
00062
00063 int _inputSizeA;
00064 int _inputSizeB;
00065 int _minLag;
00066 int _maxLag;
00067 bool _useFft;
00068 int _fftSize;
00069
00070
00071 FFT _fft;
00072 IFFT _ifft;
00073
00074 MatrixXC _fftA;
00075 MatrixXC _fftB;
00076 MatrixXR _result;
00077
00078 public:
00095 Correlation(int inputSizeA, int inputSizeB, int maxLag, int minLag, bool useFft);
00096 Correlation(int inputSizeA, int inputSizeB, int maxLag = std::numeric_limits<int>::max(), int minLag = -std::numeric_limits<int>::max());
00097
00101 ~Correlation();
00102
00103 void setup();
00104 void reset();
00105
00125 void process(const MatrixXR& framesA, const MatrixXR& framesB, MatrixXR* correlation);
00126
00133 int inputSizeA() const;
00134
00142 void setInputSizeA( int size, bool callSetup = true );
00143
00150 int inputSizeB() const;
00151
00159 void setInputSizeB( int size, bool callSetup = true );
00160
00167 int minLag() const;
00168
00176 void setMinLag( int lag, bool callSetup = true );
00177
00184 int maxLag() const;
00185
00194 void setMaxLag( int lag, bool callSetup = true );
00195
00202 bool useFft() const;
00203
00209 void setUseFft( bool useFft, bool callSetup = true );
00210 };
00211
00212 #endif