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');
-----