As a term project I would like to implement a simple DTMF decoder on a Blackfin BF533 EZ-KIT development board. I have the necessary matlab files to generate the tones and I have created 8 FIR bandpass filters, one for each DTMF frequency +/- 20Hz. I made these in Matlab using fdatool and output to a 16 bit signed integer.
I took Analog Device's Talkthrough example program and I apply these filters every SPORT0 ISR. The output for each filter goes into its own variable. From there, I assume that I could take the highest two bandpass filter outputs, look up the related DTMF value and I would have my project done.
However it doesn't appear to be working that way. I've been doing as much research as possible (surprisingly minimal information for this specific topic) and have heard mention of "Goertzel's Algorithm", etc. I believe that kind of solution is above the scope of my course.
I have used my filter algorithm to successfully implement a high/low pass FIR filter so I don't believe the problem to be there. I have a code along the lines of
if(output_bp_697 > all the other output variables)
dtmf_row = 1;
When I throw a breakpoint on dtmf_row = 1 it trips randomly. My debugging process is to call the Matlab function to generate the tones, then hit Debug > Run. It is successfully passing the tones through to my output speakers.
Is my approach correct? Does anyone have any hints?