Filtre de Goertzel (calcul sur un buffer).

Namespace: dsp::fourier

Prototype

float goertzel(const Vecf &x, float frequence)

Parameters

xSignal à analyser
frequenceFré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\) : \[ y = \frac{2\cdot\left|X(f)\right|^2}{\sum{x_k^2}} \]

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()