Why is DFT phase different from FFT phase?

If I compute the DFT using the definition given on Wikipedia, real components relate directly to cosine amplitudes and imaginary components relate directly to sine amplitudes.
I.e.
dft(sin(t))= [0, 0-0.5i, 0, 0, 0, 0, 0, 0+0.5i]
where
t=linspace(2*pi/8,2*pi,8);
but using the fft function:
fft(sin(t))/8= [0, 0.3536-0.3536i, 0, 0, 0, 0, 0, 0.3536+0.3536i]
The magnitudes are equal but I can no longer seperate sine and cosine components with FFT. Is there any way I can pre-treat my data so I can use FFT to give the same outputs as DFT?

 Respuesta aceptada

Wayne King
Wayne King el 27 de Nov. de 2013
The DFT is a linear operator from \mathbb{C}^N to \mathbb{C}^N.
Your vector sin(t) for the argument values you have defined is
0.7071
1.0000
0.7071
0.0000
-0.7071
-1.0000
-0.7071
-0.0000
The 2nd element of the DFT is equal to inner product of your vector and
W = exp(1i*(2*pi)/8*(0:7)');
So
X = [ 0.7071
1.0000
0.7071
0.0000
-0.7071
-1.0000
-0.7071
-0.0000];
dot(W,X)
Why do you expect any other result? The output of fft() matches exactly what you would expect from the DFT (given the definition used in MATLAB).

1 comentario

Aaaahhhh yes, I knew something wasn't right. I had used
W=exp(1i*(2*pi)/8*(1:8)');
and it matched up perfectly because I was using
t=linspace(2*pi/8,2*pi,8);
when I should have been using
t=linspace(0,2*pi-2*pi/8,8);
A basis of slightly shifted sine waves to match up to my slightly shifted sine wave. To be fair, I should have probably waited until morning before posting the question.
Thanks for the help, I can sleep happy now

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Fourier Analysis and Filtering en Centro de ayuda y File Exchange.

Preguntada:

el 27 de Nov. de 2013

Comentada:

el 27 de Nov. de 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by