Go Down

Topic: Color Organ / Spectrum Analyzer using fixed point FFT. (Read 8968 times) previous topic - next topic


Feb 10, 2011, 10:07 pm Last Edit: Aug 14, 2011, 04:07 pm by Magician Reason: 1
  The my basic idea was to create color organ / spectrum analyzer on arduino board, trying to minimize using external components, like analog filter, LED display drivers, etc.

Tweaking around web-camera for couple days, I was able to film a "video" for project. And I find out it's not easy to get it right. There are two minor problem still exist:
- delay between sound track and film;
- color temperature of CMOS sensor in the camera is not correct.
Enjoy the show  :smiley-red:    Video on youtube:


For guys, who not interested in hardware part of the project and 'd like to use the software part only in different application ( interactivity/processing ), they can just pull data over serial link, as it was done for debugging purposes, with "f" command.

After FFT-processing input data array x, generated output array fx with  32 elements, "bins", each representing a range of frequencies. The width of a bin equals:
D = 1 / T, where T is input array sampling timing, in our case T = 14.6 millisecond.
D = 1 / (14.6 * 10^-3) = ~ 70 Hz.
So, the value of fx[0] is amplitude DC offset up to 35 Hz;
fx[1] is amplitude in a range   35 <---> 105 Hz;
fx[2] is amplitude in a range 105 <---> 175 Hz;
fx[3] is amplitude in a range 175 <---> 245 Hz;
fx[4] is amplitude in a range 245 <---> 315 Hz;
fx[31] is amplitude in a range 2135 <---> 2170 Hz;
   Upper limits could be extended up to 76 KHz.(*)

Sum up first 10 fx bins, I'm getting 35 <---> 735 Hz frequency range for red LED's, from 11-th to 20-th consequently provides me 735 <---> 1435 Hz  for green LED's, and from 21-st to 31-st 1435 <---> 2170 Hz range for blue LED's.

Now hardware part.
I've used Christmas LEDs, that left over since last holiday  :)
This is why I put 3 of them in each string, and have to use ULN2003 with 12V power source. Basically, all you  need 12 LED's ( 4 - red, 4 - green and 4 blue ) and 12 resistors,
connect led + resistor between output of arduino board  and ground.

For sound input I used a kit MK136 ( mic + IC NE5532 ), powered up from arduino board +5V,
No DC blocking capacitor on the output, resistor 47 k Ohm changed to 220 k Ohm in order increase sensitivity. And it has 3.5 mm jack audio connector.

Sparkfun's breakout board for electret microphone will works as well:  

I was not able to post code on this page as it above the limits (15000), plz. check on :


That it for now, will come back to answer your questions if you have any.


Go Up