Matlab FFT参数设置研究

写在前面的废话

近期要对一款高速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是你实际采样的点数。

猜你喜欢

转载自blog.csdn.net/u013098336/article/details/85119665