I haven't looked at the code, but I'd recommend using a bank of Goertzel
filters -
http://www.google.com/search?hl=en&lr=&ie=ISO-8859-1&q=Goertzel+filter+DTMF&btnG=Google+Search
The basic idea is that you have 8 filters (for the 4 row and 4 column
frequencies), as well as 8 filters looking at the first harmonic of the
8 frequencies. You then compare the energies in each frequency - if you
see significant energy in the harmonic filter bank, discard the signal.
That prevents you from detecting speech as DTMF, since speech will
usually have harmonics that a good DTMF signal won't.
Since the Goertzel filters are simple, they can be implemented in fixed
point math rather than floating point. At work, we've done this on a
Motorola 56301 DSP, which is a fixed-point DSP. I think there's an app
note from Moto on this - I'll check when I get into work today.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/