Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

[matlab] et ifft : comment ça marche exactement ?



  1. #1
    bratisla

    [matlab] et ifft : comment ça marche exactement ?


    ------

    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 :
    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');
    Ce code fait deux opérations :
    - 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:

    La courtoisie est de rigueur sur ce forum : pour une demande de renseignements bonjour et merci devraient être des automatismes.
    Merci d"en tenir compte à l'avenir

    Pour la modération,

    yoda1234.

    -----
    Dernière modification par yoda1234 ; 05/05/2009 à 13h36.

  2. #2
    jusquiame

    Re : [matlab] et ifft : comment ça marche exactement ?

    Bonsoir,
    Je n'ai pas compris tout le détail de votre programme, mais remarqué la ligne :
    "src_tps=ifft(src_f ','symmetric')". Savez-vous que l'apostrophe, appliquée à un vecteur complexe, donne le conjugué TRANSPOSE de ce vecteur ?
    En espérant avoir été utile...

  3. #3
    bratisla

    Re : [matlab] et ifft : comment ça marche exactement ?

    Citation Envoyé par jusquiame Voir le message
    Bonsoir,
    Je n'ai pas compris tout le détail de votre programme, mais remarqué la ligne :
    "src_tps=ifft(src_f ','symmetric')". Savez-vous que l'apostrophe, appliquée à un vecteur complexe, donne le conjugué TRANSPOSE de ce vecteur ?
    En espérant avoir été utile...
    Ce qui expliquerait la transposition observée, et donc le fait que je doive reconjuguer par derrière. Ne me reste donc plus qu'à comprendre pourquoi si je ne mets pas la transconjugaison ça bogue.
    Merci infiniment, vous avez sauvé ma santé mentale !

Discussions similaires

  1. phase x = fftshift(ifft(X)) avec MATLAB
    Par oliAudio dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 24/06/2008, 10h50
  2. Comment savoir exactement l'âge d'un fossile ?
    Par joe_lacasse quèquechose dans le forum Paléontologie
    Réponses: 5
    Dernier message: 03/01/2008, 23h43
  3. comment ça marche?
    Par hilde werriens dans le forum Dépannage
    Réponses: 3
    Dernier message: 30/10/2007, 23h23
  4. Comment marche exactement un spectro FTIR
    Par nikkos dans le forum Physique
    Réponses: 2
    Dernier message: 26/06/2006, 09h49
  5. comment ca marche exactement un systeme nerveux ?
    Par Tix dans le forum Biologie
    Réponses: 9
    Dernier message: 05/02/2005, 17h20
Découvrez nos comparatifs produits sur l'informatique et les technologies.