Spaces:
Running
Running
| /* | |
| Copyright 2015 Google Inc. All rights reserved. | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| */ | |
| // Author: David Talkin ([email protected]) | |
| class FFT { | |
| public: | |
| // Constructor: Prepare for radix-2 FFT's of size (1<<pow2) | |
| explicit FFT(int pow2); | |
| ~FFT(); | |
| // Forward fft. Real time-domain components in x, imaginary in y | |
| void fft(float *x, float *y); | |
| // Inverse fft. Real frequency-domain components in x, imaginary in y | |
| void ifft(float *x, float *y); | |
| // Compute the dB-scaled log-magnitude spectrum from the real | |
| // spectal amplitude values in 'x', and imaginary values in 'y'. | |
| // Return the magnitude spectrum in z. Compute 'n' components. | |
| bool flog_mag(float *x, float *y, float *z, int n); | |
| // Return the RMS of the spectral density for bands from first_bin | |
| // to last_bin inclusive. | |
| float get_band_rms(float *x, float*y, int first_bin, int last_bin); | |
| // Return the power of 2 required to contain at least size samples. | |
| static int fft_pow2_from_window_size(int size) { | |
| int pow2 = 1; | |
| while ((1 << pow2) < size) | |
| pow2++; | |
| return pow2; | |
| } | |
| int get_fftSize(void) { return fftSize; } | |
| int get_power2(void) { return power2; } | |
| private: | |
| // Create the trig tables appropriate for transforms of size (1<<pow2). | |
| int makefttable(int pow2); | |
| float *fsine, *fcosine; // The trig tables | |
| int fft_ftablesize; // size of trig tables (= (max fft size)/2) | |
| int power2, kbase, fftSize; // Misc. values pre-computed for convenience | |
| }; | |