The Goertzel algorithm is more efficient than the Fast Fourier Transform
in computing an -point DFT if less than
DFT coefficients
are required [9].
In DTMF detection, we only need 8 of, for example, 205 DFT coefficients
to detect the first harmonics of the 8 possible tones, and then
apply decision logic to choose the strongest touch tone.
Since DTMF signals do not have second harmonics, we could compute
another 8 DFT coefficients to compute the second harmonics to detect
the presence of speech [3].
The Goertzel algorithm computes the th DFT coefficient of the
input signal
using a second-order filter
where .
The
th DFT coefficient is produced after the filter has processed
samples:
.
The key in an implementation is to run
for
samples
and then evaluate
.
The computation for
takes one add (
) and
one multiply-accumulate per sample.
In DTMF detection, we are only concerned with the power of the
th coefficient,
:
The value of must be shorter than the samples in half of a DTMF
signaling interval (
), be large enough for good frequency resolution
(
), and meet the relative error specification 2(a).
We used a conventional value of
= 205 [10][3] because
it is roughly half of 400 samples.
Decision logic can be added to give a valid DTMF signal if the same two
DTMF tones are detected in a row to add robustness against noise.
Table 1: Chosen values to minimize the error in
.