问题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?
答案 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