Advertisement
Guest User

Untitled

a guest
Jul 1st, 2015
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. void dft (int nn, int kt, int coile, complex <double> omega)
  2. {
  3.     duzyret[nn].push_back(pus);
  4.  
  5.     if (nn==1)
  6.     {
  7.         duzyret[nn].back().push_back(duzywek[kt]);
  8.         return;
  9.     }
  10.  
  11.     dft(nn>>1, kt, coile<<1, omega*omega);
  12.     dft(nn>>1, kt+coile, coile<<1, omega*omega);
  13.  
  14.     complex <double> jeden (1.0, 0.0);
  15.  
  16.     for (int i=0; i<nn; i++)
  17.     {
  18.         duzyret[nn].back().push_back(duzyret[nn>>1][0][i%(nn/2)] + jeden*duzyret[nn>>1][1][i%(nn/2)]);
  19.         jeden*=omega;
  20.     }
  21.  
  22.     duzyret[nn>>1].clear();
  23. }
  24.  
  25. vector <int> fft(vector <int> jed, vector <int> dwa)
  26. {
  27.     int n1=potenga(jed.size()+dwa.size());
  28.     while(jed.size()<n1)
  29.     {
  30.         jed.push_back(0);
  31.     }
  32.     while(dwa.size()<n1)
  33.     {
  34.         dwa.push_back(0);
  35.     }
  36.  
  37.     vector < complex <double> > jed1, dwa2, ret;
  38.  
  39.     for (int i=0; i<n1; i++)
  40.     {
  41.         jed1.push_back(complex <double> ( (double) jed[i] , 0.0 ));
  42.         dwa2.push_back(complex <double> ( (double) dwa[i] , 0.0 ));
  43.     }
  44.  
  45.     complex <double> omega (cos(2.0*M_PI/n1), sin(2.0*M_PI/n1));
  46.  
  47.     duzywek=jed1;
  48.     dft(n1, 0, 1, omega);
  49.     jed1=duzyret[n1][0];
  50.     duzyret[n1].clear();
  51.  
  52.     duzywek=dwa2;
  53.     dft(n1, 0, 1, omega);
  54.     dwa2=duzyret[n1][0];
  55.     duzyret[n1].clear();
  56.  
  57.     for (int i=0; i<jed1.size(); i++)
  58.     {
  59.         ret.push_back(jed1[i]*dwa2[i]);
  60.     }
  61.  
  62.     omega=( complex <double> (1.0, 0.0) )/omega;
  63.  
  64.     duzywek=ret;
  65.     dft(n1, 0, 1, omega);
  66.     ret=duzyret[n1][0];
  67.     duzyret[n1].clear();
  68.  
  69.     vector <int> retret;
  70.     for (int i=0; i<ret.size(); i++)
  71.     {
  72.         ret[i]/=n1;
  73.         retret.push_back(ret[i].real());
  74.         if (retret.back()+1-ret[i].real()<ret[i].real()-retret.back())
  75.         retret[retret.size()-1]++;
  76.     }
  77.     return retret;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement