# DTMF Detection using Goertzel Algorithm

Started by May 3, 2006
```Hi,

I am new here and to the DTMF. I need some clarifications....

1) What must be the minimum energy level for DTMF signal.
2) How can i validate the DTMF signal after Goertzel Algorithm.

can anyone help........

-Raghu

```
```raghav wrote:
> Hi,
>
> I am new here and to the DTMF. I need some clarifications....
>
> 1) What must be the minimum energy level for DTMF signal.
> 2) How can i validate the DTMF signal after Goertzel Algorithm.
>
> can anyone help........
>
> -Raghu

Did you try Google? (I know you didn't, because if you had you would
have found a lot of useful information on this topic).

Steve

```
```>raghav wrote:
>> Hi,
>>
>> I am new here and to the DTMF. I need some clarifications....
>>
>> 1) What must be the minimum energy level for DTMF signal.
>> 2) How can i validate the DTMF signal after Goertzel Algorithm.
>>
>> can anyone help........
>>
>> -Raghu
>
>Did you try Google? (I know you didn't, because if you had you would
>have found a lot of useful information on this topic).
>
>Steve
>
>

Hi Steve,

and implemented the following procedure (long back) after Goertzel
algorithm to validate the signal...

1) Find maximum row and column energy
2) Use Parseval's theorem to check for minimum energy.
3) Check the twist limits
4) Put a threshold and check for the number of peaks.

The problem here is in step 2. Sum of maximum row and maximum column
energy must constitute for 80%-90% of total energy(adding square of each
sample). Here what's happenning is the total energy falls much below the
sum of max row and max col energy always. Hence falls detection.

If you can clarify and brief about the following steps, it will be of much
help.......

Thanks,
-RAX
```
```raghav wrote:
>> raghav wrote:
>>> Hi,
>>>
>>> I am new here and to the DTMF. I need some clarifications....
>>>
>>> 1) What must be the minimum energy level for DTMF signal.
>>> 2) How can i validate the DTMF signal after Goertzel Algorithm.
>>>
>>> can anyone help........
>>>
>>> -Raghu
>> Did you try Google? (I know you didn't, because if you had you would
>> have found a lot of useful information on this topic).
>>
>> Steve
>>
>>
>
> Hi Steve,
>
> and implemented the following procedure (long back) after Goertzel
> algorithm to validate the signal...
>
> 1) Find maximum row and column energy

Good first step

> 2) Use Parseval's theorem to check for minimum energy.

Good way to get excellent voice immunity, but consider the whole
picture. You typically have more than just nice clean DTMF tones in the
channel. Echo of the dial tone is the usual problem. The DTMF detectors
looking for 2nd harmonic energy are trying to sidestep the effects of
dial tone. If you use the Parseval approach (i.e. conservation of
energy) you need to eliminate the dial tone by filtering or echo cancelling.

> 3) Check the twist limits

Yep, you have to do that.

> 4) Put a threshold and check for the number of peaks.

Looking for the peak row/column being much stronger than the others,
rather than looking for the number of peaks, tends to work well. Just
how much stronger is left as an exercise for the reader.

> The problem here is in step 2. Sum of maximum row and maximum column
> energy must constitute for 80%-90% of total energy(adding square of each
> sample). Here what's happenning is the total energy falls much below the
> sum of max row and max col energy always. Hence falls detection.

Have you simply screwed up the scaling factors? Its pretty easy to do.
If the sum of peak row and peak column always exceeds the total energy,
shouldn't that always be a pass, rather than a fail? If seems like you
should have too much rather than too little detection.

> If you can clarify and brief about the following steps, it will be of much
> help.......

Maximising voice immunity requires some tweaking. When can get down to
10 total hits across all six sides of the Bellcore test tapes, stop. :-)

Regards,
Steve
```
```raghav wrote:
> Hi,
>
> I am new here and to the DTMF. I need some clarifications....
>
> 1) What must be the minimum energy level for DTMF signal.
> 2) How can i validate the DTMF signal after Goertzel Algorithm.
>
> can anyone help........
>
> -Raghu

Mitel used to sell a DTMF test tape. It is now available from Zarlink
Semiconductor as a CD with .wav files. Get a hold of this, and when
your decoder can pass all the tests then you are probably done.

John

```
```john wrote:
> raghav wrote:
>
>>Hi,
>>
>>I am new here and to the DTMF. I need some clarifications....
>>
>>1) What must be the minimum energy level for DTMF signal.
>>2) How can i validate the DTMF signal after Goertzel Algorithm.
>>
>>can anyone help........
>>
>>-Raghu
>
>
> Mitel used to sell a DTMF test tape. It is now available from Zarlink
> Semiconductor as a CD with .wav files. Get a hold of this, and when
> your decoder can pass all the tests then you are probably done.
>
> John
>
or get the Bellcore tapes, which are a tougher test, and keep working. :-)

Steve
```
```>john wrote:
>> raghav wrote:
>>
>>>Hi,
>>>
>>>I am new here and to the DTMF. I need some clarifications....
>>>
>>>1) What must be the minimum energy level for DTMF signal.
>>>2) How can i validate the DTMF signal after Goertzel Algorithm.
>>>
>>>can anyone help........
>>>
>>>-Raghu
>>
>>
>> Mitel used to sell a DTMF test tape. It is now available from Zarlink
>> Semiconductor as a CD with .wav files. Get a hold of this, and when
>> your decoder can pass all the tests then you are probably done.
>>
>> John
>>
>or get the Bellcore tapes, which are a tougher test, and keep working.
:-)
>
>Steve
>

Thanks, Friends your guidance helped me a lot....

I have ported the process to the microcontroller 'am working on. Yes Steve
you are right, the noise immunity is very weak....(parseval's theorem). Is
there any other way? John i got the wav files from one of the audio
editing (Cool Edit) tools and ran it in simulation, will that be fine.

I came to know Goertzel Algorithm introduces a gain of N/2 (N is
buffer/bin length). So, while using Parseval's theorem i have to devide
the maximum column and row energy by N/2 and sum up. This will be checked
against 90%(this value is fine) of total energy( now, the sum falls within
range). The Goertzel energy is squared magnitude (am i missing anything
here in the process?)

I am using a buffer length of 205 and 8000Hz sampling rate. As per the
specifications the minimum tone length has to be 40ms but can be 23ms.
Does that mean i have to detect the tone twice as i am using buffer length
of 25ms.

Able to detect DTMF signals with forward twist upto 4dB and reverse twist
upto 6dB but not upto 8dB. Any feedbacks?

-Raghu
```
```"raghav" <rax.s.in@gmail.com> wrote in message
news:kLOdnZL1695FQ8PZRVn-sQ@giganews.com...
>
> Able to detect DTMF signals with forward twist upto 4dB and reverse twist
> upto 6dB but not upto 8dB. Any feedbacks?
>
> -Raghu

Hello Raghu,

While the Bellcor spec states +4 and -8 dB of twist allowed - remember this
is defined for a phone to switch (one hop). For a two hop ( phone to switch
to destination equipment) situation you actually have to allow for larger
twists. Fortunately the use of digital networks diminishes the multihop
effect, but if you have analog lines at both ends just be aware of this
potential problem.

Clay

```