Mercurial > hg > qm-dsp
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 ) |