Advertisement
Guest User

FFT

a guest
May 6th, 2010
461
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. ComplexData * FFTrecursion(ComplexData * data, int N) {
  2.     if (N == 1) {
  3.         return data;
  4.     } else {
  5.         int No2 = N/2;
  6.         float pi2oN = 6.28318/(N*1.0f);
  7.         ComplexData * output = new ComplexData[N];
  8.         ComplexData * splitdata = new ComplexData[No2];
  9.  
  10.         for (int i = 0; i < No2; i++) {
  11.             splitdata[i].r = data[i*2].r;
  12.             splitdata[i].i = data[i*2].i;
  13.         }
  14.         ComplexData * even = FFTrecursion(splitdata,No2);
  15.  
  16.         for (int i = 0; i < No2; i++) {
  17.             splitdata[i].r = data[i*2+1].r;
  18.             splitdata[i].i = data[i*2+1].i;
  19.         }
  20.         ComplexData * odd = FFTrecursion(splitdata,No2);
  21.  
  22.         for (int k = 0; k < No2; k++) {
  23.             float A = pi2oN*k;
  24.             float cosA = cos(A);
  25.             float sinA = sin(A);
  26.             float oddk_r = odd[k].r*cosA + odd[k].i*sinA;
  27.             float oddk_i = odd[k].r*sinA - odd[k].i*cosA;
  28.             output[k].r = even[k].r + oddk_r;
  29.             output[k].i = even[k].i + oddk_i;
  30.             output[k+No2].r = even[k].r - oddk_r;
  31.             output[k+No2].i = even[k].i - oddk_i;
  32.         }
  33.         delete [] splitdata;
  34.         return output;
  35.     }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement