Transformée de Fourier discrète rapide.
Transformée de Fourier discrète rapide inverse.
X=fft(A [,sign] [,option]) X=fft(A,sign,selection [,option]) X=fft(A,sign,dims,incr [,option] )
un tableau de nombres réels ou complexes (vecteur, matrice, ou tableau N-dimensionnel).
un tableau de nombres réels ou complexes ayant les
mêmes dimensions que A
.
1
ou -1
. Détermine le sens de la
transformation. La valeur par défaut est
-1
(transformée directe)."symmetric"
ou
"nonsymmetric"
. Permet d'indiquer à
l'algorithme si A
est symmétrique ou
non. Si cet argument est omis l'algorithme determine
automatiquement si A
est symmétrique ou
non. Voir la partie "Description" pour plus de détails.A
. Voir la partie "Description" pour plus
de détails.un vecteur de nombres positifs à valeurs entières, ou un vecteur d'entiers positifs. Voir la partie "Description" pour plus de détails.
Chaque élément doit être un diviseur du nombre total
d'éléments de A
.
Le produit des éléments de dims
doit
être strictement inférieur au nombre total d'éléments de
A
.
un vecteur de nombres positifs à valeurs entières, ou un vecteur d'entiers positifs. Voir la partie "Description" pour plus de détails.
Le nombre d'éléments de incr
doit être
égal au nombre d'éléments de dims
.
Chaque élément doit être un diviseur du nombre total
d'éléments de A
.
Les éléments de incr
doivent être en
ordre strictement croissant.
X=fft(A,-1 [,option])
ou
X=fft(A [,option])
calcule la
transformée de Fourier discrète directe
de A
Si A
est un vecteur
x=fft(a,-1)
ou
x=fft(a)
calcule une
transformée monovariable, c'est à dire:
A noter: (l'argument -1
argument de la fonction
fft
représente le signe
de l'exposant de l'exponentielle.
Si A
est une matrice, ou un
tableau multi-diemnsionnel,
X=fft(A,-1)
ou
X=fft(A)
calcule la
transformée de Fourier discrète directe
multivariable de A
.
X=fft(A,1)
or
X=ifft(A)
calcule la
transformée inverse normalisée, telle que
A==ifft(fft(A))
.
Si A
est un vecteur
X=fft(A,+1)
ou
X=ifft(A)
calcule une
transformée monovariable inverse, c'est à
dire:
X=fft(A,+1)
ou
X=ifft(A)
calcule la
transformée de Fourier discrète inverse
multivariable de A
X=fft(A,sign,selection [,option])
permet de calculer efficacement les transformées directes
ou inverses de toutes les "tranches" de
A
correspondant à la selection de
dimensions.
Par exemple si, A
est un tableau 3-D,
X=fft(A,-1,2)
est équivalent à:
et X=fft(A,-1,[1 3])
est équivalent à:
X=fft(A,sign,dims,incr [,option])
est une syntaxe ancienne qui permet aussi de
calculer efficacement les transformées directes ou
inverses de toutes les "tranches" de
A
La sélection des "tranches" se
faisant par la donnée des dimensions et des incréments
associés à chacune des dimensions. Avec cette syntaxe
les dimensions effectives de A
ne
sont pas prises en compte.
Par example si A
est un tableau ayant
n1*n2*n3
éléments
X=fft(A,-1,n1,1)
est équivalent à
X=fft(matrix(A,[n1,n2,n3]),-1,1)
.
et X=fft(A,-1,[n1 n3],[1 n1*n2])
est équivalent à
X=fft(matrix(A,[n1,n2,n3]),-1,[1,3])
.
A
ou de toutes ses
"tranches". Un tableau multi-dimensionnel B
qui a pour dimensions n1
, ...,
np
est symétrique conjugué pour la fft si
et seulement si B==conj(B([1 n1:-1:2],[1
n2:-1:2],...,[1 np:-1:2]))
.Dans un tel cas le
résultat de la fft est réel et un algorithme spécifique
peut-être utilisé pour amélioer l'éfficacité et réduire le
coût mémoire.
A
ou
toutes ses "tranches" est symétrique conjugué. Cette
option est utile pour éviter le surcoùt de la
détermination automatique de la symétrie et pour gérer
les cas où A
n'est pas exactement
symmétrique du fait par exemple d'erreurs d'arrondis.option
est omis l'algorithme va
réaliser automatiquement un test de symmétrie exacte.Remarque: la fonction fft
sauve
automatiquement des paramêtres en mémoire
(wisdom
) pour accélérer les calculs de
fft suivants correspondants aux mêmes dimensions et mêmes
options.
Les fonctions get_fftw_wisdom, set_fftw_wisdom permettent de récupérer et recharger ces paramètres pour amélioer l'efficacité de calcul de fft lorsque l'on alterne plusieurs types de fft.
Cette fonction est basée sur la bibliothèque fftw3.
1-D fft
//Composantes fréquentielles d'un signal //---------------------------------- // Construction d'un signal bruité échantilloné à 1000hz // contenant deux fréquences pures à 50 et 70 Hz. sample_rate=1000; t = 0:1/sample_rate:0.6; N=size(t,'*'); //nombre d'échantillons s=sin(2*%pi*50*t)+sin(2*%pi*70*t+%pi/4)+grand(1,N,'nor',0,1); y=fft(s); //y est symétrique, on ne garde que N/2 points f=sample_rate*(0:(N/2))/N; //vecteur de fréquences associé n=size(f,'*') clf() plot(f,abs(y(1:n))) | ![]() | ![]() |
2-D fft
//---------------------------------- A = zeros(256,256); A(5:24,13:17) = 1; X = fftshift(fft(A)); set(gcf(),"color_map",jetcolormap(128)); clf;grayplot(0:255,0:255,abs(X)') | ![]() | ![]() |
mupliple fft
//simple case, 3 1-D fft at a time N=2048; t=linspace(0,10,2048); A=[2*sin(2*%pi*3*t)+ sin(2*%pi*3.5*t) 10*sin(2*%pi*8*t) sin(2*%pi*0.5*t)+4*sin(2*%pi*0.8*t)]; X=fft(A,-1,2); fs=1/(t(2)-t(1)); f=fs*(0:(N/2))/N; //associated frequency vector clf;plot(f(1:100)',abs(X(:,1:100))') legend(["3 and 3.5 Hz","8 Hz","0.5 and 0.8 Hz"],"in_upper_left") // 45 3-D fft at a time Dims=[5 4 9 5 6]; A=matrix(rand(1,prod(Dims)),Dims); y=fft(A,-1,[2 4 5]); //equivalent (but less efficient code) y1=zeros(A); for i1=1:Dims(1) for i3=1:Dims(3) ind=list(i1,:,i3,:,:); y1(ind(:))=fft(A(ind(:)),-1); end end | ![]() | ![]() |
//Définition directe de la transformée de Fourier discrete //-------------------------------------------------------- function xf=DFT(x, flag); n=size(x,'*'); //Calcul de la matrice de Fourier (n by n !) if flag==1 then,//transformation inverse am=exp(2*%pi*%i*(0:n-1)'*(0:n-1)/n); else //transformation directe am=exp(-2*%pi*%i*(0:n-1)'*(0:n-1)/n); end xf=am*matrix(x,n,1);//dft xf=matrix(xf,size(x));//mise en formz if flag==1 then,xf=xf/n;end endfunction //Comparaison avec l'algorithme de la transformée rapide: a=rand(1,1000); norm(DFT(a,1) - fft(a,1)) norm(DFT(a,-1) - fft(a,-1)) timer();DFT(a,-1);timer() timer();fft(a,-1);timer() | ![]() | ![]() |
Matteo Frigo and Steven G. Johnson, "FFTW Documentation" http://www.fftw.org/#documentation