2013-12-03 27 views
0

這是我第一次在MatLab中執行FFT,通過試驗來自MathWorks網站的一些示例代碼。我想知道是否有可能獲得我已有的代碼,並將x axis轉換爲對數級表示而不是線性。我理解了大部分代碼,但它是x axis代碼行,我仍然不能100%確切地知道它在行尾的+1究竟是什麼,這就是MatLab的索引結構不會「 t從0開始。如何使用MatLab產生對數刻度FFT

到目前爲止我的代碼是:

[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

頻率通常以線性標度從離散傅立葉出來變換。如果你願意,你可以在日誌規模的新頻率向量和插值結果你已經有

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產生的光譜強波峯和波谷,因此,除非你先用手整理光譜中,插值的頻譜不會看as nice

+4

如果您只想對x軸進行對數化,請使用'semilogx'而不是'loglog'。 – craigim

+1

或等價地在'plot'行之後設置(gca,'xscale','log')'' –