Bon, ceci est un message de détresse, avant que je ne fasse du balltrap avec les CDs d'installation de matlab.
J'ai un gros souci avec les fonctions de transformée de Fourier de matlab : autant je comprends comment fonctionne la fonction fft(x), autant la fonction ifft(x) semble avoir des propriétés totalement non attendues ... si on s'en tient à la définition que donne Matlab.
Voici un bout de code test que j'ai écrit :
Ce code fait deux opérations :Code:nfreq=512; tl=25.6 ; t_delta = 2/(2*nfreq)*tl for i=1:nfreq+1 freq(i)=(i-1)/25.6; end for i=1:nfreq+1 phase_in(i)=2*pi*freq(i)*t_delta; src(i)=complex(cos(phase_in(i)),sin(phase_in(i))); end for i=1:nfreq src_comp(i)=conj(src(2*nfreq-i+2-nfreq)); end src_f=[src(1:nfreq) src_comp]; fct_t=[zeros(1,2) ones(1,1) zeros(1,1024-2-1)]; fct_f=fft(fct_t); fct_recal=ifft(fct_f); src_tps=ifft(src_f','symmetric'); figure; subplot(3,3,1); plot(fct_t); title('fct_t'); axis([1 10 0 1]); subplot(3,3,2); plot(fct_recal); title('fct recalculée'); axis([1 10 0 1]); subplot(3,3,3); plot(src_tps); title('src_tps'); axis([1 10 0 1]); subplot(3,3,4); plot(abs(fct_f)); title('norme de fct_f'); subplot(3,3,6); plot(abs(src_f)); title('norme de src_f'); subplot(3,3,7); plot(unwrap(angle(fct_f))); title('angle de fct_f'); subplot(3,3,9); plot(unwrap(angle(src_f))); title('angle de src_f');
- il prend une fonction y=dirac décalé d'un échantillon, en fait la transformée de Fourier. On obtient un, et une phase qui décroit linéairement, ce qui est le comportement attendu ; la transformée de Fourier Y de cette fonction est utilisée dans ifft, qui redonne le résultat original. Jusque là, rien à dire.
- maintenant, je construis une fonction Z(f) qui est la conjuguée de Y, et je la passe par ifft. J'obtiens ... la fonction y ! (alors que je devrais obtenir un Dirac décalé d'un échantillon vers la gauche !)
Mieux encore, ce matin, j'essaie la notion de dérivée : je m'aperçois que, de même, je dois employer la conjuguée de la définition habituelle ...
Je soupçonne donc fortement Matlab de faire comme Mustig (pour ceux qui connaissent) : les vecteurs ont un "tag" invisible qui indique s'il est dans l'espace de temps ou dans l'espace de Fourier, et ifft sur un vecteur taggué temps fait en fait la transformée de Fourier directe sur ce vecteur ...
Ce qui me casse assez prodigieusement les pieds, puisque je ne connais mes fonctions que dans l'espace fréquence - si je ne peux pas faire confiance à ifft pour appliquer la définition mathématique de la transformée inverse, comment je fais moi ?
Donc, l'appel à l'aide aux spécialistes est : que fait exactement Matlab quand on applique ifft sur un vecteur ?
... et le premier qui me répond "use fftw", je lui fais un nervousse brékdone.
PS1 : c'est Matlab 2006 R14, des fois que ça joue
PS2 : j'ai fouillé sur le forum de Mathworks, et je n'ai vu personne répondre clairement à cette question. Oui, ça fait peur.
Rappel de la charte que tu as acceptée en t'inscrivant ici:
Merci d"en tenir compte à l'avenirLa courtoisie est de rigueur sur ce forum : pour une demande de renseignements bonjour et merci devraient être des automatismes.
Pour la modération,
yoda1234.
-----