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

Mathematica: Discrete Fourier Transform

  1. May 10, 2010 #1
    Hi all

    I have a function F, which depends on a discrete variable x, and I need to Fourier Transform it. I have put all the values of F in a table.

    Then I have used the command "Fourier" on the table, which - according to http://reference.wolfram.com/mathematica/ref/Fourier.html - results in the discrete Fourier Transform. But the new table only contains pure numbers, no phase factor. Why is that, and is there a way to include the phase?

  2. jcsd
  3. May 11, 2010 #2
    Does anybody know this? I feel bad "bumping" the thread, but I am in real trouble if I can't work this out.
  4. May 11, 2010 #3
    Post the relevant code.
  5. May 11, 2010 #4
    Here you go (the values of F are in the table)

    Code (Text):

    four = Fourier[{0.5,1.0,3.0,5.0}]
  6. May 12, 2010 #5
    Mathematica {4.75+0 i,-1.25-2. i,-1.25+0 i,-1.25+2. i}
    Why not {9.50 + 0 i, -2.50 + 4. i, -2.50 + 0.i, -2.50 - 4.i} ?
  7. May 12, 2010 #6
    But I really don't know what it is that Mathematica is calculating? The amplitudes or what?
  8. May 12, 2010 #7
    Hi Niles. It's easy to see what Mathematica is computing. Just do a help on Fourier and hit the more info button. For a list {u_n}, Mathematica creates a list {v_n} such that:

    [itex]v_s=\frac{1}{\sqrt{n}}\sum_{r=1}^n u_r e^{2\pi i(r-1)(s-1)/n}[/itex]

    so for your list {0.5, 1.0, 3.0, 5.0},

    the first value computed by Mathematica is:

    [itex]v_1=\frac{1}{\sqrt{n}}\sum_{r=1}^n u_r e^{2\pi i(r-1)(1-1)/n}=4.75[/itex]

    Don't know what you mean by phase factor or amplitude though. Try reading through all the various options in the More info. Maybe you'll spot something that can help you.
  9. May 13, 2010 #8
    I will have to think about this. Thanks!
  10. May 14, 2010 #9
    If x(n) represents the time-domain data, the formula for an N-point discrete Fourier transform is given by

    X(m) = \sum_{n=0}^{N-1} x(n) e^{-2\pi imn/N}, \qquad m=0\ldots N-1.

    You'll often be interested in the magnitude and power contained in each X(m). If you represent an arbitrary DFT output value, X(m), by its real and imaginary parts:

    X(m) = X_\textrm{real}(m) + iX_\textrm{imag}(m) = X_\textrm{mag}(m) \textrm{ at an angle of }X_\theta(m)

    the magnitude of X(m) is simply

    X_\textrm{mag}(m) = |X(m)| = \sqrt{X_\textrm{real}(m)^2 + X_\textrm{imag}(m)^2}.

    The phase angle of X(m) is then defined by

    X_\theta(m) = \tan^{-1} \left(\frac{X_\textrm{imag}(m)}{X_\textrm{real}(m)}\right).

    Therefore, if you calculate the DFT of your data as

    Code (Text):

     In[1]:= four = Fourier[{0.5,1.0,3.0,5.0}]
    Out[1]:= {4.75 + 0. I, -1.25 - 2. I, -1.25 + 0. I, -1.25 + 2. I}
    the phase is obtained simply as

    Code (Text):

     In[2]:= phases = ArcTan[Im[four]/Re[four]]
    Out[2]:= {0., 1.0122, 0., -1.0122}
    Is that what you're looking for?
    Last edited: May 14, 2010
  11. May 14, 2010 #10
    I will try and experiment with it; I'll keep you posted. Thanks so far.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook