Mercurial > hg > qm-dsp
comparison dsp/chromagram/Chromagram.cpp @ 467:1db23b9a8da4
Fix mismatch between time- and frequency-domain versions of the
chromagram process method - the frequency-domain one expects fftshifted
input and the kernel is set up for that, but the time-domain one wasn't
doing it
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Wed, 29 May 2019 15:56:30 +0100 |
parents | 46375e6d1b54 |
children | a72d98f8baa3 |
comparison
equal
deleted
inserted
replaced
466:46375e6d1b54 | 467:1db23b9a8da4 |
---|---|
119 src[ i ] = val; | 119 src[ i ] = val; |
120 } | 120 } |
121 } | 121 } |
122 | 122 |
123 | 123 |
124 double* Chromagram::process( const double *data ) | 124 double *Chromagram::process(const double *data) |
125 { | 125 { |
126 if (!m_skGenerated) { | 126 if (!m_skGenerated) { |
127 // Generate CQ Kernel | 127 // Generate CQ Kernel |
128 m_ConstantQ->sparsekernel(); | 128 m_ConstantQ->sparsekernel(); |
129 m_skGenerated = true; | 129 m_skGenerated = true; |
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 // The frequency-domain version expects pre-fftshifted input - so | |
143 // we must do the same here | |
144 for (int i = 0; i < m_frameSize/2; ++i) { | |
145 double tmp = m_windowbuf[i]; | |
146 m_windowbuf[i] = m_windowbuf[i + m_frameSize/2]; | |
147 m_windowbuf[i + m_frameSize/2] = tmp; | |
148 } | |
149 | |
142 m_FFT->forward(m_windowbuf, m_FFTRe, m_FFTIm); | 150 m_FFT->forward(m_windowbuf, m_FFTRe, m_FFTIm); |
143 | 151 |
144 return process(m_FFTRe, m_FFTIm); | 152 return process(m_FFTRe, m_FFTIm); |
145 } | 153 } |
146 | 154 |
147 double* Chromagram::process( const double *real, const double *imag ) | 155 double *Chromagram::process(const double *real, const double *imag) |
148 { | 156 { |
149 if (!m_skGenerated) { | 157 if (!m_skGenerated) { |
150 // Generate CQ Kernel | 158 // Generate CQ Kernel |
151 m_ConstantQ->sparsekernel(); | 159 m_ConstantQ->sparsekernel(); |
152 m_skGenerated = true; | 160 m_skGenerated = true; |