Bonjour,
J'ai un problème lorsque je veux faire de la fft sur un sinus non perturbé et un sinus bruité. Je m'explique !
Bon déclaration de qq variables dont je me sers :
Dans un premier temps, je génère un sinus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 freq = 1575.42e6; %frequence de la porteuse phi = 10; %dephasage de la porteuse periode = 1/freq; periode_echantillonnage = 0.001*periode;
Les ... veulent dire qu'il y a autre chose dans la boucle (cf juste dessous).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for t=0:periode_echantillonnage:10*periode; v=v+1 r(v)= sqrt(2*P)*cos(2*pi*freq*t+phi); ... end
Ensuite je perturbe en amplitude et en phase ce sinus. Toujours dans la même boucle for j'ai :
delta_ampl et delta_phi sont générés de manière aléatoire dans une fonction que je n'ai pas détaillée ici.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for t=0:periode_echantillonnage:10*periode; ... s(v) = sqrt(2*P*delta_ampl)*cos(2*pi*freq*t+phi+delta_phi)
Voilà, j'ai donc un sinus "normal" et un sinus perturbé en phase et amplitude.
Sur les fichiers joints ci-contre, le "normal" est en bleu, le perturbé en rouge.
Jusque là, tout va bien.
Je fais ensuite une dsp sous la forme suivante :
Sur la deuxième figure (psd.jpg), on voit bien que l'on trouve un sinus à 0.01 fois la fréquence d'échantillonnage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 S = fft(s,512); R = fft(r,512); Spsd = S.*conj(S); Rpsd = R.*conj(R);
Lorsque j'effectue le calcul de la façon suivante :
je trouve des fois des fréquences différentes pour le sinus original et le sinus perturbé mais avec une fréquence pour le sinus original qui est fausse. Je me dis donc que soit j'ai mal échantillonné, soit j'ai mal choisi mon nombre de points dans ma FFT.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 [amplitude_r indice_r] = max(Rpsd); %indice est l'indice de la matrice pour lequel Rpsd est max [amplitude_s indice_s] = max(Spsd); frequence_signal_normal_r = frequence(indice_r); %connaissant l'indice pour lequel il y a le max, on en déduit la fréquence frequence_signal_normal_s = frequence(indice_s); frequence_signal_normal = (1/periode_echantillonnage)*frequence_signal_normal_r %on dénormalise par rapport à la fréquence d'échantillonnage frequence_signal_scintille = (1/periode_echantillonnage)*frequence_signal_normal_s
Voilà pour ma dsp. Or il se trouve que ma fréquence calculée grâce au code juste ci-dessus dépend et de l'échantillonnage dont je me suis servi au début et du nombre de points de ma FFT.
Avec un échantillonnage comme j'ai choisi dans le code que je vous donne et un nombre de 512 points pour ma FFT, je retombe sur une fréquence (15754,2Hz) grâce à la FFT mais que ce soit pour le signal original ET le signal bruité. J'ai donc un problème de facteur. Je pense donc que là ma période d'échantillonnage est trop faible.
C'est bien celà mon problème. Je m'attendais à avoir une différence de fréquence calculée par FFT sur mon signal perturbé.
Est-ce que qqn voit une erreur dans ce que j'ai fait ou il n'y a rien à jeter et que malgré que mon signal soit perturbé, par FFT, je retrouve exactement la bonne fréquence ? En fait, je n'arrive pas à jongler (peut-être je pense à tort) entre le nombre de points pour mon échantillonnage de mes sinus et le nombre de points dans ma FFT.
Si je n'ai pas été très clair (ce dont je suis sur), dîtes le moi, je réexpliquerai certains points !
Merci
Partager