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]); } |
Partager