Finding Dominant Frequency and Phase using FFT
11 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Matt Gaidica
le 3 Oct 2020
Commenté : Bjorn Gustavsson
le 4 Oct 2020
This is stemming from a forecasting problem, but my fundamental assumption about FFT appears to be incorrect. Below, I'm generating a pure sinusoid at 5Hz for 5 seconds (top). The amplitude of the FFT (padded, middle) confirms the dominant frequency. However, I'm unclear why phase at 5Hz would not equal 0 using angle() (bottom)? The ultimate goal is to find the dominant frequency and phase of a noisy signal using FFT, then forecast using a pure, phase-shifted sinusoid.
Fs = 125;
plotS = 5;
t = linspace(0,plotS,plotS*Fs);
fmod = 5;
pdelay = 0;
X = sin((2*pi*fmod*t) + pdelay);
close all
ff(800,600);
subplot(311);
plot(t,X);
hold on;
xlabel('Time (s)');
ylabel('Amplitude');
L = numel(t);
nPad = 5;
n = (2^nextpow2(L)) * nPad;
Y = fft(X,n);
f = Fs*(0:(n/2))/n;
P = abs(Y/n).^2;
A = angle(Y);
grid
subplot(312);
plot(f,P(1:n/2+1))
xlabel('Frequency (f)')
ylabel('|P(f)|^2')
xlim([0 10]);
grid
subplot(313);
plot(f,A(1:n/2+1));
xlabel('Frequency (f)')
ylabel('Phase (rad)');
xlim([fmod-2 fmod+2]);
grid
0 commentaires
Réponse acceptée
Bjorn Gustavsson
le 4 Oct 2020
Change your function to cos((2*pi*fmod*t) + pdelay) and re-run your code-snippet.
Also check what happens when you reduce your time-axis by one sample.
HTH
2 commentaires
Bjorn Gustavsson
le 4 Oct 2020
Yup. I forgot you zero-padded your time-series, if you remove that you will see the difference between a signal that is perfectly periodic over your intervall and one that is not.
Plus de réponses (0)
Voir également
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!