IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Signal Discussion :

Transformee de Fourier d'une Gaussienne


Sujet :

Signal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut Transformee de Fourier d'une Gaussienne
    Bonjour,
    Pour mieux comprendre l'usage de la transorformee de Fourier en matlab, je me focalise sur un exemple mathematiquement connue. (En effet, soit une gaussienne d'ecart type sigma, sa TF est une Gaussienne avec sigma'=1/sigma).

    Mon but est de comparer fft et fftshift.
    Par ailleurs, je ne comprends pas la forme de mes fonctions TF, en particulier mon signal est tronque en 0 pour de nombreux cas (et cela ne vient pas du pas), de plus sigma' est different de 1/sigma. Il y a donc pas de correspondance avec ce que l'on peut attendre en maths.De plus,ma derniere figure est deformee.

    Voici mon code pour deux gaussiennes l'une centree en 0, l'autre centree en 10:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function [n]=gauss()
    a=2^10
    x=linspace(-20,20,a);
    p=2*pi./x;
    sigma=2;
    u=10;
    y=1/(sqrt(2*pi*sigma*sigma)).*exp(-(x).^2/(2*sigma*sigma)); %gaussienne centree en 0
    n=size(y);
    figure(1);plot(x,y);
    z=abs(fft(y)); %TF
    figure(2);plot(p,z);
    axis([-1 1 0 40]);
    k=abs(fftshift(y)); %Tf "centree"
    figure(3);plot(p,k);
    axis([-0.5 0.5 0 0.25]);
     
    y2=1/(sqrt(2*pi*sigma*sigma)).*exp(-((x-u).^2)/(2*sigma*sigma)); %Tf centree en u=10
    figure(4);plot(x,y2);
    z2=abs(fft(y2));
    figure(5);plot(p,z2);
    axis([-1 1 0 50]);
    k2=abs(fftshift(y2));
    figure(6);plot(p,k2);
    axis([-3 1 0 1]);
    Quelqu'un peut-il tester ce code et me debloquer?

    (excusez moi j'ai pas les accents sur mon clavier)

  2. #2
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    J'ai teste ton code mais je ne sais pas actuellement que dire.


    Mais la cle c'est les fonctions fft est ifft:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>doc fft
    >>doc ifft
    Ces fonction fais ca en mode automatique:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    t = dt*(0:N-1); %N-nombre des echantions
    T = N*dt
    df = 1/T
    f = df*(0:N-1);
    Fs = N*df  %(Fs = 1/dt) -Frequence d'echantionage
    w = 2*pi*f; %Frequence radiale
     
    Pour fft fais f*t devenir k*x.


    Je n'ai aucune idee pourquoi la derniere figure est deforme

    J'espere que ca t'aides! Adapte ca a ce que tu veux faire et fais-moi savoir si ca t'aides ou non!

    Bonne chance,

    Michel

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    En fait le dernier pic n'est pas deforme. Il me semble plutot qu'il est tronque. C'est comme si tout se passe en omettant des valeurs. Ce n'est pas la premiere fois que je m'en rend compte, c'est pareil pour mes datas, le pics est coupe avec fftshift et je sais vraiment pas pourquoi??

    Par contre ce que je vais faire, c'est voir ce que j'obtiens en prenant ifft dans tous mes cas.

    Merci pour ton aide, je te tiens au courant. J'espere ne plus t'embeter avec cela

  4. #4
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par dani_dan Voir le message
    En fait le dernier pic n'est pas deforme. Il me semble plutot qu'il est tronque. C'est comme si tout se passe en omettant des valeurs. Ce n'est pas la premiere fois que je m'en rend compte, c'est pareil pour mes datas, le pics est coupe avec fftshift et je sais vraiment pas pourquoi??

    Par contre ce que je vais faire, c'est voir ce que j'obtiens en prenant ifft dans tous mes cas.

    Merci pour ton aide, je te tiens au courant. J'espere ne plus t'embeter avec cela
    Ok. Si tu resolu ca montre ton code pour ceux qui vont se confronter le meme probleme que toi en utilisant les balises CODE.

    Bonne apm,

    Michel

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Pour moi c'est 11h du matin, je viens de commencer ma journee
    Bonne aprm a toi!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Probleme resolu! Il y a une difference majeure entre fft et fftshift que je n'avais pas comprise.
    fftshift ne prend pas la TF du signal c'est juste un shift des datas, bref en claire sa les centre et sa les rassemble.
    Donc faut prendre d'abord fft du signal puis dans la fonction plot introduire fftshift.


    Ci dessus voici mon code un peu fastidieux certe (car il fait tous mes cas) mais qui m'a permis de comprendre.
    De plus pour que la relation sigma'=1/sigma, il faut tracer les graphs en fonction de 2*pi./x (et non pas avec 1./x).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    function [n]=gaussfftshift()
    N=2^10;
    dx=40/N
    X=N*dx % length of x
    x=dx*(0:N-1)-20;
    dk=1/X
    k=2*pi*dk*(0:N-1)-1/(2*dx);
    Ks=N*dk %Ks=1/dx sampling 'frequency'
    %x=linspace(-20,20,N);
    %p=2*pi./x;
    sigma=2;
    u=10;
     
     
    y=1/(sqrt(2*pi*sigma*sigma)).*exp(-(x).^2/(2*sigma*sigma));
    n=size(y);
    figure(1);plot(x,y);grid;
    title('Gaussian center on 0')
     
    z=abs(fftshift(y));
    figure(2);
    subplot(2,1,1);
    plot(x,z);grid;
    title('|FFTSHIFT| Gaussian center on 0')
    xlabel('x')
    subplot(2,1,2);
    plot(k,z);grid;
    xlabel('k')
     
    z=abs(fft(y));
    figure(3);
    subplot(2,1,1);
    plot(k,fftshift(z));
    title('|FFT| then use fftshift in plot Gaussian center on 0')
    axis([65 70 0 30])
    subplot(2,1,2);
    plot(k,z);
    title('|FFT| without used fftshift in plot Gaussian center on 0')
     
    z=ifft(z);
    figure(4);plot(x,z);grid;
    title('ifft of |FFTSHIFT|, Gaussian center on 0')
     
    z=(fft(y));
    figure(5);plot(k,fftshift(z));grid;
    title('FFT then use fftshift in plot Gaussian center on 0')
    axis([65 70 -30 30])
     
    z=(ifft(z));
    figure(6);plot(x,z);grid;
    title('ifft of FFTSHIFT Gaussian center on 0')
    %axis([-1 1 0 40]);
    %t=abs(fftshift(y));
    %figure(3);plot(k,t);grid;
    %title('FFTSHIFT Gaussian center on 0')
    %axis([-0.5 0.5 0 0.25]);
     
     
    y2=1/(sqrt(2*pi*sigma*sigma)).*exp(-((x-u).^2)/(2*sigma*sigma));
    figure(7);plot(x,y2);grid;
    title('Gaussian center on 10')
     
    z2=abs(fftshift(y2));
    figure(8);
    subplot(2,1,1);
    plot(x,z2);grid;
    title('|FFTSHIFT| Gaussian center on 10')
    xlabel('x')
    subplot(2,1,2);
    plot(k,z2);grid;
    xlabel('k');
     
    z2=abs(fft(y2));
    figure(9); plot(k,fftshift(z2));
    title('|FFT| then use fftshift in plot Gaussian center on 10')
    axis([65 70 0 30])
     
    z2=ifft(z2);
    figure (10); plot(x,z2);grid;
    title('ifft of |FFTSHIFT| Gaussian center on 10')
     
    z2=fft(y2);
    figure(11);
    subplot(2,1,1);
    plot(k,fftshift(z2));grid;
    title('FFT then use fftshift in plot Gaussian center on 10')
    axis([65 70 -30 30])
    subplot(2,1,2);
    plot(k,z2);grid;
    title('FFT with used fftshift in plot Gaussian center on 10')
     
    z2=(ifft(z2));
    figure(12);plot(x,z2);grid;
    title('ifft of FFTSHIFT Gaussian center on 10')
    %axis([-0.4 0.4 0 50]);
    %k2=abs(fftshift(y2));
    %figure(6);plot(k,k2);grid;
    %title('FFTSHIFT Gaussian center on 10')
    %axis([-1 0 0 0.25]);
    Je suis content car quand je l'applique a mes datas experimentales c'est coherent.

    A retenir, pour les debutants en matlab comme moi, travaillez toujours sur des exemples mathematiquement connues avant de vous lancer dans de l'inconnue. C'est la meilleur facon de comprendre et de gagner du temps.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Je comprend pas une chose, en y regardant bien la TF d'une gaussienne donne pas une gaussienne parfaite.
    Vous savez pourquoi?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    En particulier, Lorsque j'augmente l'ecart type de ma gaussienne, au bout d'un moment la TF ne ressemble plus du tout a une gaussienne.

    Autre chose si je prend une gaussienne centree sur 0, et une autre non centree sur 0(par exemple centree sur 10).
    Le fait d'utiliser fftshift dans plot, fait que les 2 Tf de ces 2 gaussiennes se superposent.
    Mais lorsque que j'augmente l'ecart type dans l'espace reelle ( diminue l'ecart type de la TF), du coup mes 2 TF se superposent de moins en moins bien!!!


    Par consequent je me suis attaque a d'autre exemple connu, TF du cosinus, de la fonction porte, plus un Heaviside.

    Cas Heaviside:
    non centre en zero:impossible d'obtenir un sinus cardinal bien sinusoidale, les oscillations sont triangulaires.
    centre en zero (symetrique): le signal n'est pas un sinus cardinal. Pourquoi??

    Cosinus:
    J'obtiens deux genre de Dirac pour TF mais bon la qualite varie beaucoup avec le pas et le nombre d'oscillations de mon cosinus que j'ai a l'origine.

    Je suppose que cela est en lien etroit avec le pas et le fait que c'est une FFT (pas le cas ideal ou l'on integre de l'infini).

    Dans tout les cas quand je diminue le pas dans l'espace reelle cela augmente l'amplitude de ma TF! Cela je ne le comprend vraiment pas.

    Bref du coup je me demande du bien fait d'utiliser la FFT sur mes datas experimentales, car sur les cas ideaux il y a deja des problemes importants.

Discussions similaires

  1. Transformée de Fourier d'une gaussienne sous Excel
    Par Funboard29 dans le forum Traitement du signal
    Réponses: 0
    Dernier message: 14/04/2014, 18h14
  2. Transformée de fourier d'une impulsion gaussienne
    Par alex_007 dans le forum Signal
    Réponses: 1
    Dernier message: 07/11/2009, 17h06
  3. Réponses: 1
    Dernier message: 02/11/2009, 13h23
  4. Transformée de fourier fenêtrée
    Par tissaclem dans le forum Signal
    Réponses: 4
    Dernier message: 21/05/2007, 16h03
  5. Segmenter une image par une gaussienne 2d
    Par RASS15 dans le forum Images
    Réponses: 1
    Dernier message: 12/12/2006, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo