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
0
-
Recommander