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

MATLAB Discussion :

Tracer la transformation de Fourier d’une fonction donnée


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Tracer la transformation de Fourier d’une fonction donnée
    Bonjour,
    Je suis débutant en Matlab, j’ai fait un tours sur ce superbe forum mais je n’ai pas trouvé la réponse à ma question : la voila,
    On se donne la fonction suivante
    f(x)=0 si x<-1 et x>1
    f(x)=1 sinon
    Ma première question est : comment tracer la courbe de cette fonction f sur [-5..5] sous matlab
    je veux aussi tracer la courbe de la transformation de Fourier de f sur l’intervalle [-10,10].
    Merci bien davantage pour vos remarques et suggestions. S’il y en a des lien sur le net parlant de ça je vous serais reconnaissant de me les donner.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par imen1 Voir le message
    Ma première question est : comment tracer la courbe de cette fonction f sur [-5..5] sous matlab
    Une boucle FOR-END, une condition IF-ELSE-END et la fonction PLOT devraient te permettre de tracer ta courbe...


    Citation Envoyé par imen1 Voir le message
    je veux aussi tracer la courbe de la transformation de Fourier de f sur l’intervalle [-10,10].
    Voir la fonction FFT
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci bien Dut pour ta réponse, je ne te cache rien, je n'ai pas compris les boucles que tu m'a donné. Donc j'ai cherché sur un manuel de matlab et voila ce que j'ai trouvé:
    Pour la fonction f:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x=-3:0.01:3;y = 0.*(x < -1) + 1.*(-1 <= x & x <= 1) + 0.*(1 < x);
    si je veux tracer la courbe de f, sur l'intervalle [-3,3], j'utilise
    Pour la transformation de Fourier de f, j'ai utilisé
    et pour tracer la courbe de la transformation de Fourier de f j'ai utilisé
    Et la les choses se compliquent et se contredisent, voila en fait ce que j'ai obtenu comme message
    Warning: Imaginary parts of complex X and/or Y arguments ignored.
    en plus j'ai obtenu la courbe de la pièce jointe. Cette courbe n'est pas du tout corrcte car on sait que la transformation de fourier de f est le sinus cardinal (sin(Pi*x)/(pi*x)).
    Comment regler ce probleme? et que signifie le message de warning donné par Matlab?
    Merci encore une autre fois.
    Images attachées Images attachées  

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Fais un essai :
    - diminue la largeur du créneau
    ou
    - augmente le pas (0.1 par ex)
    en utilisant abs(z)
    et tu auras sin(x)/x

  5. #5
    Membre confirmé
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Points : 487
    Points
    487
    Par défaut
    Voilà une idée de départ :

    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
     
    inc=0;
    f=0;
    for u=-100:0.1:100
        inc=inc+1;
        if (u>-1 && u<1)
           f(inc)=1;
        else
            f(inc)=0;
        end
    end
     
    u=-100:0.1:100;
    subplot(2,1,1)
    plot(u,f)
    F=fft(f);
     
    Pff=F.*conj(F) / numel(F);
    freq=10*(0:1:((numel(F)-1)/2))/(numel(F)-1);
    subplot(2,1,2)
    plot(freq,Pff(1:((numel(F)-1)/2+1)))
    A noter que là, je plot la puissance du signal (c'est à dire Pff). C'est comme ça qu'on enlève les parties imaginaires^^.
    Maintenant, je ne suis pas sur que ça répond à ta question, mais j'espère que ça va te donner une piste sur comment procéder.

    Bon courage
    Matlab 7.14.0.739 (R2012a)
    C/C++, python, R, SQL, Pig, MR

    Ma philosophie: Ne rien faire, mais le faire bien.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci bien pour vos réponses,
    @phryte: j'ai augmenté le pas comme tu m'as proposé, la courbe obtenu est plus logique que celle obtenue au début mais ce n'est pas encore celle que je dois trouver, en effet je dois trouver la courbe de la fonction sin(x)/x. Il est à noter que je n'ai pas compris qu'est ce que vous vouler dire par: diminuer le créneau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x=-3:0.1:3;y = 0.*(x < -1) + 1.*(-1 <= x & x <= 1) + 0.*(1 < x);
    >> z=fft(y);
    >> plot(x,z)
    Warning: Imaginary parts of complex X and/or Y arguments ignored.
    @Dam2227, j'ai executé le programme que tu m'as proposé, je ne l'ai pas compris mais tout de meme ça n'a pas donné la courbe de la fonction sin(x)/x.
    En effet j'ai obtenu la coube pour les réels positifs, et qu'est ce qu'a propos des autres (les négatifs). De plus la fonction tracée ne prend pas la valeur 1 en 0 ce qui est le cas pour la fonction sin(x)/x.
    Merci tout de meme pour vos réponses. Vos commentaire seronts les bien venus

  7. #7
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    Essayes comme ceci :

    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
     
    % Données : 
    d = 0.05;
    supp = -5:d:5;
    s = length(supp);
    sDemi = round(s/2);
     
    f = zeros(size(supp));
    f(-1 <= supp & supp <= 1) = 1;
     
    % Voir Ce qu'on transfo
    figure(1)
    plot(supp,f)
    xlim([-5 5]), ylim([-1 2])
     
    % FFT : 
    tf = abs(fft(f,s))/s;
    plotSupp = (eps:sDemi)/(s*d);
     
    figure(2)
    %bar(plotSupp,tf(1:sDemi+1))
    plot(plotSupp,tf(1:sDemi+1))
    Tu peux voir le help matlab pour plus d'explications.

    ++
    AlloSchool, votre école sur internet.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci bien Mr Samurai pour ta réponse, j'ai juste un petit commentaire sur ce que tu as posté: je l'ai executé sous matlab 7 et ça n'a pas donné la courbe de la fonction sin(x)/x que je m'attendait. Pour la premiere courbe c'est ok.
    Je ne sait pas ou est le probleme? Quelqu'un a t-il une idée?
    Merci pour vos remarque d'avabce

Discussions similaires

  1. Transformé de Fourier d'un produit de fonctions
    Par lolzx dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/12/2014, 11h22
  2. Réponses: 1
    Dernier message: 02/11/2009, 13h23
  3. Compréhension fonction transformée de Fourier
    Par NulleenMatlab dans le forum Signal
    Réponses: 6
    Dernier message: 08/05/2008, 11h59
  4. Réponses: 10
    Dernier message: 26/06/2007, 14h14
  5. Dérivation dune fonction
    Par srvremi dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/07/2002, 14h21

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