Mercurial > hg > qm-dsp
comparison dsp/chromagram/Chromagram.cpp @ 32:8bb764969d50
* Add windowing to Chromagram input
* Add window option to MFCC config
author | cannam |
---|---|
date | Fri, 18 Jan 2008 17:57:40 +0000 |
parents | 2e3f5d2d62c1 |
children | ad645e404d0c |
comparison
equal
deleted
inserted
replaced
31:dfe38135e4c7 | 32:8bb764969d50 |
---|---|
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; |