Mercurial > hg > qm-dsp
comparison dsp/mfcc/MFCC.cpp @ 289:befe5aa6b450
* Refactor FFT a little bit so as to separate construction and processing
rather than have a single static method -- will make it easier to use a
different implementation
* pull in KissFFT implementation (not hooked up yet)
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Wed, 13 May 2009 09:19:12 +0000 |
parents | 330c2e11f8a9 |
children | d5014ab8b0e5 |
comparison
equal
deleted
inserted
replaced
288:86c70067c723 | 289:befe5aa6b450 |
---|---|
29 logFilters = 27; | 29 logFilters = 27; |
30 logSpacing = 1.0711703; | 30 logSpacing = 1.0711703; |
31 | 31 |
32 /* FFT and analysis window sizes */ | 32 /* FFT and analysis window sizes */ |
33 fftSize = config.fftsize; | 33 fftSize = config.fftsize; |
34 fft = new FFTReal(fftSize); | |
34 | 35 |
35 totalFilters = linearFilters + logFilters; | 36 totalFilters = linearFilters + logFilters; |
36 logPower = config.logpower; | 37 logPower = config.logpower; |
37 | 38 |
38 samplingRate = config.FS; | 39 samplingRate = config.FS; |
143 | 144 |
144 /* The analysis window */ | 145 /* The analysis window */ |
145 window = new Window<double>(config.window, fftSize); | 146 window = new Window<double>(config.window, fftSize); |
146 | 147 |
147 /* Allocate memory for the FFT */ | 148 /* Allocate memory for the FFT */ |
148 imagIn = (double*)calloc(fftSize, sizeof(double)); | |
149 realOut = (double*)calloc(fftSize, sizeof(double)); | 149 realOut = (double*)calloc(fftSize, sizeof(double)); |
150 imagOut = (double*)calloc(fftSize, sizeof(double)); | 150 imagOut = (double*)calloc(fftSize, sizeof(double)); |
151 | 151 |
152 earMag = (double*)calloc(totalFilters, sizeof(double)); | 152 earMag = (double*)calloc(totalFilters, sizeof(double)); |
153 fftMag = (double*)calloc(fftSize/2, sizeof(double)); | 153 fftMag = (double*)calloc(fftSize/2, sizeof(double)); |
183 | 183 |
184 free(earMag); | 184 free(earMag); |
185 free(fftMag); | 185 free(fftMag); |
186 | 186 |
187 /* Free the FFT */ | 187 /* Free the FFT */ |
188 free(imagIn); | |
189 free(realOut); | 188 free(realOut); |
190 free(imagOut); | 189 free(imagOut); |
190 | |
191 delete fft; | |
191 } | 192 } |
192 | 193 |
193 | 194 |
194 /* | 195 /* |
195 * | 196 * |
202 for (int i = 0; i < fftSize; ++i) inputData[i] = inframe[i]; | 203 for (int i = 0; i < fftSize; ++i) inputData[i] = inframe[i]; |
203 | 204 |
204 window->cut(inputData); | 205 window->cut(inputData); |
205 | 206 |
206 /* Calculate the fft on the input frame */ | 207 /* Calculate the fft on the input frame */ |
207 FFT::process(fftSize, 0, inputData, imagIn, realOut, imagOut); | 208 fft->process(0, inputData, realOut, imagOut); |
208 | 209 |
209 free(inputData); | 210 free(inputData); |
210 | 211 |
211 return process(realOut, imagOut, outceps); | 212 return process(realOut, imagOut, outceps); |
212 } | 213 } |