extraire phase signal, MATLAB
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

extraire phase signal, MATLAB



  1. #1
    invitea2e53836

    extraire phase signal, MATLAB


    ------

    Bonjour,

    je suis en train d'essayer d'extraire la phase d'un signal pour avoir la fréquence en fonction du temps, pour simplifier mon problème je vais mettre un cas équivalent en plus simple qui donne le même résultat que je ne comprends pas :

    - J'ai un signal sinusoidal de fréquence 5MHz (que j'appelle testo),
    - Je calcule la fft de ce signal
    - j'en prends la phase avec "angle" (phaseff)
    - je fais la ifft de ça pour repasser en domaine temporel (phaseft)
    - comme la phase est l'intégrale de la fréquence, je dérive ce résultat pour trouver la fréquence (GFfilt1 )

    -> le problème : si je plot GFfilt1 je m'attends à avoir les 5MHz de mon signal et donc une droite horizontale d'ordonnée 5e6 en fonction de t, or ce n'est pas du tout le cas, j'ai juste un courbe qui varie aux alentours de 0, pourtant en regardant abs(fft) de mon signal j'ai bien un pic à 5MHz

    -> parallèlement à ça j'ai fait la transfo de Hilbert pour en extraire l'angle aussi, ça marche pas mieux.

    voici le code, quelqu'un voit le soucis ? je pense que je m'y prend mal quelque part mais je sais pas où..

    Code:
    fs = 1e9;
    N = 100000;
    t = 1/fs*[1:N];
    t = t';
    testo = sin(2*pi*5e6*t);
    
    Lf = length(testo);
    NFFTf = 2^nextpow2(Lf);
    Ytest = fft(testo,NFFTf);
    f = fs/2*linspace(0,1,NFFTf/2+1);
    ampff=abs(Ytest);
    plot(ampff);
    plot(f,2*abs(Ytest(1:NFFTf/2+1)));
    phaseff = unwrap(angle(Ytest)); %phase domaine freq
    
    Xtest=ifft(phaseff,NFFTf);
    phaseft = unwrap(angle(Xtest)); %phase domaine temp
    
    Hfilt1 = hilbert(testo);
    Hphase = angle(Hfilt1);
    
    GHfilt1 = gradient(Hphase);
    GFfilt1 = gradient(phaseft);
    
    
     figure
    plot(GHfilt1);hold on;plot(GFfilt1,'r');

    -----

  2. #2
    inviteb9f49292

    Re : extraire phase signal, MATLAB

    Je ne sais pas quel sens donner à ton bricolage avec la FFT inverse de l'argument de la FFT deton signal!

    Toujours est-il que si tu veux connaître le contenu spectrale d'un signal sur une étendue temporelle, tu fais une FFT (plus exactement une "Power Spectral Density"), mais bien sur Heisenberg: tu sais qu'il y a eu telles et telles fréquences sur la durée de ton analyse, mais tu ne sais pas où précisément, et si tu réduis ta longueur d'analyse pour être plus fin temporellement, tu dégrades ta résolution fréquentielle... Tu peux alors faire "glisser" ta FFT le long de ton signal pour avoir une idée de l'évolution du contenu spectral de ton signal au court du temps mais tu te heurteras toujours à ce compromis précision en fréquences _OU_ précision en temps.

    Il existe un autre concept, la notion de fréquence instantanée, facile à obtenir à partir de la transformée de hilbert, qui colle pas trop mal à l'intuition que l'on a de la fréquence. Et tu l'utilises à priori comme il faut, sauf peut-être "gradient" que je ne connais pas, j'utilise diff en général...

    Code:
    sr=48000;
    t=(0:16383)'/sr;
    x = sin(2*pi*440*t);
    y=hilbert(x);
    z=unwrap(angle(y));
    f = sr * diff(z) / (2*pi);
    mean(f)
    ça marche je viens de le faire...

  3. #3
    invitea2e53836

    Re : extraire phase signal, MATLAB

    Bonjour,

    merci pour la réponse, je vais essayer ça !
    En fait à 1 dimension gradient donne exactement le même résultat que diff.

Discussions similaires

  1. Extraire la fondamentale d'un signal audio
    Par invitedcf2093c dans le forum Électronique
    Réponses: 16
    Dernier message: 29/08/2012, 19h16
  2. Récupération d'un signal et traitement du signal avec Matlab
    Par invite8a011b82 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 13/04/2011, 11h46
  3. (Matlab) Extraire des données depuis un fichier texte et les placer dans une matrice
    Par invite02e128cc dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 14/12/2009, 12h09
  4. Informatique - Matlab : Comment extraire le nom d'une variable
    Par invite03b35ee3 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 11/01/2007, 16h02
  5. extraire partie de texte Matlab
    Par inviteb6d74d9b dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 28/03/2006, 00h56