Mathematica: Discrete Fourier Transform

  • Mathematica
  • Thread starter Niles
  • Start date
  • #1
1,868
0
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?

Best,
Niles.
 

Answers and Replies

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

Code:
four = Fourier[{0.5,1.0,3.0,5.0}]
 
  • #5
129
0
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} ?
 
  • #6
1,868
0
But I really don't know what it is that Mathematica is calculating? The amplitudes or what?
 
  • #7
1,796
53
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.
 
  • #8
1,868
0
I will have to think about this. Thanks!
 
  • #9
422
1
If x(n) represents the time-domain data, the formula for an N-point discrete Fourier transform is given by

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

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:

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

the magnitude of X(m) is simply

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

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

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

Therefore, if you calculate the DFT of your data as

Code:
 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:
 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:
  • #10
1,868
0
I will try and experiment with it; I'll keep you posted. Thanks so far.
 

Related Threads on Mathematica: Discrete Fourier Transform

Replies
2
Views
491
Replies
2
Views
8K
Replies
0
Views
2K
Replies
1
Views
2K
Replies
25
Views
4K
Replies
5
Views
10K
Replies
1
Views
20K
Top