看板 MATLAB 關於我們 聯絡資訊
我手邊有一個接近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小到幾乎沒有. 如果保留.則是呈現看似完美的頻譜分布圖(雖然對錯不知.但看起來可用度較高) 還勞請各位解答小小疑惑.謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.68.217.73 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1435120742.A.F94.html ※ 編輯: ebay18 (42.68.217.73), 06/24/2015 12:39:36
s4300026: 因為fft只能看到 fs/2,解析度為fs/N,你可以直接 06/24 14:04
s4300026: plot(jypower); 你會發現圖案是對稱的 06/24 14:05
s4300026: 但不了解為啥要設 freqXaxis=fs/N*(-N/2:N/2-1) 06/24 14:10
s4300026: 這樣會使freq翻轉阿... 06/24 14:10
s4300026: m=1:N; fftX=m*Fs/2/N; fftY=abs(fft(data)); 06/24 14:16
infernodimon: 樓上 像你說的啊 解析度是fs/N 06/24 14:31
ebay18: 我照S大的指令出來是這樣. 06/24 19:34
ebay18: 還是一樣往左收斂.. 06/24 19:34
ebay18: 想再請問另外用原始的指令跑..為何有放xlim([0 end]) 06/24 19:35
ebay18: 結果會差很多.有放是這樣http://imgs.cc/image/PfAUdpi 06/24 19:36
ebay18: 沒放變這樣 http://imgs.cc/image/7ssqjG9 06/24 19:37
※ 編輯: ebay18 (134.208.38.105), 06/24/2015 20:40:02
s4300026: 不好意思,少一句: fftY=fftY(1:length(fftY)/2); 06/25 13:23
s4300026: 我的方法與原PO不同,所以不用放xlim(...) 06/25 13:25
s4300026: 應該是往右收斂才是,左側高起是因為有DC值, 06/25 13:29
s4300026: data = data - mean(data); 然後轉fft就不會有左側高峰 06/25 13:29
s4300026: 你有 1.x軸設定不正確 2.xlim的end 用法很奇怪,改 06/25 13:38
s4300026: length(data) 會不會比較好? 06/25 13:39
s4300026: 應該是改 freq/2才是,科科。 06/25 13:39
s4300026: 即 xlim([0 freq/2]),不過你X軸是有問題的... 怎改都錯 06/25 13:40
s4300026: 如果不介意,我可以分享我的程式,但會有BUG就是了 06/25 14:03
s4300026: http://tinyurl.com/qfbp43a 檔案是.rar 06/25 14:05
s4300026: 開.m檔後執行,版本2014a,先建立.mat檔 06/25 14:07