我知道有很多类似的问题,但我仍然无法找出答案。
假设 MATLAB 中有时间信号:
t=0:1/44100:1
和频率为 500Hz 的余弦信号:
x=cos(2*pi*500*t);
现在,我正在尝试绘制使用以下方法获得的幅度谱fft
信号 x 上的命令
FFT=abs(fft(x))
plot(FFT)
根据理论,我们应该在图中得到两个峰值,一个在 -500 Hz 处,另一个在 500 Hz 处。
我不明白的是,我确实得到了两个峰值,但我无法弄清楚这些峰值的频率。我知道有一种方法可以使用 FFT 索引、输入信号的长度和采样频率来计算频率,但我仍然无法计算频率。
我知道有一些方法可以对齐 FFT 图,以便峰值位于它们所代表的频率的索引号处,方法是使用fftshift
函数,但我想要的是使用简单调用此函数产生的图来计算出频率:
FFT=fft(x)
在这种情况下,我已经知道信号包含 500Hz 的余弦,但是如果我们想要获得 FFT 的信号之前未知怎么办?我们如何使用输出来获得该样本中峰值的频率值fft
功能?
您需要自己生成频率阵列并根据它绘制 FFT 结果。
像这样:
function [Ycomp, fHz] = getFFT(data, Fs)
len = length(data);
NFFT = 2^nextpow2(len);
Ydouble = fft(data, NFFT)/len; % Double-sided FFT
Ycomp = Ydouble(1:NFFT/2+1); % Single-sided FFT, complex
fHz = Fs/2*linspace(0,1,NFFT/2+1); % Frequency array in Hertz.
semilogx(fHz, abs(Ycomp))
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)