在 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);
我想这两个光谱应该假设,但他们不……如此处所示:https://www.dropbox.com/s/wfols9o409pr94u/FFT_spectrum_Whosebug.png?dl=0
https://www.dropbox.com/s/a8vmzwto6x4130w/FFT_spectrum_Whosebug.fig?dl=0
谢谢
好消息是你自己计算的频谱没有问题。
问题在于,通过查看不同长度的样本,您实际上是在同时查看两个不同的样本。
在时域中,它们可以看作是无限长的正弦曲线与不同长度的矩形 window 相乘的结果。
在频域中,无限长的连续时间正弦信号的频谱与矩形windows的频谱进行了卷积。具有不同的 window 长度,那些 windows 的相应光谱具有不同的宽度(较长的矩形 windows 的光谱较窄)。结果,无限长正弦信号的频谱中的尖峰将分布在不同的带宽上。这正是您所看到的。
我在 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);
我想这两个光谱应该假设,但他们不……如此处所示:https://www.dropbox.com/s/wfols9o409pr94u/FFT_spectrum_Whosebug.png?dl=0 https://www.dropbox.com/s/a8vmzwto6x4130w/FFT_spectrum_Whosebug.fig?dl=0
谢谢
好消息是你自己计算的频谱没有问题。
问题在于,通过查看不同长度的样本,您实际上是在同时查看两个不同的样本。 在时域中,它们可以看作是无限长的正弦曲线与不同长度的矩形 window 相乘的结果。
在频域中,无限长的连续时间正弦信号的频谱与矩形windows的频谱进行了卷积。具有不同的 window 长度,那些 windows 的相应光谱具有不同的宽度(较长的矩形 windows 的光谱较窄)。结果,无限长正弦信号的频谱中的尖峰将分布在不同的带宽上。这正是您所看到的。