这是我第一次通过试验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))
答案 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会在光谱中产生强烈的峰值和低谷,所以除非你先对光谱进行平滑处理,否则内插光谱看起来不会很好