DTMF decoder

Sep 05, 2006 29 Replies

Do you mean: a) 2 RC bandpass filters to separate the two groups of (high and low) frequency. b) Or maybe is enough to sample the wave as it comes in and the filter is used only for noise reduction.

if (a) then how do you deal with speech-rejection?

thanks ivan

No. Just a simplest bandpass with two resistors and two capacitors. BW ~ 0.5...1.7kHz

Yes. The power frequency is the main concern.

In the appnotes, there is bullshit about the second harmonics. Ignore it, use the simple logic:

  1. Find the three max. amplitudes: A0 > A1 > A2.
  2. A0 and A1 must belong to the different frequecy groups.
  3. A2/A1 must be lower then the threshold.

This perfectly works.

Vladimir Vassilevsky

DSP and Mixed Signal Design Consultant

formatting link

Hi Vladimir,

I have another doubt now... I have 10 freqs (2 more for the handshaking), if I add all the periods for each freq I get about 9ms, this is the time needed to scan all tones once for one period only. Each DTMF tone last 50ms, this means that I can scan each tones max 5 times. But I have two square waves to scan (sin/cos), hence I can only scan each tone for 2 periods only. Would this be enough to get sensible results?

Thanks ivan

if

needed

to

It sounds like you're expecting to do the tone searches sequentially. I don't think that's what is intended. I expect that for an input you multiply by sin *and* cos and accumulate the two results. With the same data input to the same with sin and cos for the other frequencies too. At the end a sampling period you make a determination of the energies in each frequency (at least notionally by using the sum of squares of the sin and cos accumulators) making sure only one from each band is strong. Only if you run out of time would you consider filtering sequentially.

Peter

"Peter Dickerson" ha scritto nel messaggio news:dXWLg.11442$ snipped-for-privacy@newsfe5-win.ntli.net...

handshaking),

this

waves

Would

multiply

to

run

Ok! I see what you mean... thanks!

Hello Rafael,

No, I haven't but after finishing the technical expose this project is in the VC discussion phase. Those can take a while. If it results in a green light I'll have to calculate all that by hand since decent design SW for WDF doesn't seem to exist. Except for a collection of routines with scant to no documentation.

You can also do it on an MSP430. But only with HW multiplier (F427?). For some reason TI has decided to introduce new F2xx devices with a HW multiplier but taken out the 16bit ADC. Don't know why, banging my head on the table here...

Regards, Joerg http://www.analogconsultants.com

This doesn't seem to be a working solution. You should do all of the frequencies at the same time.

VLV

"Vladimir Vassilevsky" ha scritto nel messaggio news:Zr3Mg.16590$% snipped-for-privacy@newssvr29.news.prodigy.net...

handshaking), if

needed

this

waves to

Would

I am generating all the freqs by using arrays and calculating values to reduce the timing errors.. Is this the best way to do this?

ivan

You can have the complete DTMF decoder in C if you like. Please write to snipped-for-privacy@abvolt.com.

VLV

"Vladimir Vassilevsky" ha scritto nel messaggio news:2HeMg.9396$ snipped-for-privacy@newssvr14.news.prodigy.com...

I have it in C, but it uses Goertzel and Z8Encore is not fast enough. I want to try this other method and see if it fits into Z8Encore... otherwise will have to choose a faster mcu.

Do you mean pay for it?

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required