簡體   English   中英

在Matlab上使用FFT計算和繪制信號頻譜

[英]Computing and plotting the spectrum of a signal using FFT on Matlab

我在Matlab上使用FFT計算信號頻譜時缺少某些東西。 我的代碼:

%% compute the spectrum of the data (data(t))
L = length(time); % length of the sample
NFFT = 2^(nextpow2(L)-1); % Next power of 2 from length of y
Y = fft(data,NFFT);%/NFFT;%L;
Fs = 1/(mean(time(2:end)-time(1:end-1)));  % compute the sampling frequency
f = Fs/2*linspace(0,1,NFFT/2+1);
loglog(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of My Data')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

你願意告訴我我在哪里搞砸了嗎?

我嘗試使用相同信號的兩個采樣(相同采樣頻率;在兩個不同的時間范圍0-10和0-100)檢查算法算法是否工作:

fs=1000;
time10 = [0:1/fs:10];
time100 = [0:1/fs:100];
data10 = sin(2*pi*0.23 .*time10)+cos(2*pi*12 .*time10);
data100 = sin(2*pi*0.23 .*time100)+cos(2*pi*12 .*time100);

我想這兩個頻譜應該supperpose但他們不...至於這里看到: https://www.dropbox.com/s/wfols9o409pr94u/FFT_spectrum_StackOverflow.png?dl=0 https://www.dropbox.com/ s / a8vmzwto6x4130w / FFT_spectrum_StackOverflow.fig?dl = 0

謝謝

好消息是,您自己對頻譜的計算沒有任何問題。

問題在於,通過查看不同長度的樣本,您實際上可以同時查看兩個不同的樣本。 在時域中,它們可以看作是無限長的正弦曲線與不同長度的矩形窗口相乘的結果。

在頻域中,無限長的連續時間正弦信號的頻譜會與矩形窗口的頻譜發生卷積。 在不同的窗口長度下,這些窗口的相應光譜具有不同的寬度(對於較長的矩形窗口,光譜范圍更窄)。 結果,無限長正弦信號頻譜中的尖峰將散布在不同的帶寬上。 這正是您所看到的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM