I thought that comment at EE Live! was good -- the one about you being a mechanical engineer who was doing electronics, while at the same time you are an aerospace engineer who is building submarines LOL
Just roll it out already!!! ;) I was going to say, the other way would be to do a series of bandpass filters in software. Because you are not looking for anything too sophisitcated, the filters do not need to have very high Q, and they could blead all over one another. Or you could go with a Cortex M4 part and be done with it. You know you want to! I think that there is a Cortex M4 part that is Arduino compatible.
@Max...being an old-school guy (Read: old fart) I would use a bunch of LM3915 dot/bar display drivers. You'd then have to get a bunch of narrow band or notch filters, one for each frequency. This would wind up being a considerable number of IC's, though you might me able to mux some of it....... so Aeroengineer's idea of FFTs is probably the better way to go (and that way you could probably work an FPGA into it as well....)
A Fast Fourier Transform (FFT) is certainly one option, but -- as you say -- it is computationally expensive -- espectially if all you have to play with is a 16MHz Arduino Mega with only 8KB of SRAM (sad face).
Happily, there are other alternatives (said Max (a) mysteriously and (b) as if he knew what he was talking about LOL).
Wait for Part 2 of this mini-series when all will (probably not) be revealed :-)
What you want to do is run an fft. This will ourput a real and imaginary component. You will want to get the magnitide of this be taking the square of the sum of squares. This is assuming that you already have the data in digital format. I forget why, but you get a mirroring effect, and because of this, you can cut out the last half of your data when you go to display it. you can also use a moving window buffer to process your data from, or just a fixed rate type buffer. This would be once the buffer got full, you then do the fft. Fft's are very computationally expensive, so you cannot do them that fast. You kight be looking at 1-10Hz depending on number of points. Oh and you want your buffer to be as big as the number of points your fft is, or if smaller you will want to zero pad it.
That falling dot is just the peek of the fft in that bin. You just jave it fall at some programmed interval, and reset once that value has been exceeded.
All this that I passed onto you is somewhat theoretical. I was looking to use this method for my rf project when I realized that I could not perform the calculation fast enough.