goertzel
Filtre de Goertzel (calcul sur un buffer).
Namespace: dsp::fourier
Prototype
float goertzel(const Vecf &x, float frequence)
Parameters
x | Signal à analyser |
frequence | Fréquence à détecter (normalisée à la fréquence d'échantillonnage, entre -0,5 et 0,5). |
Returns
Score normalisé entre 0 et 1.
Description
Calcul de la densité spectrale, normalisée par rapport à l'énergie totale du signal, à la fréquence \(f\) :
La normalisation permet d'obtenir un score entre 0 (énergie nulle pour la fréquence considérée) et 1 (sinusoïde pure de fréquence \(f\)).
Le calcul de \(X(f)\) est effectué grâce à un filtre récursif réel d'ordre 2, moins coûteux que le calcul d'une TFD complète.
- Note
- Le facteur 2 dans la formule ci-dessous est nécessaire pour compenser le fait que pour un signal réel, l'énergie est partagée entre les fréquences positives et négatives. On pourrait d'ailleurd écrire de manière équivalente :
\[ y = \frac{\left|X(f)\right|^2 + \left|X(-f)\right|^2}{\sum{x_k^2}} \]
See also
filtre_goertzel()