Bonjour,
J'ai developpé un bout de code qui permet de retourner la transformée de fourier discrète d'un vecteur tout en minimisant la complexité de l'algo(avec la stragtégie divier pour regner), mais le problème c'est que j'aboutis à des résultats non attendus, si vous pouvez voir le code et detecter la source du problème.
Merci.
Aida.

voilà le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
procedure FFTRecursive(real a[*], ref real fftrel[*], ref real fftimg[*], int n)
#precondition n = 2**m
 
{
  if (n == 1)
     { fftrel[1] = a[1]; 
       fftimg[1] = a[1];}
  else
     { int m = n/2;
       real wn = exp(2*3.14/n);
       real w = 1;
       real fftrel[1:n], fftimg[1:n];
       real b[1:m], c[1:m], fftrelb[1:m],fftimgb[1:m], fftrelc[1:m], fftimgc[1:m];
       for[i = 1 to m]
          { b[i] = a[2*i];
            c[i] = a[2*i-1];
          }
       FFTRecursive(b,fftrelb,fftimgb,m);
       FFTRecursive(c,fftrelc,fftimgc,m);
       for[k = 1 to m]
          { fftrel[k] = fftrelb[k];
            fftimg[k] = fftimgc[k] * w;
            fftrel[k+m] = fftrelb[k];
            fftimg[k+m] = fftimgc[k] * (-w);
            w = w * wn;
          } 
     }
}
FFTRecursive(A,tabrel,tabimg,n);
for[i = 1 to n]
   { fft[i] = (tabrel[i] * tabrel[i]) + (tabimg[i] * tabimg[i]); }