Re: [問題] 關於FFT繪圖的問題已回收

看板MATLAB作者 (畜牲)時間16年前 (2009/06/13 16:39), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串4/5 (看更多)
※ 引述《chiangboy (chiangboy)》之銘言: : 我是用1K Hz的Sine波 去測試,的確會出現兩個很強的訊號 : 不過這兩個訊號對應到的頻率不是在1K Hz的地方 : 所以應該是我的時間軸轉到頻率軸的部份有問題 : sine波測試圖如下 : http://img265.imageshack.us/img265/5960/sinefft.jpg
: ※ 引述《yehliuk (菜鳥帕克)》之銘言: : : 你的方法好像沒有錯,你用一個sine波測試,有在頻率圖上面看到兩 : : 個強的訊號對稱在左右兩邊嗎? 那兩個強的訊號應該就是sine波的頻 : : 率吧? : : 看一下你付的圖,你的原始資料主要是由一個很強的低頻訊號(在頻 : : 率中心),加上一個在1Hz左右的訊號組成。 其實爬ㄧ下板上文章就很清楚了,若你訊號取樣點數有N點,那麼你fft轉出來的 點數也是N點,第k點代表的頻率= k/N*(取樣頻率),在你的程式碼中,使用到 fftshift()對頻率軸頻移了N/2點,因此第k點的頻率應當=(k-N/2)/N*(取樣頻率)。 其中, k=0,1,2,...,N-1 下面程式碼你參考看看吧 function testfft_ptt clc; clear; N=640; fs=3200;%取樣頻率,3.2kHz Ts=1/fs;%取樣時間間隔 time=(0:N-1)*Ts;%時間軸刻度 freq=(-N/2:N/2-1)/N*fs;%頻率軸刻度 fb=1000;%基頻,1kHz y=sin(2*pi*fb.*time); Y=fftshift(fft(y)); y_new=ifft(fft(y)); subplot(3,1,1) plot(time,y,'r') subplot(3,1,2) plot(freq,abs(Y)) subplot(3,1,3) plot(time,y_new) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.135.13.130 ※ 編輯: monkeykkman 來自: 140.135.13.130 (06/13 17:17)

06/22 16:35, , 1F
感謝你的參考程式,由於原始資料的取樣時間並不是週期性
06/22 16:35, 1F

06/22 16:40, , 2F
所以頻率才會有誤
06/22 16:40, 2F
文章代碼(AID): #1ACsN37H (MATLAB)
文章代碼(AID): #1ACsN37H (MATLAB)