Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB > Signal
Signal Forum d'entraide sur le traitement du signal en MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2011, 20h25   #1
Invité de passage
 
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 2
Points : 2
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 :
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 :
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 !
Leneris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 20h53   #2
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 823
Points : 6 823
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);
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 21h02   #3
Invité de passage
 
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 2
Points : 2
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
Type de fichier : png figure.png (40,4 Ko, 5 affichages)
Leneris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 21h23   #4
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 823
Points : 6 823
Avec ton code, je n'obtiens pas cela:
FFT.png
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.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 21h32   #5
Invité de passage
 
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 2
Points : 2
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 !!!
Leneris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 21h46   #6
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 823
Points : 6 823
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 :
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')
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 21h53   #7
Invité de passage
 
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 2
Points : 2
Ah ben voila ! Merci beaucoup !

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

Code :
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.
Leneris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 21h56   #8
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 823
Points : 6 823
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
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 21h57   #9
Invité de passage
 
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 2
Points : 2
Ah ben ca doit surement etre pour ca ...

Je ferai gaffe la prochaine fois, merci.
Leneris est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h35.


 
 
 
 
Partenaires

Hébergement Web