La transformée de Fourier rapide : fft

### 6.26.3 La transformée de Fourier rapide : fft

fft a comme argument une liste (ou une séquence) [a0,..aN-1] où N est une puissance de deux.
fft renvoie la liste [b0,..bN-1] tel que pour k=0..N-1 on ait :
fft([a0,..aN-1])[k]=bk=∑j=0N-1xjωN-k· j avec ωN racine N-ième de l’unité.
On tape :

fft(0,1,1,0)

On obtient :

[2.0, -1-i, 0.0, -1+i]

On peut aussi travailler sur un corps fini ℤ/pℤ, en indiquant une racine N-ième primitive de l’unité en 2ième argument et p en 3ième argument de fft. Par exemple on verifie que 22798 est une racine primitive d’ordre 128 de 1 modulo 35969. Par exemple, calculons par FFT le carré d’un polynôme à coefficients entiers aléatoire inférieur à 10, de degré 60, représenté par la liste de ses coefficients par ordre croissant complété par des 0 pour avoir une liste de taille N=128 :

P:=poly1[op(ranm(1,60,10)[0]),0$68];
p:=fft(P,22798,35969)

il suffit maintenant de calculer le produit terme à terme de p avec lui-même et d’en calculer la FFT inverse

Q:=ifft(p .* p,22798,35969)