Changeset 16099 for trunk/Ohana/src/opihi/lib.data/fft.c
- Timestamp:
- Jan 16, 2008, 1:10:16 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/lib.data/fft.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/lib.data/fft.c
r16094 r16099 8 8 } 9 9 10 void fft ( double *x, double *y, int n, int Nbit) {10 void fft (float *x, float *y, int n, int Nbit, int forward) { 11 11 12 12 int i,j,k,n1,n2; 13 double c,s,e,a,t1,t2; 13 float c,s,e,a,t1,t2; 14 double factor; 14 15 15 16 // bit-reverse … … 19 20 n1 = n2; 20 21 while ( j >= n1 ) { 21 j = j -n1;22 n1 = n1/2;22 j -= n1; 23 n1 /= 2; 23 24 } 24 j = j +n1;25 j += n1; 25 26 26 27 if (i < j) { … … 33 34 } 34 35 } 35 36 36 37 37 n1 = 0; /* FFT */ 38 38 n2 = 1; 39 39 40 if (forward) { 41 factor = +2.0*M_PI; 42 } else { 43 factor = -2.0*M_PI; 44 } 45 40 46 for (i=0; i < Nbit; i++) { 41 47 n1 = n2; 42 48 n2 = n2 + n2; 43 e = -6.283185307179586/n2;49 e = factor/n2; 44 50 a = 0.0; 45 51 … … 60 66 } 61 67 68 // re-normalize 69 for (i = 0; i < n; i++) { 70 x[i] /= n; 71 y[i] /= n; 72 } 73 62 74 return; 63 75 } 64 76 65 int IsBinary (int N, int *nbin) { 77 // check that a number is binary (2^Nbit). returns int(log_2(N)) in Nbit 78 int IsBinary (int N, int *Nbit) { 66 79 67 // check that a number is binary (2^nbit)80 int i, Nset; 68 81 69 Nbit = 0;82 *Nbit = 0; 70 83 Nset = 0; 71 84 for (i = 0; i < 8*sizeof(int); i++) { 72 85 if (N & 0x01) { 73 86 Nset ++; 74 Nbin= i;87 *Nbit = i; 75 88 } 76 89 N >>= 1; 77 90 } 78 *nbin = Nbit;79 91 if (Nset > 1) return (FALSE); 80 92 } … … 92 104 /* m: n = 2**m */ 93 105 /* input/output */ 94 /* x: doublearray of length n with real part of data */95 /* y: doublearray of length n with imag part of data */106 /* x: float array of length n with real part of data */ 107 /* y: float array of length n with imag part of data */ 96 108 /* */ 97 109 /* Permission to copy and use this program is granted */
Note:
See TracChangeset
for help on using the changeset viewer.
