Finding the dominant frequency of a time series data using fft matlab

24 vues (au cours des 30 derniers jours)
David Gureya
David Gureya le 17 Mar 2015
Commenté : Star Strider le 7 Août 2024
I'm trying to determine the dominant frequency of a time series data using the fft function in matlab. my data is represented as a vector while my time scale is also a vector. Below is my sample code:
Fs = 10; % sampling frequency 1 kHz
t = [0,10,20,30,40,50,60,70,80,90]; % time scale
x = [10,120,130,120,120,100,123,456,78,89]; % time series
plot(t,x), axis('tight'), grid('on'), title('Time series'), figure
nfft = 512; % next larger power of 2
y = fft(x,nfft); % Fast Fourier Transform
y = abs(y.^2); % raw power spectrum density
y = y(1:1+nfft/2); % half-spectrum
[v,k] = max(y); % find maximum
f_scale = (0:nfft/2)* Fs/nfft; % frequency scale
plot(f_scale, y),axis('tight'),grid('on'),title('Dominant Frequency')
fest = f_scale(k); % dominant frequency estimate
fprintf('Dominant freq.: true %f Hz, estimated %f Hznn', f, fest)
fprintf('Frequency step (resolution) = %f Hznn', f_scale(2))
The problem is that my dominant frequency here is 0 which am not quite sure if it is correct. Could some provide feedback on this please especially if the Fs matters alot in this case!
  4 commentaires
Mehdi
Mehdi le 7 Août 2024
hi guys. I have a question. I have a time series of data and using the FFT, I have found the dominant frequencies. FFT sohws me some frequencies that have high power. However, I know that some of thos frequencies are wrong. I mean my periodic time series does not contain all frequencies that are shown by FFT. Just some of them. is there any way to choose exactly the correct frequencies?
thank you
Star Strider
Star Strider le 7 Août 2024
@Mehdi — Be sure that you are plotting a one-sided Fourier transform and using a frequency vector that is appropriate for it.

Connectez-vous pour commenter.

Réponse acceptée

Star Strider
Star Strider le 17 Mar 2015
The ‘frequency’ at 0 is the mean of your signal (or D-C offset). To eliminate it, subtract the mean before doing the fft.
This gives you the result you want:
Fs = 10; % sampling frequency 1 kHz
t = [0,10,20,30,40,50,60,70,80,90]; % time scale
x = [10,120,130,120,120,100,123,456,78,89]; % time series
x = x - mean(x); % <= ADDED LINE
plot(t,x), axis('tight'), grid('on'), title('Time series'), figure
nfft = 512; % next larger power of 2
y = fft(x,nfft); % Fast Fourier Transform
y = abs(y.^2); % raw power spectrum density
y = y(1:1+nfft/2); % half-spectrum
[v,k] = max(y); % find maximum
f_scale = (0:nfft/2)* Fs/nfft; % frequency scale
plot(f_scale, y),axis('tight'),grid('on'),title('Dominant Frequency')
fest = f_scale(k); % dominant frequency estimate
fprintf('Dominant freq.: true %f Hz, estimated %f Hznn\n', fest, fest)
fprintf('Frequency step (resolution) = %f Hznn\n', f_scale(2))
  4 commentaires
Vanisa Syahra
Vanisa Syahra le 22 Juin 2020
hello, I have the same problem with David, but here, eventhough I subtract the signal with the mean, I still get the zero frequency which has the highest power. Why this still happen? i am pretty sure that the dminant freq is not 0.
Walter Roberson
Walter Roberson le 22 Juin 2020
Is it possible that you have a 2D signal and that you are subtracting the mean along the wrong dimension?

Connectez-vous pour commenter.

Plus de réponses (1)

Eric Marshal
Eric Marshal le 4 Mai 2017
hello mr. David Gureya, may i ask you how you get 512 as NFFT ? are the n(number) from time series is diffrent with NFFT ?

Catégories

En savoir plus sur Fourier Analysis and Filtering dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by