47 views (last 30 days)

Show older comments

Dear all,

I often work with FFT and I like the fft function from Matlab a lot:

However, recently I encoutered a possible problem with the current implementation of Matlab:

In the standard calculation of the frequency axis that I extracted from the above link:

f = Fs*(0:(L/2))/L;

Fs is the sampling frequency and L is the length of the signal, it seems that the frequency step (the distance between two consecutive frequencies in the frequency axis) is Fs/L. This is usually not a problem if L is large enough, for example in this case. However, when I deal with small L, for example L = 5, then I realize that the frequency step is actually not the inverse of the total time window, which it should theoretically be. If I want to do this theoretically perfect, I had to use Fs/(L-1) but then this is not compatible with how the fft is done in Matlab, i.e. I got inconsistency of frequency peaks' position. It seems to me that the fft was not implemented with "perfect theoretical consideration".

Could you please advise/comment? Or you think I missed something?

Thanks and best regards,

Trung

Prabhan Purwar
on 21 Mar 2021

Hi,

As the frequency resolution is defined as Fs/L, both the implementation and example seem rightly scaled and working as expected. If you can provide the calculations and steps you have tried, documents you have referred it will be helpful in resolving and understanding the issue more clearly.

Thanks

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

Start Hunting!