[問題]離散時間序列資料做FFT的疑問

作者: ebay18 (ebay18)   2015-06-24 12:38:59
我手邊有一個接近1萬筆的離散的時間序列數資料
(時間間格相等.且皆為正數)
想做FFT並求出頻率分布圖.第一次上手有些疑問.
js=load('C:\Users\pc\Desktop\JS.txt')
N=length(js)
fs=300
jsfft=fft(js)
jspower=abs(jsfft).^2
freqXaxis=fs/N*(-N/2:N/2-1)
plot(freqXaxis,jspower)
xlim([0 end])
想問freqXaxis=fs/N*(-N/2:N/2-1)
其中(-N/2:N/2-1)為何要如此限制.
我設同樣長度(0:N-1)跑出的圖形.
為何幾乎全部收斂在最左側0的位置.
圖形幾乎看不到
最後一行xlim([0 end]).
如果拿掉.X軸頻率為何只跑出1條power很大的直線.
其他頻率power小到幾乎沒有.
如果保留.則是呈現看似完美的頻譜分布圖(雖然對錯不知.但看起來可用度較高)
還勞請各位解答小小疑惑.謝謝
作者: s4300026 (s4300026)   2015-06-24 14:04:00
因為fft只能看到 fs/2,解析度為fs/N,你可以直接plot(jypower); 你會發現圖案是對稱的但不了解為啥要設 freqXaxis=fs/N*(-N/2:N/2-1)這樣會使freq翻轉阿...m=1:N; fftX=m*Fs/2/N; fftY=abs(fft(data));
作者: infernodimon (小小。齊兒)   2015-06-24 14:31:00
樓上 像你說的啊 解析度是fs/N
作者: ebay18 (ebay18)   2015-06-24 19:34:00
我照S大的指令出來是這樣.http://imgs.cc/image/z0SHqC6#.VYqVUMsw9fU還是一樣往左收斂..想再請問另外用原始的指令跑..為何有放xlim([0 end])結果會差很多.有放是這樣http://imgs.cc/image/PfAUdpi沒放變這樣 http://imgs.cc/image/7ssqjG9
作者: s4300026 (s4300026)   2015-06-25 13:23:00
不好意思,少一句: fftY=fftY(1:length(fftY)/2);我的方法與原PO不同,所以不用放xlim(...)應該是往右收斂才是,左側高起是因為有DC值,data = data - mean(data); 然後轉fft就不會有左側高峰你有 1.x軸設定不正確 2.xlim的end 用法很奇怪,改length(data) 會不會比較好?應該是改 freq/2才是,科科。即 xlim([0 freq/2]),不過你X軸是有問題的... 怎改都錯如果不介意,我可以分享我的程式,但會有BUG就是了http://tinyurl.com/qfbp43a 檔案是.rar開.m檔後執行,版本2014a,先建立.mat檔

Links booklink

Contact Us: admin [ a t ] ucptt.com