作者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/cn.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