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

Discrete Fourier Transform of Even Function

  1. Apr 5, 2012 #1
    I'm confused about the DFT of the data, fn = cos(3[itex]\pi[/itex]n/N) for n=0,1,...,N. It is definitely an even function, and I read that the fourier coefficients of an even function is real. But when I take the FFT of this in Matlab I get complex numbers, not real numbers. What am I missing?

    Thanks !
  2. jcsd
  3. Apr 5, 2012 #2


    User Avatar
    Science Advisor

    The Fourier coefficients are real. I can only guess that there may be something wrong in the way you are using Matlab or Matlab may have an error.
  4. Apr 5, 2012 #3
    The code is pretty simple:

    n = [0:N-1];
    f = cos(3*pi*n/N);
    F = fft(f,N);

    The resulting F is:
    1.0000 + 4.1412i
    1.0000 - 5.6858i
    1.0000 - 2.0586i
    1.0000 - 1.2027i
    1.0000 - 0.7609i
    1.0000 - 0.4596i
    1.0000 - 0.2180i
    1.0000 + 0.2180i
    1.0000 + 0.4596i
    1.0000 + 0.7609i
    1.0000 + 1.2027i
    1.0000 + 2.0586i
    1.0000 + 5.6858i
    1.0000 - 4.1412i
  5. Apr 5, 2012 #4


    User Avatar
    Science Advisor
    Gold Member

    This function is not even--remember that the DFT makes the hidden assumption that your signal is periodic outside of the specified ordinates, so f(-16:-1) = f(0:15). Your function is mostly (but not exactly) odd, so you mostly have an imaginary transform, but it is complex. You have a discontinuity between n=-1 and n=0 (and also n=16, 17), resulting in a smeared spectrum.
  6. Apr 5, 2012 #5
    I understand... except the part where you say the function is not exactly odd. Based on what you're saying, if we extend the signal beyond n=0..N-1 to make it periodic, then isn't it exactly odd (regardless of any discontiniuity)?

    Thanks all for the responses!
  7. Apr 5, 2012 #6


    User Avatar
    Science Advisor
    Gold Member

    Not quite. Try plotting it in Matlab. You have f(0)=1, so to be exactly odd you'd need f(-1)=f(15) =-1. It's not.

    EDIT: Ah, that's where the real 1's come from.

    Imagine that you take your sequence as is except you set f(0)=0--now it's exactly odd, because f(1)=-f(-1)=-f(15). So the transform of this sequence is purely imaginary.
    The sequence {f(0)=1, f(1:15)=0} is even so its spectrum is pure real. In fact, this sequence is an impulse, so its spectrum is all ones.
    Add them together to form the total sequence you wrote. Since DFT is a linear operation, the total spectrum is the sum of the individual spectra, one of which is imaginary and the other of which is all real ones.
    Last edited: Apr 5, 2012
  8. Apr 5, 2012 #7
    Why do we need f(-1)=f(15) = -1 ?

    We have f(-1)=f(15) by periodic extension. And f(-1)= -f(1) = -0.8315.

    We're talking about odd meaning antisymmetric about the f axis (n=0), correct?
  9. Apr 5, 2012 #8


    User Avatar
    Science Advisor
    Gold Member

    Right. f(15)=f(-1)=-0.83 and f(1)=+0.83, etc., so the sequence is exactly odd if f(0)=0.
  10. Apr 5, 2012 #9
    I was missing the f(0)=0 requirement. Makes sense now.

    Thanks a lot for the insight!
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook