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

Homework Help: Evaluate a function via fast fourier transform using Matlab

  1. Sep 25, 2006 #1
    Hi all,
    I'm new to Matlab, and I'm trying to evaluate a function via fast fourier transform using Matlab, then compare the values at each gridpoint with the exact value.

    The function is
    y1 = cos(x)-20*sin(5*x)+6*sin(12*x)
    on the interval [-pi, pi], using n = 9 gridpoints.

    I first tried to find the Fourier coefficients F1:
    n = 9;
    x = -pi:(2*pi/(n-1)):pi;
    y1 = cos(x)-20*sin(5*x)+6*sin(12*x);
    F1 = fft(y1);

    I checked the values of my coefficients with the formula given by my teacher:
    F1_k = SUM[y1(x_j)*exp(pi*i*j*k/m)]
    where m = n/2, k = 0, 1, ..., 2m-1, and SUM is from j = 0 to j = 2m-1.
    The coefficients matched.

    Then I tried to compute the function F(x) at each grid point x_j using the formula
    F(x) = (1/m)*SUM(F1_k*exp(i*k*x))
    where SUM is from k = 0 to 2m-1
    (This is the formula given by my teacher.)

    for j=1:1:n
    for k=1:1:n

    However, the values for F(x) that I got were

    -0.2222 -14.8231i
    -15.3243 +36.4597i
    22.2864 -22.5086i
    -4.6765 + 1.8450i
    -2.0000 + 0.0000i
    -30.6032 -12.5842i
    26.5710 +26.7933i
    -7.6067 -17.8277i
    -0.2222 -14.8231i

    instead of the actual values


    What is wrong with my program?

    Thank you.

  2. jcsd
  3. Sep 25, 2006 #2
    For starters, you should avoid using j as a variable, since in Matlab, both i and j denote the imaginary unit.

    I venture to guess that your exercise is to verify that the FFT operation is reversible where in the later part of your work, you had used the IFFT to recover the original signal. I do not see, however, the logic behind the given function...

    In particular, why the x in the exponential? I would advise you, instead, to stick to the conventional definition of the IFFT, e.g., http://mathworld.wolfram.com/DiscreteFourierTransform.html" [Broken].

    The following code should do the trick:
    Code (Text):
    for j=1:1:n
    for k=1:1:n
    Last edited by a moderator: May 2, 2017
  4. Sep 25, 2006 #3
    The goal of my program was simply to compute the value of the function y1 using FFT at each grid point x, where x = -pi:(2*pi/(n-1)):pi. For example, if n = 9, I would then get 9 values of F(x) for 9 grid points.

    Thanks a lot for your help, the program works now!
  5. Sep 26, 2006 #4
    Well yes, but it is still incorrect to plug the x into the IFFT as is.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook