作者ebay18 (ebay18)
看板MATLAB
標題[問題]離散時間序列資料做FFT的疑問
時間Wed Jun 24 12:38:59 2015
我手邊有一個接近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://webptt.com/m.aspx?n=bbs/MATLAB/M.1435120742.A.F94.html
※ 編輯: ebay18 (42.68.217.73), 06/24/2015 12:39:36
1F:推 s4300026: 因為fft只能看到 fs/2,解析度為fs/N,你可以直接 06/24 14:04
2F:→ s4300026: plot(jypower); 你會發現圖案是對稱的 06/24 14:05
3F:→ s4300026: 但不了解為啥要設 freqXaxis=fs/N*(-N/2:N/2-1) 06/24 14:10
4F:→ s4300026: 這樣會使freq翻轉阿... 06/24 14:10
5F:→ s4300026: m=1:N; fftX=m*Fs/2/N; fftY=abs(fft(data)); 06/24 14:16
6F:→ infernodimon: 樓上 像你說的啊 解析度是fs/N 06/24 14:31
7F:→ ebay18: 我照S大的指令出來是這樣. 06/24 19:34
9F:→ ebay18: 還是一樣往左收斂.. 06/24 19:34
10F:→ ebay18: 想再請問另外用原始的指令跑..為何有放xlim([0 end]) 06/24 19:35
※ 編輯: ebay18 (134.208.38.105), 06/24/2015 20:40:02
13F:→ s4300026: 不好意思,少一句: fftY=fftY(1:length(fftY)/2); 06/25 13:23
14F:→ s4300026: 我的方法與原PO不同,所以不用放xlim(...) 06/25 13:25
15F:推 s4300026: 應該是往右收斂才是,左側高起是因為有DC值, 06/25 13:29
16F:→ s4300026: data = data - mean(data); 然後轉fft就不會有左側高峰 06/25 13:29
17F:→ s4300026: 你有 1.x軸設定不正確 2.xlim的end 用法很奇怪,改 06/25 13:38
18F:→ s4300026: length(data) 會不會比較好? 06/25 13:39
19F:→ s4300026: 應該是改 freq/2才是,科科。 06/25 13:39
20F:→ s4300026: 即 xlim([0 freq/2]),不過你X軸是有問題的... 怎改都錯 06/25 13:40
21F:→ s4300026: 如果不介意,我可以分享我的程式,但會有BUG就是了 06/25 14:03
23F:→ s4300026: 開.m檔後執行,版本2014a,先建立.mat檔 06/25 14:07