Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

FFT in the real world

  1. Sep 22, 2013 #1
    Hi
    so I have a working FFT. I tested it but inputting sin waves in to it.
    will not i am inputting sound waves from a Mic and it is not looking to do...
    example:
    I am using to youtube vid

    it outputs B7 (Musical note) b′′′′ Four-lined 3951.066 Frequency
    and I run my program this is what I am getting 3951.066

    I am getting more action around 41951, 42112, 20062, and 24035

    then
    3951.066

    so is there anything I am add to my FFT that would help ?

    oh I am sampling at 44100 Hz
    and my N = 88200

    I also tried this one
    http://www.youtube.com/watch?v=tgMQOAWeVs0&list=PLE558EB4A35F28F6A

    and I got a higher magnitude from 424.5 and 435.5
    then
    from 528
    do you think there too much noise coming from the computer speakers ?
     
    Last edited by a moderator: Sep 25, 2014
  2. jcsd
  3. Sep 23, 2013 #2

    DrClaude

    User Avatar

    Staff: Mentor

    As I wrote in your other thread, you most probably made an error in your program.
     
  4. Sep 23, 2013 #3

    jim mcnamara

    User Avatar

    Staff: Mentor

    If you want meaningful help please consider posting your code.
     
  5. Sep 23, 2013 #4
    public polar1[] FFT(polar1[] x)
    {
    int N2 = x.Length;
    polar1[] X = new polar1[N2];
    if (N2 == 1)
    {
    return x;
    }
    polar1[] odd = new polar1[N2 / 2];
    polar1[] even = new polar1[N2 / 2];
    polar1[] Y_Odd = new polar1[N2 / 2];
    polar1[] Y_Even = new polar1[N2 / 2];


    for (int t = 0; t < N2 / 2; t++)
    {
    even[t].img = x[t * 2].img;
    even[t].real = x[t * 2].real;
    odd[t].img = x[(t * 2) + 1].img;
    odd[t].real = x[(t * 2) + 1].real;
    }
    Y_Even = FFT(even);
    Y_Odd = FFT(odd);
    polar1 temp4;

    for (int k = 0; k < (N2 / 2); k++)
    {
    temp4 = Complex1(k, N2);
    X[k].real = Y_Even[k].real + (Y_Odd[k].real * temp4.real);
    X[k + (N2 / 2)].real = Y_Even[k].real - (Y_Odd[k].real * temp4.real);
    X[k].img = Y_Even[k].img + (Y_Odd[k].real * temp4.img);
    X[k + (N2 / 2)].img = Y_Even[k].img - (Y_Odd[k].real * temp4.img);
    }

    return X;
    }


    public polar1 Complex1(int K, int N3)
    {
    polar1 temp;
    double temp1;
    temp1 = (2D * Math.PI *K) / N3;
    temp.real = Math.Cos(temp1);
    temp.img = Math.Sin(temp1);
    return temp;

    }


    public struct polar1
    {
    public double real;
    public double img;

    };
     
  6. Sep 24, 2013 #5
    DrClaude

    have you had time to look at the code ?
    what do you think?
    that is the same code i use in my other thread
     
  7. Sep 24, 2013 #6

    DrClaude

    User Avatar

    Staff: Mentor

    I'm sorry, but I don't have the patience to read through an implementation of a FT. If you just need the result, then use one of the many wonderful implementations available (GSL, FFTW, etc.). If you are doing it to learn about numerical methods, then roll up your sleves and debug the code as if there was no tomorrow. You will probably not learn as much if someone else just points out the error.
     
  8. Sep 24, 2013 #7
    that is cool.. but I do think it is working
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: FFT in the real world
  1. Reverse FFT (Replies: 1)

  2. FFT question (Replies: 6)

  3. Phase of FFT (Replies: 4)

Loading...