Forums

Goertzel k value

Started by Gary Landes March 15, 2006
I'm a little confused at the k value.  Does it have to be an integer?  I've
seen two variations of the calculation:
k = 0.5 * (N * Fi) / Fs
And
k = (N * Fi) / Fs

Which is correct?  Does anyone know the math behind it?


> I'm a little confused at the k value. Does it have to be an integer? I've > seen two variations of the calculation: > k = 0.5 * (N * Fi) / Fs > And > k = (N * Fi) / Fs
k does not need to be an integer. The 2nd equation is correct. In the 1st equation, it's probably supposed to be int(0.5 + ...), which will round the number to the nearest integer (which isn't necessary, and in fact can negate one great feature of the Goertzel algortihm, which is being able to pick a frequency that isn't completely constrained by the sample rate and block size). Here's a great article about the algorithm, with the exception of making k an integer: http://www.embedded.com/story/OEG20020819S0057
> Which is correct? Does anyone know the math behind it?
The math behind the k value is the same as the bin # in an FFT, with the exception that it doesn't need to be an integer. Note that even though any frequency can be evaluated, the resolution (and relative locations of side lobes) is still based on the sample rate and block size.
jens wrote:
> > I'm a little confused at the k value. Does it have to be an integer? I've > > seen two variations of the calculation: > > k = 0.5 * (N * Fi) / Fs > > And > > k = (N * Fi) / Fs > > k does not need to be an integer.
k does not need to be an integer. But if it isn't, there will be aliasing from other frequencies whose periods are exact submultiples on N, including DC (which isn't the case when k is an integer). If this difference could cause any problems, windowing before the Goertzel sum might help minimize some of the results of this difference. IMHO. YMMV. -- rhn A.T nicholson d.0.t C-o-M