Bonjour,
J'ai trouvé sur internet un algorithme permettant de calculer la FFT pour 2^n valeurs. Je souhaite l'améliorer afin qu'il puisse calculer la FFT si on à pas 2^n valeurs en entrée, en ajoutant soit des zéros soit des un. La condition que j'ai programmé modifie complètement le résultat final que je mette un 0 ou un 1.
voici mon code:
Voici le résultat avec la fonction FFT de matlab :Code:if ~(N == 2^n) N=N+1; x(n+2)=0; end;
Code:>> y=[1 2 -2]; >> fft(y) ans = 1.0000 1.0000 - 3.4641i 1.0000 + 3.4641i
Voici mes résultats:
Code:>> myfft(y) %x(n+2)=1 ans = 2.0000 3.0000 + 1.0000i -4.0000 3.0000 - 1.0000i >> myfft(y) %x(n+2)=0 ans = 1.0000 3.0000 + 2.0000i -3.0000 3.0000 - 2.0000i
Voici mon programme :
Code:function X=myfft(x) N=length(x); n=nextpow2(N); if ~(N == 2^n) N=N+1; x(n+2)=1; end; x=x(:); % Classement x=classement_fft(x); X=zeros(size(x)); %calcul des k étages for k=1:n %indice des étages p=2^(k-1); % le pas entre chaque papillon Wb=(-1)^(1/p); % coefficient de base M=2^(n-k); % nombre de paquets de papillon %calcul des m paquets for m=1:M % indice paquet W=1; % coéficient de départ d=(m-1)*2*p+1; % indice debut paquet %calcul des p papillons for i=1:p % indice papillon dans paquet l=d+i-1; % indice 1er point du papillon x(l+p)=W*x(l+p);%multiplication par un coefficient X(l)=x(l)+x(l+p);%calcul sortie X(l+p)=x(l)-x(l+p);%papillon W=W*Wb; %coefficient du papillon suivant pour le prochain passage end; end; x = X; % les sorties de cet étage = entrées étage suivant end;
Ce programme sera ensuite mis dans un microcontroleur c'est pour cela que je n'utilise pas la fonction fft de matlab.
Merci
-----