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 :

Transformée et série de Fourier [Débutant]


Sujet :

Signal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Transformée et série de Fourier
    Bonjour a tous,

    j’espère que vous allez pouvoir m'aider

    Je dois utiliser la transformée de Fourier discrète (TDF ou FFT) pour évaluer les coefficient du développement en série de Fourier d'un signal.

    La série de Fourier, ça va, la transformée de Fourier aussi, par contre je viens a peine de commencer Matlab ...

    donc j'ai le signal suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    f1 = 3 ;
    t = 0:0.01:1; 
     
    s1 = 1 + 2 * sin (2 * pi * f1 * t);
    subplot(3, 1, 1), plot(t, s1);
    jusque la ok, par contre après, je dois faire un vecteur x avec les coefficients et la j'y arrive pas.

    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
     
     
    N = numel(t);
     
    x = zeros(1, N);
    support = zeros(1, N);
     
    for k = 0:N - 1
     
        x(k + 1) = 0;
     
        for n = 0:N - 1
     
            x(k + 1) = x(k + 1) + s1(n + 1) * exp(-1i * 2 * pi * k * n / N);
     
        end
     
        support(k + 1) = k / N;
     
    end
     
    % Module
    subplot(3, 1, 2), plot(support, abs(x));
     
    % Argument
    subplot(3, 1, 3), plot(support, angle(x));
    Voila ... (on se moque pas s'il vous plait ) j'arrive pas après au moment de calculer les coefficients.

    Je n'arrive pas a reproduire cette formule :

    Merci pour votre aide !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Où est ton problème? L'application de la formule me semble bonne...
    As-tu vérifié la différence avec ce qui est retourné par la fonction FFT?

    Petite remarque: la ligne x(k + 1) = 0; est inutile vu que tu initialises x avec x = zeros(1, N);

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci déjà de m'aider

    C'est vrai que j'ai pas fait gaffe pour le x(k + 1) = 0;

    Et bien je sais pas si tu peux regarder le résultat avec matlab, mais ça donne un truc assez ... étrange (je mets en pièce jointe au cas ou).

    J'atteins même pas f = 3 dans les axes des abscisses ...

    Edit : problème de pièce jointe

    La deuxième figure c'est ce que je trouve et la 3eme, ce qu'on obtient avec la fonction fft.
    Images attachées Images attachées  

  4. #4
    Invité
    Invité(e)
    Par défaut
    Avec ton code, je n'obtiens pas cela:
    Nom : FFT.png
Affichages : 3032
Taille : 11,3 Ko
    Note: La partie rouge correspond à la sortie de la fonction FFT de MATLAB qui colle très bien à ce tu as fait.
    C'est normal que tu n'atteignes pas 3, tu es en fréquence normalisée.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Comment tu obtiens la fft matlab de 0 a 1 ?!

    Moi ça va de 0 a 100 ... et le premier pic est a 1 en plus

    tu as bien fait un truc du genre y = fft(s1);


    Edit : OK ...c'est bon j'ai compris mon erreur. par contre tu peux me dire comment tu as fait le hold on sur le subplot ?

    En tout cas, merci de ton aide !!!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Leneris Voir le message
    Comment tu obtiens la fft matlab de 0 a 1 ?!
    Comme dit, je n'ai fait qu'utiliser ton code (mis à part la partie vérification avec la fonction FFT de MATLAB).
    Si je ne me trompe, tu as plot(support, abs(x)); et plot(support, angle(x)); avec support rempli avec des k/N avec k variant de 0 à N-1, donc je vois mal comment tu peux avoir des valeurs supérieures à 1

    Maintenant je remarque que tu as changé le plot en utilisant la fonction STEM...
    N'aurais-tu pas fait stem(abs(x)); au lieu de stem(support, abs(x));?

    Citation Envoyé par Leneris Voir le message
    tu as bien fait un truc du genre y = fft(s1);
    Oui, rien de plus.

    [EDIT]Simplement avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    X = fft(s1);
    subplot(3, 1, 1), plot(t, s1), title('Signal entrée')
    % Module
    subplot(3, 1, 2),hold on
        stem(support, abs(x),'.'), title('Module')
        stem(support, abs(X),'r')
    % Argument
    subplot(3, 1, 3), hold on
        stem(support, angle(x),'.'), title('Argument')
        stem(support, angle(X),'r')

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ah ben voila ! Merci beaucoup !

    j'avais ça mais ça marche pas on dirait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    hold on;
    subplot(3, 1, 3);
    stem(support, angle(x), 'b');
    stem(support, angle(y), 'r');
    title('Argument');
    hold off;
    En tout cas, merci encore de m'avoir accordé du temps.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Attention à la position du hold on il s'applique sur l'Axes courant qui est DÉJÀ présent, ici tu le crées après

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ah ben ca doit surement etre pour ca ...

    Je ferai gaffe la prochaine fois, merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de moyenne et de série de Fourier
    Par Lerenard1984 dans le forum Signal
    Réponses: 1
    Dernier message: 27/04/2009, 13h26
  2. La série de Fourier
    Par bahiatoon dans le forum Traitement du signal
    Réponses: 11
    Dernier message: 05/01/2009, 00h10
  3. outils de lecture sonor / série de fourier
    Par sunmat dans le forum Traitement du signal
    Réponses: 2
    Dernier message: 17/02/2008, 01h07
  4. Série de Fourier
    Par topper-harley dans le forum LabVIEW
    Réponses: 4
    Dernier message: 23/01/2008, 11h48
  5. Transformer une série d'images en vidéo
    Par Matthieu Brucher dans le forum Imagerie
    Réponses: 12
    Dernier message: 29/03/2007, 15h59

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