I want a FFT plot of a .mat file at 8000Hz (in 3 seconds) to find the dominant frequencies but I'm not getting an peaks. Whats wrong with the codes?Thank you very much for any help!

3 次查看(过去 30 天)
if true
% code
end
Here is the code I have but getting no peaks:
Fs = 8000; % Sampling frequency.
t = 0:1/Fs:3-1/Fs;
x = cos(2*pi*1000*t)+rand(size(t));
N = length(x);
xdft = fft(x);
xdft = xdft(1:N/2+1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:Fs/length(x):Fs/2;
plot(freq,10*log10(psdx)) grid on title('Periodogram Using FFT') xlabel('Frequency (Hz)') ylabel('Power/Frequency (dB/Hz)')
  2 个评论
Kristy Kwok
Kristy Kwok 2018-4-1
Hi Star, Thank you for your reply. I wasnt sure if my coding was correct. The peak at 1000Hz is because I put 1000 in this line: x = cos(2*pi*1000*t)+rand(size(t)); I have tried to put 800 and the peak will be at 800Hz. I am not sure how to confirm if the code is correct.

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2018-4-1
My pleasure.
Your code is correct if it produces the result you expect. You have calculated the ‘freq’ frequency vector correctly. I slightly revised your code to plot three different frequencies, at 800, 1000, and 1200 Hz. You can see all of them clearly in the plot (and you can add as many frequencies to the ‘Fvct’ vector as you want):
Fs = 8000; % Sampling frequency.
t = 0:1/Fs:3-1/Fs;
Fvct = [800 1000 1200];
x = cos(2*pi*Fvct(:)*t);
x = sum(x) + rand(size(t));
N = length(x);
xdft = fft(x);
xdft = xdft(1:N/2+1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:Fs/length(x):Fs/2;
plot(freq,10*log10(psdx))
grid on
title('Periodogram Using FFT')
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
A slightly different implementation is given in the R2015a documentation on the fft (link) function.
  10 个评论

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Spectral Estimation 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by