如何在Matlab中选择nfft的值?窗口大小有什么影响?

时间:2013-08-06 12:15:57

标签: matlab fft

问题1
我的信号x的采样频率为1000 我想在Matlab中做X = fft(x,nfft);。问题是我不知道如何找到nfft的价值。我看到有人可以通过nfft = 2^nextpow2(length(x));来计算nfft但是我不知道它的含义,任何人都可以解释它吗?

问题2
我的信号x的采样频率为1000 我想这次添加一个矩形窗口,然后做fft 例如Matlab中的X = fft(x(1:200),nfft); 假设这次我知道如何计算nfft,但是我想问一下窗口大小和X之间的关系是什么。
例如,如果我有一个大窗口,它将如何改变X?
如果我有一个小窗口,它将如何改变X?

2 个答案:

答案 0 :(得分:2)

问题1

要回答第一个问题,标准惯例是选择接下来高于您所放入数据大小的2的幂.2的幂的原因是由于fft算法分割数据的方式。虽然您可以使用2的幂以外的大小,但如果这样做会更慢,因此强烈建议使用2的幂。同时使用length(x)而不是size(x)

此外,您不希望使用小于您正在分析的数据大小的值,因为如果您这样做,并非所有样本都将被使用,但是如果您使用更大的样本,该函数将只添加0到0结束所以它是正确的大小,称为零填充。

问题2

窗口化,特别是使用矩形滤波器,除了使样本量更小导致FFT精度降低之外,不会真正影响x。在裁剪数据时,输出X的分辨率会降低。更多数据通常意味着更高的分辨率/准确度

注意

StackOverflow并不是这些问题的真正场所。请做你的功课。在阅读维基百科文章或谷歌搜索FFT之前,通过提问可以轻松回答的问题进行阅读。

<强>更新 有关FFT算法的信息。 FFT

分割数据的过程称为时间抽取,正向FFT和反向FFT频率抽取

答案 1 :(得分:0)

我问自己同样的问题是最好的答案: nexpower为2用于在2 ^ N窗口中更好地拟合FFT。但是选择取决于你想要在FFT中获得的分辨率,因为具有更大窗口的FFT只是在FFT上附加了一些零。此外,如果要绘制信号,则必须选择正确的频率范围:

对于2 * nextpowerof2,你应该使用f从0到N + 1 对于1 * nextpowerof2,您应该使用f从0到N / 2 + 1