Implementierung des Goertzel-Algorithmus in C

Ich implementiere ein BFSK-Frequenzsprung-Kommunikationssystem auf einem DSP-Prozessor. Einige Forumsmitglieder schlugen vor, den Goertzel-Algorithmus zur Demodulation des Frequenzsprungs bei bestimmten Frequenzen zu verwenden. Ich habe versucht, den Goertzel-Algorithmus in C zu implementieren. Der Code lautet wie folgt:

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;
}

Wenn ich die Funktion verwende, um das Ergebnis bei bestimmten Häufigkeiten für einen bestimmten Datensatz zu berechnen, erhalte ich nicht die richtigen Ergebnisse. Wenn ich jedoch denselben Datensatz verwende und das goertzel-Ergebnis mit der Funktion MATLAB goertzel () berechne, erhalte ich die Ergebnisse perfekt. Ich habe den Algorithmus mithilfe von C mithilfe einiger Online-Tutorials implementiert, die ich über das Internet gefunden habe. Ich möchte euch nur sehen, ob die Funktion den Goertzel-Algorithmus korrekt implementiert.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage