Jeudi 14 mai 2009

Algorithme de Goertzel : recherche de l'amplitude, de la période et de la phase du cycle.

Dans le dernier article sur l'algorithme de Goertzel, le programme permettait de retrouver les 2 périodes des cycles qui avaient la meilleure réponse.  Je l'ai complèté et corrigé pour qu'il sorte également l'amplitude correcte du cycle ainsi que la phase : cela afin de pouvoir redessiner la courbe.
Dans l'exemple ci-dessous, le signal (en noir) est une sinusoïde de période 11 ajoutée à une sinusoïde de période 19 (d'amplitude 2) avec un décalage de phase (90),  le tout avec une pincée de bruit..   Les 2 courbes (rouge et bleue) sont reconstruites par le programme, il reste à les superposer pour avoir le signal sans bruit.



Le code pour Prorealtime (k, en variable, est la fréquence déjà trouvée) :

////////////////// sous prgm goertzel  biss ////////////
a=barindex
sig=sin(360*a/11)+2*sin(360*a/19+90)
b=SQRT(barindex*(b+1))
b=abs((b-ROUND(b))*4)
c=b-1
sig=sig+c
n=200
pr=sig
alpha=2*cos(360*1/k)
q1=0
q2=0
for i=n downto 0//fenêtre de 200 barres
    q3=pr[i]+alpha*q1-q2
    q2=q1
    q1=q3
next
amp=sqrt(square(q1)+square(q2)-alpha*q1*q2)
real=q1-(alpha*q2)/2
imag=q2*sin(360*1/k)
phas=atan(imag/real)
if real<0 then
    phas=phas+180
elsif real>=0 and imag<0 then
    phas=phas+360
endif
return (2*amp/n)*sin(360/k+phas[1]+90),sig
Par hk_lisse - Publié dans : Les Cycles
- Voir les commentaires - Recommander
Retour à l'accueil
 
Créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus