MATLAB Answers

How come the frequency vector starts at 0 for even length FFT ?

83 views (last 30 days)
Marguerite Marnat
Marguerite Marnat on 1 Apr 2016
Edited: Galdir Reges on 27 Dec 2019 at 19:20
In many examples including the documentation about fft, the one-sided frequency vector is defined as: f = Fs*(0:(L/2))/L where L=length of the FFT. However it seems to me that for even-length FFT, the DC component is missing and so on. So you would plot at 0 the component computed for (+delta f /2 ) which is fairly ok because it is averaged of the 2 points around 0, but also the component plotted at frequency (+delta f) is the one computed for (+3.delta f/2), which is false. How do you explain that ?
And what would be the definition of a two-sided frequency vector for both even and odd lengths ? None of the answers provided on the forum are satisfying... Thank you for your help.

  0 Comments

Sign in to comment.

Accepted Answer

Rick Rosson
Rick Rosson on 2 Apr 2016
Edited: Rick Rosson on 2 Apr 2016
Regardless of whether L is even or odd, the first element of the vector returned by fft is always the DC component. No matter what.
So, using the full frequency span, the frequency vector is computed as
L = length(X);
dF = Fs/L;
f = dF*(0:L-1)';
This code is correct for any length L, whether even or odd.
For the one-sided span, the code becomes:
f = dF*(0:floor(L/2)-1)';
For the two-sided span centered on DC, the code becomes:
f = (-Fs/2:dF:Fs/2-dF)' + mod(L,2)*dF/2;
Again, this code is correct for both even and odd L.

  1 Comment

Galdir Reges
Galdir Reges on 27 Dec 2019 at 19:17
I think this solution is discarding the highest frequency on odd sized vector.
maybe the solution is using ceil and not floor

Sign in to comment.

More Answers (0)

Sign in to answer this question.

Tags