Mercurial > hg > qm-dsp
comparison dsp/chromagram/Chromagram.cpp @ 339:9c8ee77db9de
Tidy real-to-complex FFT -- forward and inverse have different arguments, so make them separate functions; document
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Wed, 02 Oct 2013 15:04:38 +0100 |
parents | d5014ab8b0e5 |
children | e4a57215ddee |
comparison
equal
deleted
inserted
replaced
338:35db1b24a848 | 339:9c8ee77db9de |
---|---|
137 for (int i = 0; i < m_frameSize; ++i) { | 137 for (int i = 0; i < m_frameSize; ++i) { |
138 m_windowbuf[i] = data[i]; | 138 m_windowbuf[i] = data[i]; |
139 } | 139 } |
140 m_window->cut(m_windowbuf); | 140 m_window->cut(m_windowbuf); |
141 | 141 |
142 // FFT of current frame | 142 m_FFT->forward(m_windowbuf, m_FFTRe, m_FFTIm); |
143 m_FFT->process(false, m_windowbuf, m_FFTRe, m_FFTIm); | |
144 | 143 |
145 return process(m_FFTRe, m_FFTIm); | 144 return process(m_FFTRe, m_FFTIm); |
146 } | 145 } |
147 | 146 |
148 double* Chromagram::process( const double *real, const double *imag ) | 147 double* Chromagram::process( const double *real, const double *imag ) |
156 // initialise chromadata to 0 | 155 // initialise chromadata to 0 |
157 for (unsigned i = 0; i < m_BPO; i++) m_chromadata[i] = 0; | 156 for (unsigned i = 0; i < m_BPO; i++) m_chromadata[i] = 0; |
158 | 157 |
159 double cmax = 0.0; | 158 double cmax = 0.0; |
160 double cval = 0; | 159 double cval = 0; |
161 | |
162 // Calculate ConstantQ frame | 160 // Calculate ConstantQ frame |
163 m_ConstantQ->process( real, imag, m_CQRe, m_CQIm ); | 161 m_ConstantQ->process( real, imag, m_CQRe, m_CQIm ); |
164 | 162 |
165 // add each octave of cq data into Chromagram | 163 // add each octave of cq data into Chromagram |
166 const unsigned octaves = (int)floor(double( m_uK/m_BPO))-1; | 164 const unsigned octaves = (int)floor(double( m_uK/m_BPO))-1; |