Trouble experts to help analyze how to achieve the fft?
asda141402
20080201 18:17:42

void CFourier :: ComplexFFT (float data [], unsigned long number_of_samples, unsigned int sample_rate, int sign)
{ / / variables for the fft unsigned long n, mmax, m, j, istep, i; double wtemp, wr, wpr, wpi, wi, theta, tempr, tempi; / / the complex array is real + complex so the array / / as a size n = 2 * number of complex samples / / real part is the data [index] and ; / / the complex part is the data [index +1] / / new complex array of size n = 2 * sample_rate if (vector! = NULL) delete [] vector; vector = new float ; [2 * sample_rate]; / / put the real array in a complex array / / the complex part is filled with 0's / / the remaining vector with no data is filled with 0's for (n = 0; n <sample_rate; n + +) { if (n <number_of_samples) vector [2 * n] = data [n]; else vector [2 * n] = 0; vector [2 * n +1] = 0; } / / binary inversion (note that the indexes / / start from 0 witch means that the / / real part of the complex is on the evenindexes / / and the complex part is on the oddindexes) n = sample_rate << 1; j = 0; for (i = 0; i <n / 2; i + = 2) { if (j> i) { SWAP (vector [j], vector [i]); SWAP (vector [j +1], vector [i +1]); if ((j / 2) <(n / 4 )) { SWAP (vector [(n(i +2))], vector [(n(j +2))]); SWAP (vector [(n(i + 2)) +1], vector [(n(j +2)) +1]); } } m = n >> 1; while (m> = 2 && j> = m) { j  = m; m ; >> = 1; } j + = m; } / / end of the bitreversed order algorithm / / DanielsonLanzcos routine mmax = 2; while (n> mmax) { istep = mmax << 1; theta = sign * (2 * pi / mmax); wtemp = sin (0.5 * theta); wpr = 2.0 * wtemp * wtemp; wpi = sin (theta); wr = 1.0; wi = 0.0; for (m = 1; m <mmax; m + = 2) ; { for (i = m; i <= n; i + = istep) { j = i + mmax; tempr = wr * vector [j1]  wi * vector [j]; tempi = wr * vector [j] + wi * vector [j1]; vector [j1] = vector [i1]tempr; vector [j] = vector [i]tempi; vector [i1] + = tempr; vector [i] + = tempi; } wr = (wtemp = wr) * wprwi * wpi + wr; wi = wi * wpr + wtemp * wpi + wi; } mmax = istep; } / / end of the algorithm / / determine the fundamental frequency / / look for the maximum absolute value in the complex array fundamental_frequency = 0; for (i = 2; i <= sample_rate; i + = 2) { if ((pow (vector [i], 2) + pow (vector [i +1], 2))> (pow (vector [fundamental_frequency], 2) + pow (vector [fundamental_frequency +1], 2))) { fundamental_frequency = i; } } / / since the array of complex has the format [ real] [complex] => [absolute value] / / the maximum absolute value must be ajusted to half fundamental_frequency = (long) floor ((float) fundamental_frequency / 2); } 
Relate
 TYPE trouble experts analyze this, the variable that is defined by the system ~
 Trouble we look at this FFT program
 Question on the FFT. Yesterday did not make it clear that today attached a source of trouble experts to answer!
 FFT program seeking to achieve
 Achieve FFT with delphi
 Will the heroes FFT how to achieve ?
 [ Experts invited ] how to analyze a "ListView" way to achieve ?
 How to achieve fast convolution fft
 Or fft
 Which experts analyze online map query is how to achieve?