Saving the Spectrum of an Audio Signal, FFT Example

Saving the Spectrum of an Audio Signal, FFT Example

Postby lore52 » Mon Jan 21, 2013 3:11 pm

Hello,

I am a novice and I am trying to save the spectrum of a signal after running the FFT example code. I have sent an audio signal from my computer's headphone jack to line_in jack of the Audio Codec Shield using a male-male audio cable.

Then I opened the serial monitor and set the appropriate baud rate. I saw some characters flashing across the window and after a while the IDE froze.

Is there a method that I can implement to save the data in a human-readable format? I tried to use Processing and the Graph example given here http://arduino.cc/en/Tutorial/Graph

I will appreciate it if someone can point me to the right direction. Thanks in advance.
lore52
 
Posts: 1
Joined: Mon Jan 21, 2013 1:43 pm

Re: Saving the Spectrum of an Audio Signal, FFT Example

Postby guest » Tue Jan 22, 2013 1:18 am

it might be that too much data is coming in too fast for the computer to handle it, and then it overflows the buffer on the ide. try putting a delay(100) after you call the fft_run() function. the data will probably also not be in a human readable form, so you can try using serial.println() instead of the serial.write() that the example code uses.
guest
Site Admin
 
Posts: 449
Joined: Thu May 20, 2010 11:58 pm

Re: Saving the Spectrum of an Audio Signal, FFT Example

Postby guest » Wed Jan 23, 2013 12:36 am

i just remembered that you said you are using the codecshield with this. delay() wont work, as it will mess up the data transfer to the codec. instead, only send out data every so often. change your loop code to this:

Code: Select all
void loop() {
  while(1) { // reduces clock jitter
    while(flag); // wait for samples to be collected
    counter--;
    if (counter == 0) {
      fft_window(); // window the data
      fft_reorder(); // reorder for fft input
      fft_run(); // process fft
      fft_mag_log(); // take output of fft
      Serial.println(255); // send out a start byte
      // used for alignment, may not be needed
      for (byte i = 0; i < FFT_N/2; i++) {
        Serial.println(fft_log_out[i], DEC); // send out data bytes
      }
      counter = 256; // this adjusts the update rate
    }
    flag = 1; // tell the codec that processing is done
  }
}


note that the serial.write() has been changed to serial.println() so its human readable, and the counter variable is added. you can change how often the data is sent by change what you set it to at the end of the loop. be sure to declare counter at the beginning of your sketch

int counter = 0;
guest
Site Admin
 
Posts: 449
Joined: Thu May 20, 2010 11:58 pm


Return to Audio Codec Shield

Who is online

Users browsing this forum: No registered users and 1 guest


cron