# Implementation of goertzel algorithm in C

I am implementing BFSK frequency hopping communication system on a DSP processor. It was suggested by some of the forum members to use Goertzel algorithm for the demodulation of frequency hopping at specific frequncies. I have tried implementing the goertzel alorithm in C. the code is follows :

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


When I use the function to calculate the result at specific frequencies for a given dataset, I am not getting the correct results. However, if I use the same dataset and calculate the goertzel result using MATLAB, then I get the results perfectly. I am implemented the algorithm using C, with the help of some online tutorials that I found over the internet. I just want to get the view of you guys if the function is implmenting the goertzel algorithm correctly.

Thanks, Anshu

• Why don't you try it and see if it is working? – Jason R Jul 20 '12 at 12:44
• Jason, I have already tried it and its now working (as I mentioned in my post). not sure why because from what I read about goertzel algorithm, I think I have done it correctly. – anshu Jul 20 '12 at 12:50
• It would be very helpful if you could provide a example of short input, expected output and actual output by the code. – Phonon Jul 20 '12 at 12:59
• Also, a reference to paper, article or web resource that you're using to look up the algorithm would be nice. I can't find anything that implements it the way you do. – Phonon Jul 20 '12 at 13:10
• I vote to close this question because it is about programming, not about signal processing. – Dilip Sarwate Jul 23 '12 at 12:01