Transformée simple de Hilbert
Bonjour,
Je suis tout nouveau sur ce forum (j'espère donc poser ma question au bon endroit)
Je travail actuellement sur la détection de Pitch d'un son. Il y a beaucoup de façon d'obtenir cette info. Après l'avoir obtenu par simple autocorrélation je souhaiterais pouvoir travailler à partir de la transformée de Hilbert. Mais j'ai de petits soucis de compréhension.
J'ai donc réalisé un code simple pour vous exposer mon problème.
Je souhaite trouver la fréquence instantanée d'un sinus de 50Hz.
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
f0 = 50; % fréquence du sinus
fs = 10e3; % fréquence d'échantillonnage
maxlag = 8192;
t = (1:maxlag)/fs;
t_angle=(1:maxlag-1)/fs;
%% Génération du sinus
a = sin(2*pi*f0*t);
%% Transformée de Hilbert
sinus_h = hilbert(a,maxlag);
FreqH = angle(sinus_h(2:maxlag).*conj(sinus_h(1:maxlag-1)))/2/pi;
FreqH = FreqH*fs;
Fx = mean(FreqH);
Enveloppe = abs(sinus_h);
%% Plot
subplot(211)
plot(t,a,t,Enveloppe),title('Allure du signal + Enveloppe du signal'),xlabel('Temps [s]');
subplot(212);
plot(t_angle,FreqH),title('Fréquence instantanée du signal'),xlabel('Temps [s]'); |
Je n'arrive pas à comprendre pourquoi la fréquence instantanée n'est pas une simple constante du début à la fin. Est-ce un soucis de codage ou de compréhension.
Merci d'avance de vos réponses
Yann