comparison dsp/chromagram/Chromagram.cpp @ 64:6cb2b3cd5356

* Refactor FFT a little bit so as to separate construction and processing rather than have a single static method -- will make it easier to use a different implementation * pull in KissFFT implementation (not hooked up yet)
author cannam
date Wed, 13 May 2009 09:19:12 +0000
parents 114e833c07ac
children dcb555b90924
comparison
equal deleted inserted replaced
63:0dcbce5d7dce 64:6cb2b3cd5356
32 m_uK = ( unsigned int ) ceil( m_BPO * log(m_FMax/m_FMin)/log(2.0)); 32 m_uK = ( unsigned int ) ceil( m_BPO * log(m_FMax/m_FMin)/log(2.0));
33 33
34 // Create array for chroma result 34 // Create array for chroma result
35 m_chromadata = new double[ m_BPO ]; 35 m_chromadata = new double[ m_BPO ];
36 36
37 // Initialise FFT object
38 m_FFT = new FFT;
39
40 // Create Config Structure for ConstantQ operator 37 // Create Config Structure for ConstantQ operator
41 CQConfig ConstantQConfig; 38 CQConfig ConstantQConfig;
42 39
43 // Populate CQ config structure with parameters 40 // Populate CQ config structure with parameters
44 // inherited from the Chroma config 41 // inherited from the Chroma config
52 m_ConstantQ = new ConstantQ( ConstantQConfig ); 49 m_ConstantQ = new ConstantQ( ConstantQConfig );
53 50
54 // Initialise working arrays 51 // Initialise working arrays
55 m_frameSize = m_ConstantQ->getfftlength(); 52 m_frameSize = m_ConstantQ->getfftlength();
56 m_hopSize = m_ConstantQ->gethop(); 53 m_hopSize = m_ConstantQ->gethop();
54
55 // Initialise FFT object
56 m_FFT = new FFTReal(m_frameSize);
57 57
58 m_FFTRe = new double[ m_frameSize ]; 58 m_FFTRe = new double[ m_frameSize ];
59 m_FFTIm = new double[ m_frameSize ]; 59 m_FFTIm = new double[ m_frameSize ];
60 m_CQRe = new double[ m_uK ]; 60 m_CQRe = new double[ m_uK ];
61 m_CQIm = new double[ m_uK ]; 61 m_CQIm = new double[ m_uK ];
133 m_windowbuf[i] = data[i]; 133 m_windowbuf[i] = data[i];
134 } 134 }
135 m_window->cut(m_windowbuf); 135 m_window->cut(m_windowbuf);
136 136
137 // FFT of current frame 137 // FFT of current frame
138 m_FFT->process(m_frameSize, 0, m_windowbuf, NULL, m_FFTRe, m_FFTIm); 138 m_FFT->process(0, m_windowbuf, m_FFTRe, m_FFTIm);
139 139
140 return process(m_FFTRe, m_FFTIm); 140 return process(m_FFTRe, m_FFTIm);
141 } 141 }
142 142
143 double* Chromagram::process( const double *real, const double *imag ) 143 double* Chromagram::process( const double *real, const double *imag )