Matlab FFT引數設定研究
阿新 • • 發佈:2018-12-20
寫在前面的廢話
近期要對一款高速ADC進行測試,用到Matlab的fft函式分析其動態效能,為了對Matlab 的fft有一個全方位立體的認識,對其引數進行了小實驗,記錄如下。
使用Matlab生成取樣資料
clear;
fs = 1000;
ts = 1/fs;
L = 2400;
t = (0:L-1)*ts;
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
該取樣資料中不包含噪聲,對其進行fft變換,程式碼如下
NFFT = 2^nextpow2(L); //一般進行fft變換的點數引數為2的正數次冪 Y = fft(x,NFFT)/L; Ya = 2*abs(Y(1:NFFT/2+1)); f = fs/2*linspace(0,1,NFFT/2+1); plot(f,Ya)
結果如下
可以看到頻率有偏移,幅值亦有衰減
人為提高NFFT的點數,重新做fft,結果如下
可以發現,頻率準了,而且幅值衰減亦減小,可以真實反映模擬生成的資料的實際情況。
FFT之後是如何還原幅值資訊的
這個問題可能要好好研究下DFFT的計算過程,在這裡我就不多說了,因為!我也不會……不過可以給你看個fft返回的原始資料,直觀感受下。
給原始資料新增高斯白噪聲
y = x + 2*randn(size(t));
再做fft,結果如下
發現幅值又變得有衰減,按理說這不應該的……於是我把時域波形畫出來看了下,已經成這鳥樣子了……那這一點點衰減應該是能夠接受的。
時域波形
劃重點了
好吧,我承認我上面說的比較亂,下面直接說結論了!!!
fft(data,NFFT)/n,
1、其中NFFT為計算fft的點數,可以人為設定較大的值,這樣可以提高FFT之後的頻率解析度,fft函式會自動在計算的時候進行插值。
2、NFFT也最好是2的整數次冪,這樣可以防止頻譜洩露。
3、n是你實際取樣的點數。