For a project, I was asked to create a DTMF detector on Matlab. I know that the audio sample that will be provided will have 4 tones maximum, possibly less, and that the audio begins with a 0.1 second silence. Each of the tones lasts 0.5-2 seconds, and a silence of 0.1-1.5 seconds follows it. I do not for sure what the length of the file will be, as it may contain anything from 1-4 tones.

I understood that I first need to separate each tone in order to run it through a bank of band pass filters and determine its two original frequencies. This needs to be done by measuring the power/energy of the signal at various points. I looked at the documentation and found findchangepts(). Am I on the right path?

  • $\begingroup$ what documentation? $\endgroup$ – user28715 May 14 '19 at 8:31
  • $\begingroup$ Matlab documentation! I forgot to mention that I was using it. $\endgroup$ – rddead May 14 '19 at 9:21
  • $\begingroup$ i don’t think you need to separate the tones prior to filtering. DTMF modems didn’t do that $\endgroup$ – user28715 May 14 '19 at 9:41
  • $\begingroup$ even with multiple tones? I fail to see how I can pass the entire signal through and hope my function picks up all the tones. $\endgroup$ – rddead May 14 '19 at 17:07
  • $\begingroup$ for a modem, you use a bank of filters $\endgroup$ – user28715 May 14 '19 at 17:12

From my understanding of the problem, you don't need to separate tones before passing to the bandpass filters(assuming that bandpass filters allows only DTMF tones to pass through).

Pass the audio samples through DTMF bandpass filter, if any DTMF tones are present the filtered output will have non zero energy/power, if the tones are not present the energy/power of filtered audio will be close to zero. this criteria can be used to detect silence.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.