Implémentation de l'algorithme de Goertzel en C

Je suis la mise en œuvre de BFSK à saut de fréquence, le système de communication sur un processeur DSP. Il a été suggéré par certains membres du forum à l'utilisation de l'algorithme de Goertzel pour la démodulation de fréquence de saut à des fréquences spécifiques. J'ai essayé la mise en œuvre de l'algorithme de goertzel en C. le code est le suivant:

float goertzel(int numSamples,int TARGET_FREQUENCY,int SAMPLING_RATE, float* data)
{
    int     k,i;
    float   floatnumSamples;
    float   omega,sine,cosine,coeff,q0,q1,q2,result,real,imag;

    floatnumSamples = (float) numSamples;
    k = (int) (0.5 + ((floatnumSamples * TARGET_FREQUENCY) / SAMPLING_RATE));
    omega = (2.0 * M_PI * k) / floatnumSamples;
    sine = sin(omega);
    cosine = cos(omega);
    coeff = 2.0 * cosine;
    q0=0;
    q1=0;
    q2=0;

    for(i=0; i<numSamples; i++)
    {
        q0 = coeff * q1 - q2 + data[i];
        q2 = q1;
        q1 = q0;
    }
    real = (q1 - q2 * cosine);
    imag = (q2 * sine);
    result = sqrtf(real*real + imag*imag);
    return result;
}

Lorsque j'utilise la fonction pour calculer le résultat à des fréquences spécifiques pour un jeu de données, je ne suis pas d'obtenir des résultats corrects. Cependant, si j'utilise le même ensemble de données et de calculer les goertzel résultat à l'aide de MATLAB goertzel() de la fonction, puis-je obtenir des résultats parfaitement. Je suis en œuvre de l'algorithme à l'aide de C, avec l'aide de quelques tutoriels en ligne que j'ai trouvé sur internet. Je veux juste la voir vous les gars si la fonction est la mise en œuvre de l'algorithme de goertzel correctement.

source d'informationauteur anshu