Electronic – arduino – How to detect a number of frequencies with minimal circuitry

arduinofftfrequency-measurement

I'm working on a project now where my goal is to be able to pick out selected frequencies (between 20Khz and 250Khz) from an input signal and transmit the strength of each of those frequencies to a data visualizer in real time. The frequencies I will create myself and inject into the signal which otherwise has unwanted ambient electrical interference and other noise components. What I'm aiming for is something similar to the graphic equalizer LED bargraphs you would find on an old stereo, but detecting frequencies above the audio range.

Right now I'm working with an ATMEGA328 (arduino) that is running a fixed-point FFT algorithm on the incoming signal and sending the data via an XBee radio to my computer. However, the microprocessor isn't fast enough to be able to analyze for the high frequencies I'm looking to detect..

Does anyone have any advice on how I might do this? Using analog hardware or a dedicated IC perhaps?

Many thank yous!

Best Answer

If you know what frequencies you're looking for, run a Goertzel for each of those frequencies. https://en.wikipedia.org/wiki/Goertzel_algorithm This is much more efficient than an FFT. This algorithm is used, for example, to detect tones in touch-tone phone systems.