如何使用MatLab生成对数刻度FFT

时间:2013-12-03 18:37:39

标签: matlab fft

这是我第一次通过试验MathWorks网站上的一些示例代码在MatLab中执行FFT。我想知道是否有可能采用我的代码并将x axis转换为对数比例表示而不是线性。我理解大部分代码,但它是x axis代码行,我仍然不能100%确定除了行末尾的+1之外它做了什么。事实上MatLab的索引结构不是从0开始的。

到目前为止我的代码是:

[y,fs] = wavread('Wav/800Hz_2sec.wav');
NFFT = 4096;
Y = fft(y,NFFT)/length(y);
f = fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*abs(Y(1:NFFT/2+1))

1 个答案:

答案 0 :(得分:1)

频率通常以离散傅立叶变换的线性标度出现。如果需要,可以用对数刻度制作新的频率向量,并插入已有的结果

fnew=fs/2.*logspace(log10(fs/length(y)),0,npts);
Ynew= interp1(f,Y(1:NFFT/2+1),fnew);

其中npts是新频率向量的长度。只是密谋

loglog(f,2*abs(Y(1:NFFT/2+1));
老实说IMO,插值的东西不能很好地工作,因为实际信号的FFT会在光谱中产生强烈的峰值和低谷,所以除非你先对光谱进行平滑处理,否则内插光谱看起来不会很好