Goertzel Algorithm for a Non-integer Frequency Index
If you've read about the Goertzel algorithm, you know it's typically presented as an efficient way to compute an individual kth bin result of an N-point discrete Fourier transform (DFT). The integer-valued frequency index k is in the range of...
Summary
This blog post shows how the Goertzel algorithm can be adapted to compute DFT results when the target frequency index is non-integer. It explains the required filter coefficient adjustments, practical implementation options, and the tradeoffs versus FFT-based and interpolation approaches for fractional-bin spectral analysis.
Key Takeaways
- Compute the modified Goertzel coefficients using the fractional index (k fractional) via cos(2π·k/N) and the corresponding complex rotation to target non-integer frequencies.
- Apply windowing or bin-interpolation techniques (e.g., quadratic/parabolic interpolation) to reduce spectral leakage and improve amplitude/phase estimates for fractional bins.
- Implement the fractional-Goertzel using complex mixing (heterodyning) or an equivalent second-order filter to maintain numerical stability and real-time performance.
- Compare computational cost and accuracy versus zero-padding/FFT methods and choose Goertzel when you need sparse, single-tone detection with low overhead.
- Validate amplitude and phase by compensating for the offset from the nearest integer bin and account for finite-sample bias in estimation.
Who Should Read This
DSP engineers and developers working on audio, speech, radar, or communications systems who need efficient single-tone or sparse-frequency detection and want to handle fractional-frequency targets.
TimelessIntermediate
Related Documents
- A New Approach to Linear Filtering and Prediction Problems TimelessAdvanced
- A Quadrature Signals Tutorial: Complex, But Not Complicated TimelessIntermediate
- An Introduction To Compressive Sampling TimelessIntermediate
- Lecture Notes on Elliptic Filter Design TimelessAdvanced
- Computing FFT Twiddle Factors TimelessAdvanced







