comparison dsp/chromagram/ConstantQ.cpp @ 3:07ac3de1e53b

* 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 cannam
date Mon, 15 May 2006 15:07:27 +0000
parents d7116e3183f8
children 8bdbda7fb893
comparison
equal deleted inserted replaced
2:c539af5259da 3:07ac3de1e53b
66 66
67 FFT m_FFT; 67 FFT m_FFT;
68 68
69 for (unsigned k = m_uK; k--; ) 69 for (unsigned k = m_uK; k--; )
70 { 70 {
71 for (unsigned u=0; u < m_FFTLength; u++)
72 {
73 hammingWindowRe[u] = 0;
74 hammingWindowIm[u] = 0;
75 }
76
71 // Computing a hamming window 77 // Computing a hamming window
72 const unsigned hammingLength = (int) ceil( m_dQ * m_FS / ( m_FMin * pow(2,((double)(k))/(double)m_BPO))); 78 const unsigned hammingLength = (int) ceil( m_dQ * m_FS / ( m_FMin * pow(2,((double)(k))/(double)m_BPO)));
79
80 unsigned origin = m_FFTLength/2 - hammingLength/2;
81
73 for (unsigned i=0; i<hammingLength; i++) 82 for (unsigned i=0; i<hammingLength; i++)
74 { 83 {
75 const double angle = 2*PI*m_dQ*i/hammingLength; 84 const double angle = 2*PI*m_dQ*i/hammingLength;
76 const double real = cos(angle); 85 const double real = cos(angle);
77 const double imag = sin(angle); 86 const double imag = sin(angle);
78 const double absol = hamming(hammingLength, i)/hammingLength; 87 const double absol = hamming(hammingLength, i)/hammingLength;
79 hammingWindowRe[ i ] = absol*real; 88 hammingWindowRe[ origin + i ] = absol*real;
80 hammingWindowIm[ i ] = absol*imag; 89 hammingWindowIm[ origin + i ] = absol*imag;
81 } 90 }
82 91
92 for (unsigned i = 0; i < m_FFTLength/2; ++i) {
93 double temp = hammingWindowRe[i];
94 hammingWindowRe[i] = hammingWindowRe[i + m_FFTLength/2];
95 hammingWindowRe[i + m_FFTLength/2] = temp;
96 temp = hammingWindowIm[i];
97 hammingWindowIm[i] = hammingWindowIm[i + m_FFTLength/2];
98 hammingWindowIm[i + m_FFTLength/2] = temp;
99 }
100
83 //do fft of hammingWindow 101 //do fft of hammingWindow
84 m_FFT.process( m_FFTLength, 0, hammingWindowRe, hammingWindowIm, transfHammingWindowRe, transfHammingWindowIm ); 102 m_FFT.process( m_FFTLength, 0, hammingWindowRe, hammingWindowIm, transfHammingWindowRe, transfHammingWindowIm );
85 103
86 104
87 for (unsigned j=0; j<( m_FFTLength ); j++) 105 for (unsigned j=0; j<( m_FFTLength ); j++)