[问题]离散时间序列资料做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