Top Qs
Chronologie
Chat
Contexte
Algorithme de Goertzel
algorithme permettant la détection d'une fréquence dans une séquence d'échantillons De Wikipédia, l'encyclopédie libre
Remove ads
L'algorithme de Goertzel est un algorithme utilisé en traitement du signal pour détecter la présence d'une fréquence dans une séquence d'échantillons. Il fut publié par le physicien américain, Gerald Goertzel (en), en 1958[1]. Il s'agit d'une méthode efficace pour évaluer un terme particulier de la transformée de Fourier discrète; elle ne nécessite qu'une multiplication et deux additions par échantillon.
Remove ads
Pseudo-code
Pseudo-code[2]
N = taille_du_bloc ; samples[N]; // échantillons FI = fréquence_à_détecter; FS = fréquence_échantillonnage; k = (int)(0.5 + (N*FI/FS)); ω = 2 * π * k / N; cosine = cos(ω); sine = sin(ω); coeff = 2 * cos(ω); scale = N / 2; Q0 = Q1 = Q2 = 0; pour i de 0 à N-1 Q0 = samples[i] + (coeff * Q1) - Q2; Q2 = Q1; Q1 = Q0; end real = (Q0 - (Q1 * cosine)) / scale; imag = (- Q1 * sine) / scale; puissance = sqrt(real * real + imag * imag);
Remove ads
Code C++
// Fonction pour calculer l'amplitude fréquentielle avec l'algorithme de Goertzel double goertzelAmplitude(const double *signal, int signalLength, double frequency, int sampleFrequency) { double W; double sine; double cosine; double Q0, Q1, Q2; double real; double imag; double scalingFactor; scalingFactor = signalLength / 2.0; int K = (int) (0.5+((signalLength * frequency) / sampleFrequency)); W = (2.0 * M_PI * K) / signalLength; cosine = cos(W); sine = sin(W); double coefficient = 2 * cosine; Q0 = 0; Q1 = 0; Q2 = 0; for (int i=0 ; i<signalLength ; i++) { // Blacman window // Q0 = (0.426591 - .496561*cos(2*M_PI*i/signalLength) +.076848*cos(4*M_PI*i/signalLength))*signal[i]+(coefficient * Q1) - Q2; // Normal acquisition Q0 = signal[i]+(coefficient * Q1) - Q2; Q2 = Q1; Q1 = Q0; } real = (Q1 - (Q2 * cosine)) / scalingFactor; imag = (Q2 * sine) / scalingFactor; //real=cosine*Q1-Q2; //imag=sine*Q1; return sqrt(real * real + imag * imag); }
Remove ads
Voir aussi
Notes et références
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads