problème fft sous matlab
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

problème fft sous matlab



  1. #1
    invite83cbdc17

    problème fft sous matlab


    ------

    bonjour
    svp , j'essai de faire une transformée de fourier à un signal ecg.
    il n'est pas totalement périodique mais sa periode varie légèrement et sa moyenne est de 1.22.
    normalement je m'attendais à avoir des pics dans le 1.22 et ses multiples. comme celà

    mais au lieu de ca j'ai des pic en plus dont je ne comprend pas la signification.
    comme celà

    est ce que quelqu'un peut m'aider svp à corriger ma fft
    je suis bloquée à cause de ca
    je vous remercie de tout coer de me repondre

    -----

  2. #2
    invitea29b3af3

    Re : problème fft sous matlab

    Salut

    Pour avoir des valeurs de fréquences réelles sur l'axe des x avec matlab, il faut faire quelques bidouillages (ecg=ton signal, Fs=ta fréq d'échantillonnage)

    Code:
    N=length(ecg); %longueur de ton signal
    f=-Fs/2:Fs/N:Fs/2-Fs/N; %discrétisation des fréquences 
    S=abs(fft(ecg)); %module de la fft
    S=fftshift(S); %centrage
    plot(f,S);
    axis([0 10 0 1.1*max(S)]) %on garde le côté positif du spectre
    xlabel('Fréquence (Hz)')
    ylabel('Module')

  3. #3
    invite83cbdc17

    Re : problème fft sous matlab

    je te remercie vraiment pour ta reponse, je nai pas tres bien compris le code en plus. ca ne serait pas une forme de seuillage?? est ce que ca va me permettre de faire une ifft après sur le résultat parce que j'aurais besoin de revenir au tomporel après.
    En fait celà ma amelioré le resultat mais j'aurais besoin de l'ameliorer encore plus, on lma dit de changer la résolution de la fft ou le nombre de point mais je ne sais pas comment le faire.
    MErcii de m'aider

  4. #4
    invitea29b3af3

    Re : problème fft sous matlab

    ca ne serait pas une forme de seuillage??
    Non pas vraiment. On sait que pour un signal échantillonné, tout le spectre est représenté dans l'intervalle [-Fs/2; Fs/2], ou [-0.5; 0.5] en fréquence normalisée (c'est-à-dire divisée par Fs). Donc si on veut visualiser le signal juste dans cet intervalle [-Fs/2; Fs/2], il faut bidouiller un peu (utiliser fftshift). Mais le bidouillage se fait uniquement pour l'affichage.
    est ce que ca va me permettre de faire une ifft après sur le résultat parce que j'aurais besoin de revenir au tomporel après.
    Comme j'ai dit ci-dessus, ce qu'on fait là c'est juste pour l'affichage. Donc si tu fais S=abs(fft(s)); S=fftshift(S); c'est clair que ton spectre S est modifié. Fais simplement S=fft(s); ensuite fait S_copie=abs(S); S_copie=fftshift(S_copie); pour visualiser S sans modifier S, puis s_reconstruit=ifft(S);
    changer la résolution de la fft ou le nombre de point mais je ne sais pas comment le faire
    ça s'appelle du "zero padding". Tu étends ton signal temporel avec des zéros. Par exemple si ton signal ecg est un vecteur ligne tu fais ecg=[ecg zeros(1,L)]; où L est le nombre de zéros que tu veux ajouter, ça peut être dans l'ordre de grandeur de la longueur initial de ton ecg. Tu verras que le spectre auras un aspect bosselé.

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

    Re : problème fft sous matlab

    je vous remercie vraiment , j'ai effectivement une meilleure fft.
    Mai en fait j'ai une autre question je ne sais pas si vous pourriez m'aider, en fait je voudrais appliquer un filtre en peigne à ce spectre de façon à ne rien en garder.
    j'ai fait un filtre affiché en rouge sur la courbe du spectre , j'ai fait le produit mais au lieu d'avoir un resultat nul j'ai celui de la figure en dessous. qu'est ce que je dois faire?? je desespère ca fait plus de deux mois que j'essai de trouver un filtre (((

  7. #6
    invitea29b3af3

    Re : problème fft sous matlab

    de façon à ne rien en garder.
    pourquoi tu veux rien garder de ton spectre?... à quoi ça sert?

    Ton but c'est quoi? Tu veux obtenir/faire quoi exactement?
    Et comment tu as implémenter ton filtre?

    D'après ce que je vois sur ton image tu essaies de filtrer passe-bande chaque pic, c'est ça? Il ne faut pas "créer" les filtres toi-même, il y a des fonctions pour ça, notamment butter (tape help butter dans matlab). Par exemple pour filtrer un pic situé à 2Hz, tu filtres passe-bande autour de 2Hz (par exemple avec 1.7Hz et 2.3Hz comme fréquences de coupure) :
    Code:
    [num,den] = butter(4,[1.7 2.3]/(Fs/2));
    signal_temporel_filtré = filtfilt(num,den,signal_temporel_original);

  8. #7
    invite83cbdc17

    Re : problème fft sous matlab

    c'est un peu bizarre mais je vais vous expliquer, je veux régler mon filtre sur ce spectre là pour l'appliquer ensuite sur un autre signal composé de celui là avec un autre. je veux donc régler mon filtre pour qu'il puisse dejà annuler ce signal pour ensuite ne garder que le deuxième.

    Je ne my connais pas bien en filtre , on ma dit qu'il fallait que je fasse un filtre en peigne rectangulaire. j'ai essayé avec les filtre pret de matlab, mais là le filtre en peigne enlève une fréquence bien précise. sauf que mon signal n'est pas strictement périodique , il lui arrive d'avoir une periode légèrement plus petite ou plus grande que la valeur que je mets. donc il m'enlève quelques periodes et garde le reste. Donc apparemment je dois faire mon filtre manuellement mais je ne sais pas si c'est juste là.
    Merci de m'aider

  9. #8
    invitea29b3af3

    Re : problème fft sous matlab

    un filtre en peigne rectangulaire
    mon signal n'est pas strictement périodique
    Alors sois tu automatises le tout en faisant une détection automatique des pics (détection de maximums locaux), soit (et je te conseille de faire ça, c'est plus simple, surtout si t'as peu de pics) tu sélectionnes "manuellement" toutes les fréquences de tes pics que tu veux enlever, par exemple: 0.5, 1, 1.6, 2, 2.45, 3. Puis pour chacune tu fais un filtre stop-bande (un "notch") étroit autour de la fréquence. Pour un filtre rectangulaire, par exemple un filtre d'ordre N stop-bande pour un pic à 2 Hz:
    Code:
    b = fir1(N,[1.7 2.3]/(Fs/2), rectwin(N+1), 'stop','noscale');
    Si tu sais pas quel ordre mettre, soit tu mets au bol et tu regardes si le résultat est bon et t'augmente l'ordre si c'est pas le cas, soit tu l'estimes avec la fonction kaiserord.
    Puis tu filtres ton signal :
    Code:
    signal_temporel_filtré_2Hz = filtfilt(b,1,signal_temporel_original);
    Puis si tu veux filtrer pour un pic de plus (par ex. à 3Hz), tu fais pareil mais cette fois tu utilises le signal où tu as déjà filtré l'autre pic:
    Code:
    signal_temporel_filtré_2Hz_ET_3Hz = filtfilt(b,1,signal_temporel_filtré_2Hz);

  10. #9
    invitea29b3af3

    Re : problème fft sous matlab

    EDIT: je viens de voir (en lisant l'aide de la fonction fir1 que tu peux mettre directement toutes les bandes de fréquence où tu veux filtrer en un seul grand vecteur Wn). Fais help fir1 pour lire ça.

    Cf aide de matlab:
    If Wn is a multi-element vector,
    Wn = [W1 W2 W3 W4 W5 ... WN],
    FIR1 returns an order N multiband filter with bands
    0 < W < W1, W1 < W < W2, ..., WN < W < 1.
    B = FIR1(N,Wn,'DC-1') makes the first band a passband.
    B = FIR1(N,Wn,'DC-0') makes the first band a stopband.
    J'ai jamais essayé. Soit fais comme j'ai dit, sois essaie ça, c'est toi qui vois.

Discussions similaires

  1. problème dans ma fft sous matlab
    Par invitee6bd14f3 dans le forum Logiciel - Software - Open Source
    Réponses: 12
    Dernier message: 11/04/2012, 14h47
  2. problème fft sous matlab
    Par invite83cbdc17 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 22/04/2011, 15h16
  3. fft sous matlab
    Par invite1178bc9c dans le forum Logiciel - Software - Open Source
    Réponses: 10
    Dernier message: 13/12/2009, 18h23
  4. FFT sous Matlab
    Par invite4a64a65d dans le forum Électronique
    Réponses: 2
    Dernier message: 30/08/2007, 23h19
  5. FFT sous Matlab
    Par invite45916ff7 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 03/06/2006, 01h47
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...