comparison dsp/chromagram/Chromagram.cpp @ 257:9619d6995b73

* Add windowing to Chromagram input * Add window option to MFCC config
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 18 Jan 2008 17:57:40 +0000
parents a98dd8ec96f8
children ad645e404d0c
comparison
equal deleted inserted replaced
256:43943a4382ef 257:9619d6995b73
57 m_FFTRe = new double[ m_frameSize ]; 57 m_FFTRe = new double[ m_frameSize ];
58 m_FFTIm = new double[ m_frameSize ]; 58 m_FFTIm = new double[ m_frameSize ];
59 m_CQRe = new double[ m_uK ]; 59 m_CQRe = new double[ m_uK ];
60 m_CQIm = new double[ m_uK ]; 60 m_CQIm = new double[ m_uK ];
61 61
62 m_window = 0;
63 m_windowbuf = 0;
64
62 // Generate CQ Kernel 65 // Generate CQ Kernel
63 m_ConstantQ->sparsekernel(); 66 m_ConstantQ->sparsekernel();
64 return 1; 67 return 1;
65 } 68 }
66 69
69 deInitialise(); 72 deInitialise();
70 } 73 }
71 74
72 int Chromagram::deInitialise() 75 int Chromagram::deInitialise()
73 { 76 {
77 delete[] m_windowbuf;
78 delete m_window;
79
74 delete [] m_chromadata; 80 delete [] m_chromadata;
75 81
76 delete m_FFT; 82 delete m_FFT;
77 83
78 delete m_ConstantQ; 84 delete m_ConstantQ;
109 src[ i ] = val; 115 src[ i ] = val;
110 } 116 }
111 } 117 }
112 118
113 119
114 double* Chromagram::process( double *data ) 120 double* Chromagram::process( const double *data )
115 { 121 {
122 if (!m_window) {
123 m_window = new Window<double>(HammingWindow, m_frameSize);
124 m_windowbuf = new double[m_frameSize];
125 }
126
127 for (int i = 0; i < m_frameSize; ++i) {
128 m_windowbuf[i] = data[i];
129 }
130 m_window->cut(m_windowbuf);
131
116 // FFT of current frame 132 // FFT of current frame
117 m_FFT->process( m_frameSize, 0, data, NULL, m_FFTRe, m_FFTIm ); 133 m_FFT->process(m_frameSize, 0, m_windowbuf, NULL, m_FFTRe, m_FFTIm);
118 134
119 return process(m_FFTRe, m_FFTIm); 135 return process(m_FFTRe, m_FFTIm);
120 } 136 }
121 137
122 double* Chromagram::process( double *real, double *imag ) 138 double* Chromagram::process( const double *real, const double *imag )
123 { 139 {
124 // initialise chromadata to 0 140 // initialise chromadata to 0
125 for (unsigned i = 0; i < m_BPO; i++) m_chromadata[i] = 0; 141 for (unsigned i = 0; i < m_BPO; i++) m_chromadata[i] = 0;
126 142
127 double cmax = 0.0; 143 double cmax = 0.0;