Mercurial > hg > qm-dsp
diff dsp/chromagram/ConstantQ.cpp @ 228:b7f01ab7045e
* Give the chromagram an alternative entry point passing in frequency domain
data
* Centre the Hamming windows and do an fftshift when calculating sparse kernel
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 15 May 2006 15:07:27 +0000 |
parents | 49844bc8a895 |
children | 8bdbda7fb893 |
line wrap: on
line diff
--- a/dsp/chromagram/ConstantQ.cpp Mon May 15 11:21:47 2006 +0000 +++ b/dsp/chromagram/ConstantQ.cpp Mon May 15 15:07:27 2006 +0000 @@ -68,18 +68,36 @@ for (unsigned k = m_uK; k--; ) { + for (unsigned u=0; u < m_FFTLength; u++) + { + hammingWindowRe[u] = 0; + hammingWindowIm[u] = 0; + } + // Computing a hamming window const unsigned hammingLength = (int) ceil( m_dQ * m_FS / ( m_FMin * pow(2,((double)(k))/(double)m_BPO))); + + unsigned origin = m_FFTLength/2 - hammingLength/2; + for (unsigned i=0; i<hammingLength; i++) { const double angle = 2*PI*m_dQ*i/hammingLength; const double real = cos(angle); const double imag = sin(angle); const double absol = hamming(hammingLength, i)/hammingLength; - hammingWindowRe[ i ] = absol*real; - hammingWindowIm[ i ] = absol*imag; + hammingWindowRe[ origin + i ] = absol*real; + hammingWindowIm[ origin + i ] = absol*imag; } + for (unsigned i = 0; i < m_FFTLength/2; ++i) { + double temp = hammingWindowRe[i]; + hammingWindowRe[i] = hammingWindowRe[i + m_FFTLength/2]; + hammingWindowRe[i + m_FFTLength/2] = temp; + temp = hammingWindowIm[i]; + hammingWindowIm[i] = hammingWindowIm[i + m_FFTLength/2]; + hammingWindowIm[i + m_FFTLength/2] = temp; + } + //do fft of hammingWindow m_FFT.process( m_FFTLength, 0, hammingWindowRe, hammingWindowIm, transfHammingWindowRe, transfHammingWindowIm );