# DTMF Background

DTMF Description

DTMF stands for Dual-Tone Multi-Frequency. That is, a DTMF signal is one that consists of only the sum of two pure sinusoids at valid frequencies. We will provide a pathetic table describing the frequencies that compose the tones:

                    1209Hz 1336Hz 1477Hz 1633Hz
                      |      |      |      |
                     .-.    .-.    .-.    .-.
             697Hz -( 1 )--( 2 )--( 3 )--( A )
                     >-<    >-<    >-<    >-<
             770Hz -( 4 )--( 5 )--( 6 )--( B )
                     >-<    >-<    >-<    >-<
             852Hz -( 7 )--( 8 )--( 9 )--( C )
                     >-<    >-<    >-<    >-<
             941Hz -( * )--( 0 )--( # )--( D )
                     `-'    `-'    `-'    `-'

But, now there is the new, improved version! Everyone needs a Java Applet DTMF tone generator. Java programmers continue to amaze us by programming extra cool, totally useless applets. Say thanks to that crazy Canadian consulting group Can*Con.

Anyway, in DTMF, the tone '8' is represented with the sum of 852 Hz and 1477 Hz sinusoids. We understand that the energy of the sinusoids present in the generated tone should exceed the energy present at any other frequencies by 30dB. Also, notice that the DTMF frequencies are effectively divided into two subsets. One contains the lower four frequencies, and the other contains the upper four. Each DTMF tone is defined by the presence of exactly one of the frequencies from each of those subsets.

### CCITT DTMF Recommendations

    Frequency Tolerance:  Operation:     <= 1.5%
                          Non-Operation: >= 3.5%
    Signal Duration:      Operation:     40ms max
                          Non-Operation: 23ms min
    Signal Interruption:                 10ms max
    Twist:                Normal:        8db max
                          Reverse:       4db max

We assume these recommendations are among the most noteworthy, mostly because they are mentioned in our sources, especially [3]

It took us a while to decide what the each of the recommendations mean. Any frequency within 1.5% of the DTMF frequency should be detected. Frequencies with 3.5% error should never be detected. Inside the 1.5% - 3.5% range is a don't care. DTMF signals lasting 40ms should always be detected. Signals less than 23ms should never be detected. Inside the 23ms-40ms range is a don't care. DTMF signals that are interrupted for 10ms or less should not detect two separate signals. Twist is caused by a non-uniform power loss across the frequency spectrum. Normal twist is when low frequency power is greater than high frequency. Reverse twist is obviously the reverse condition. The detector must be reject 8db and 4db for normal and reverse twist respectively.

We have not found any DSP DTMF implementations that are able to meet these specifications. Some algorithms come much closer than others, but none meet the specifications completely. We are attempting to improve upon the current DTMF implementations and hopefully meet most (if not all) of the CCITT recommendations.