utilisation de la fft
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

utilisation de la fft



  1. #1
    membreComplexe12

    utilisation de la fft


    ------

    Salut tous,
    actuellement j'essai d'utiliser sous matlab la fonction "fft". Pour ce qui est de l'utilisation matlab je n'ai aucun soucis, c'est plutôt sur l'aspect theorique que je bloque :euh:
    Voici un bout de code exemple que j'ai trouvé pour tracer un spectre et faire la fft inverse:
    Code:
    fe=200;
    t=(1:fe)/fe;
    %Signaux source bruités
    x1 = sin(2*pi*t*60)+0.5*randn(size(t)); 
    x2 = sin(2*pi*t*25)+0.5*randn(size(t));
    x3 = sin(2*pi*t*10)+0.5*randn(size(t));
    % signal somme
    stot = x1+x2+x3;
    Nx = length(stot);
    % fft du signal somme
    tf=fft(stot,Nx);
    w=(0:Nx-1)/Nx*fe;
    plot(w(1:Nx/2),abs(tf(1:Nx/2)));
    title('module de la fft de la somme x1+x2+x3')
    % ifft du signal somme
    tf=ifft(tf,Nx);
    plot(real(tf));
    je ne comprends pas trop comment une "fft" du coup j'ai des passages qui me bloque sur ce code...

    => tout d'abord, pour la fft on donne que les ordonnées à "fft" et la fonction ne renvoi que des modules... ça me parait bizarre, je pensais obtenir aussi des frequences ?
    => en fait le vecteur fréquence w qui contient toutes les fréquences des différents modules doit être construit par l'utilsateur mais je ne comprends pas pourquoi ;( le signal n'est pas périodique donc omment déterminer une fréquence et ces harmoniques ?
    => la dernière chose que je ne comprends pas c'est que la "fft" renvoi parfois des complexes alors que pour moi une amplitude c'est forcmeent réel...

    pourriez vous m'aider à éclairer tout ceci ?

    merci beaucoup

    -----

  2. #2
    Paraboloide_Hyperbolique

    Re : utilisation de la fft

    Citation Envoyé par membreComplexe12 Voir le message
    => tout d'abord, pour la fft on donne que les ordonnées à "fft" et la fonction ne renvoi que des modules... ça me parait bizarre, je pensais obtenir aussi des frequences ?
    Les fréquences sont définies implicitement par votre pas de temps (pas d’échantillonnage) du signal dont vous faites la fft (c'est l'inverse du pas de temps). Il n'est donc pas nécessaire de les définir dans la fonction fft qui ne saurait d'ailleurs les deviner.

    Citation Envoyé par membreComplexe12 Voir le message
    => en fait le vecteur fréquence w qui contient toutes les fréquences des différents modules doit être construit par l'utilsateur mais je ne comprends pas pourquoi ;( le signal n'est pas périodique donc comment déterminer une fréquence et ces harmoniques ?
    Cela n'a rien à voir avec la périodicité ou non du signal, mais avec la fréquence du taux d'échantillonnage de ce signal. Connaissant cette fréquence (voir-ci dessus), vous pouvez reconstruire le vecteur w des fréquences.

    Citation Envoyé par membreComplexe12 Voir le message
    => la dernière chose que je ne comprends pas c'est que la "fft" renvoi parfois des complexes alors que pour moi une amplitude c'est forcmeent réel...
    La fft ne renvoi pas qu'une amplitude, mais une amplitude et une phase, sous forme d'un complexe. si s(t) est votre signal, sa transformée de Fourier est:


    Ce qui, généralement, donne un résultat dans les complexes.

    Enfin, pour vous aider, voici un petit lien expliquant la fft sous Matlab: http://www.mathworks.nl/help/matlab/ref/fft.html

  3. #3
    phuphus

    Re : utilisation de la fft

    Bonjour,

    Citation Envoyé par membreComplexe12 Voir le message
    => tout d'abord, pour la fft on donne que les ordonnées à "fft" et la fonction ne renvoi que des modules... ça me parait bizarre, je pensais obtenir aussi des frequences ?
    L'entrée de la fft est un signal temporel, la sortie est la projection de ce signal sur une base de cosinus harmoniques. Donc tu as juste les amplitudes complexes des cosinus. Les fréquences correspondantes dépendent de la période d'analyse.

    Pour avoir à la fois des fréquences et des amplitudes, regarde du côté des commandes "spectrum" ou "psd"

    Citation Envoyé par membreComplexe12
    => en fait le vecteur fréquence w qui contient toutes les fréquences des différents modules doit être construit par l'utilsateur mais je ne comprends pas pourquoi ;( le signal n'est pas périodique donc omment déterminer une fréquence et ces harmoniques ?
    La fft est une transformée de Fourier :
    - discrète
    - à court terme

    Au final, cela revient à faire une série de Fourier (très important !), avec comme base périodique la durée du signal de base.

    Citation Envoyé par membreComplexe12
    => la dernière chose que je ne comprends pas c'est que la "fft" renvoi parfois des complexes alors que pour moi une amplitude c'est forcmeent réel...
    La fft fait donc une projection sur une base de cos, avec une amplitude complexe. La partie réelle représente la composante purement cos, la partie imaginaire représente la composante sinus. Ou bien, cela revient au même, le module du complexe représente l'amplitude du cos, et l'argument la phase. Les deux fonctions matlab pour extraire amplitude et phase sont donc abs() et angle().

    Ch'tite question : si tu traces la partie module, écrasée dans ton script matlab par la fft inverse, il y a une anomalie. Laquelle ?

  4. #4
    phuphus

    Re : utilisation de la fft

    Re,

    Citation Envoyé par Paraboloide_Hyperbolique Voir le message
    Les fréquences sont définies implicitement par votre pas de temps (pas d’échantillonnage) du signal dont vous faites la fft (c'est l'inverse du pas de temps). Il n'est donc pas nécessaire de les définir dans la fonction fft qui ne saurait d'ailleurs les deviner.
    [...]
    Cela n'a rien à voir avec la périodicité ou non du signal, mais avec la fréquence du taux d'échantillonnage de ce signal. Connaissant cette fréquence (voir-ci dessus), vous pouvez reconstruire le vecteur w des fréquences.
    Non, le DeltaF des résultats de la fft est égal à Fech/Nfft. L'inverse du pas de temps, c'est la fréquence d'échantillonnage.

    Fech : fréquence d'échantillonnage
    Nfft : nombre de points de la fft

    On retrouve bien que DeltaF est l'inverse de la période d'analyse, puisque cette période dure Nfft/Fech secondes.

  5. A voir en vidéo sur Futura
  6. #5
    membreComplexe12

    Re : utilisation de la fft

    Merci beaucoup pout vos réponses !!!
    - maintenant je comprends cette histoire de valeurs complexes, c'est logique en fait, j'avais oublié.
    - par contre pour le lien fréquence échantillonage / et fréquences harmonique je ne comprends pas

    en fait j'ai déjà vu vite fait la transformée de Fourier mais je n'ai jamais vraiment vu la version discrète et je ne comprends donc pas trop ces histoire de Shanon / Echantillonaga / frequence ...Etc
    - je ne comprends pas pourquoi les harmoniques de mon signal dépendent de la fréquence d'echantillonage que moi je choisis .... ça devrait être intraseque à mon choix ?
    (pourriez vous me dire/montrer le lien entre fréquence échantillonage / durée de signal / fréquences harmoniques de mon signa ?
    - et le theorme de Shanon je n'ai jamais vraiment compris car je n'en ai qu'entendu parlé mais pas plus. C'est un critère dans le choix de la fréquence d'echantillonage mais je ne sais pas d'où ça sort et qu'es ce que ça fait si je le choix mal
    Citation Envoyé par phuphus Voir le message
    Ch'tite question : si tu traces la partie module, écrasée dans ton script matlab par la fft inverse, il y a une anomalie. Laquelle ?
    j'ai déjà entendu de probleme avec des effets de bord mais je n'ai jamais compris c'etait quoi cette histoire .... es ce lié à ceci ta question ?

  7. #6
    Paraboloide_Hyperbolique

    Re : utilisation de la fft

    Citation Envoyé par phuphus Voir le message
    Re,


    Non, le DeltaF des résultats de la fft est égal à Fech/Nfft. L'inverse du pas de temps, c'est la fréquence d'échantillonnage.

    Fech : fréquence d'échantillonnage
    Nfft : nombre de points de la fft

    On retrouve bien que DeltaF est l'inverse de la période d'analyse, puisque cette période dure Nfft/Fech secondes.
    Correct, j'ai été un peu vite

  8. #7
    membreComplexe12

    Re : utilisation de la fft

    en fait j'ai un gros soucis pour comprendre qu'es ce qu'une fréquence d'echantillonage et le lien avec la transformée de Fourier et le spectre

    j'ai regardé l'exempel de matlab sur cette page :
    http://www.mathworks.fr/help/matlab/...f3af50279086c6

    mais je ne comprends pas du tout comme il construit son vecteur de frequences
    Dernière modification par membreComplexe12 ; 30/09/2012 à 18h01.

  9. #8
    membreComplexe12

    Re : utilisation de la fft

    En fait mon gros probleme ce trouve dans ces lignes sur l'exemple de l'aide de matlab :
    Code:
    NFFT = 2^nextpow2(L); % Next power of 2 from length of y
    Y = fft(y,NFFT)/L;
    f = Fs/2*linspace(0,1,NFFT/2+1);
    je ne comprends pas du tout pourquoi le vecteur de fequence "f" est defini comme ceci ...

    mais je ne comprends pas trop bien ceci aussi :
    Code:
    Fs = 1000;                    % Sampling frequency
    T = 1/Fs;                     % Sample time
    L = 1000;                     % Length of signal
    t = (0:L-1)*T;                % Time vector
    plot(Fs*t(1:50),y(1:50))
    les 4 première lignes ça va mais la dernière non
    => en fait dans les 4premieres lignes voici ce que l'on fait :
    1°) définition frequence echantillonage
    2°) definition periode echantillonage
    3°) nombre de points que l'on veut
    4°) on fait le vecteur temps qui correspond au nb de point à cette frequence
    5°) ici "Fs*t(1:50)" je ne comprends pas ce que l'on fait...? si on aurait voulu tracer y=f(t) on aurait dû faire :
    Code:
    plot(t,y)
    tout simplement ... ? pourquoi prendre que les 50premieres valeurs ? et pourquoi multiplier par la frequence Fs ???

  10. #9
    phuphus

    Re : utilisation de la fft

    Bonsoir membreComplexe12,

    pour la fréquence d'échantillonnage, je te renvoie à n'importe quel site correct sur le net. Pour faire concis : tu as un signal continu, et tu décide de le représenter de manière discrète en ne retenant l'amplitude du signal qu'à des instants précis (c'est l'échantillonnage). Si tu échantillonnes en venant prendre l'amplitude du signal 1000 fois par seconde, alors tu as échantillonné à 1000 Hz. Si tu retiens 44 100 points de ton signal par seconde, alors tu as échantillonné à 44,1 kHz, comme sur un CD audio.

    Les mathématiciens nous disent que pour parfaitement reconstruire le signal original à partir du signal échantillonné, il faut que la fréquence d'échantillonnage soit au moins égale à 2 fois la plus haute fréquence contenue dans le signal original.

    Si cette condition n'est pas satisfaite, on risque d'avoir du repliement : une fréquence plus grande que Fech/2 va être vue comme plus basse qu'elle ne l'est en réalité :

    http://fr.wikipedia.org/wiki/Th%C3%A...yquist-Shannon

    Citation Envoyé par membreComplexe12
    je ne comprends pas du tout pourquoi le vecteur de fequence "f" est defini comme ceci ...
    Une FFT n'est jamais qu'une décomposition en série de Fourier d'un bout de signal, considéré abusivement comme périodique pour l'occasion. Le premier coefficient renvoyé par la FFT correspond à la composante continue, le deuxième est tout simplement l'harmonique 1 de la série de Fourier. Donc par définition, cet harmonique est de même période que la période d'analyse du signal.

    Si tu as une fréquence d'échantillonnage Fech, et que tu analyses sur Nfft points, alors le bout de signal analysé dure Nfft/Fech secondes. Donc le premier harmonique aura une fréquence égale à Fech/Nfft, et les harmoniques suivants seront multiples du premier.

    Ensuite, cela n'a pas de sens de retenir les fréquences plus élevées que Fech/2 (voir théorème d'échantillonnage évoqué plus haut). Le vecteur des fréquences aura donc la tête suivante :

    Code:
    0 : Fech/Nfft : Fech/2
    Tripatouille un peu l'expression donnée sur le site de MathWorks, et tu retomberas sur ça.

    Tu as une autre manière de le voir. L'expression linspace(0,1,NFFT/2+1) représente le vecteur des fréquences normalisées. Il reste à le multiplier par la fréquence de Nyquist pour le rendre "physique". Va voir du côté de "fvtool" pour voir une utilisation du vecteur des fréquences normalisées ; tu en as aussi une évocation pour la construction des filtres FIR et IIR :
    Citation Envoyé par Aide Matlab "help firls"
    F is a vector of frequency band edges in pairs, in ascending
    order between 0 and 1. 1 corresponds to the Nyquist frequency or half
    the sampling frequency
    Citation Envoyé par membreComplexe12
    5°) ici "Fs*t(1:50)" je ne comprends pas ce que l'on fait...?
    Il ne prend que les 50 premières valeurs pour avoir un graphe parlant. Reprends le code et trace tout, cela ne changera rien. Quant à la multiplication par Fs, cela lui permet juste d'avoir des millisecondes en abscisses, mais c'est ad hoc, cela ne fonctionne que parce que la Fs est de 1kHz. Là, c'est clairement du code sale.

  11. #10
    membreComplexe12

    Re : utilisation de la fft

    ----------------------------- merci beaucoup Phuphus ----------------------------
    => ça à l'air super intéressant comme explications !
    (je n'ai que jeté un coup d'oeil pour le moment)
    ------------------ par contre il me reste une seule question à priori -------------------
    Ok pour le fondamental, mais pour les harmoniques il y a un petit truc qui me gêne
    encore mais je pense que ça va se regler en relisant demain

Discussions similaires

  1. FFT Matlab
    Par invite28237ca5 dans le forum Électronique
    Réponses: 6
    Dernier message: 22/08/2010, 10h06
  2. FFT et Derivation
    Par invited80635c1 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 28/01/2008, 11h59
  3. analyseur FFT
    Par ABN84 dans le forum Électronique
    Réponses: 3
    Dernier message: 10/09/2007, 18h02
  4. Fft
    Par invitef2d457c3 dans le forum Électronique
    Réponses: 2
    Dernier message: 09/03/2007, 22h20
  5. Fft
    Par Ravaner dans le forum Mathématiques du supérieur
    Réponses: 10
    Dernier message: 15/03/2006, 14h49