[討論] FFT與關於leakage已回收

看板MATLAB作者 (I love Whisky)時間13年前 (2011/04/18 02:00), 編輯推噓4(405)
留言9則, 2人參與, 最新討論串1/1
最近利用matlab做些FFT的分析,但總覺得程式分析出的結果有時怪怪的, 嘗試回到最簡單狀態去測試,若關於FFT的程式撰寫如下: clear; close all; L = 80; %資料筆數 w = 10; %訊號頻率 dt = 1/w/20; t = (0:L-1)*dt; y = 0.5*sin(2*pi*w*t+0.5*pi); ffty = fft(y)/L; f = (1/dt)/2*linspace(0,1,L/2); subplot(2,1,1); plot(t,y,'marker','o','markersize',2); grid on; xlabel('t'); ylabel('y'); subplot(2,1,2); stem(f,2*abs(ffty(1:L/2)),'markersize',2); grid on; xlabel('f'); ylabel('spectrum'); 不知上述程式是否有瑕疵? 以此程式為例,如果資料筆數設定在80,那麼分析出的結果是很完美的, 頻率落在10且振幅剛好0.5,而其餘頻率位置皆為0, 倘若我資料筆數設為90,那麼結果完全不是這麼一回事, 就目前粗淺了解是,若資料不是剛好週期整數倍位置截斷, 就會發生所謂洩漏(leakage),要防止此現象有折衷方式是所謂加窗處理, 但不知matlab中是如何做?而上述的論述是否正確? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.67.141.142 ※ 編輯: Ballantine 來自: 203.67.141.142 (04/18 03:27)

04/18 21:09, , 1F
資料比數可以的話最好是2^n個
04/18 21:09, 1F

04/18 21:10, , 2F
另外,取樣時間不足->leakage,取樣頻率不足->alias
04/18 21:10, 2F

04/18 21:11, , 3F
另外,你的頻率間隔df就是1/T,跟取樣長短當然有關
04/18 21:11, 3F

04/19 23:51, , 4F
你推論沒錯,信號要剛好落在準頻率上才沒洩漏問題
04/19 23:51, 4F

04/24 14:39, , 5F
一般取樣頻率會取預估最高觀測頻率的2.5~10倍,2倍是底限
04/24 14:39, 5F

04/24 14:42, , 6F
還有,用資料比數不太靈活,最好改為取樣頻率跟時間來算
04/24 14:42, 6F

04/24 14:59, , 7F
原po程式設定取樣頻率為20倍訊號頻率,也就是20*10 =200Hz
04/24 14:59, 7F

04/24 15:00, , 8F
取樣點數N,頻率間隔df=200/N,N=80點時為2.5好運洽整除
04/24 15:00, 8F

04/24 15:01, , 9F
但不是用猜的,根本上要了解取樣時間的倒數就是頻率間隔:)
04/24 15:01, 9F
文章代碼(AID): #1DgohM8S (MATLAB)