问题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?
发布于 2013-08-06 12:26:32
问题1
要回答第一个问题,标准惯例是选择2的幂,这是下一个大于您要输入的数据的大小。产生2的原因是由于fft算法分割数据的方式。虽然您可以使用除2的幂以外的大小,但如果使用,则会慢一些,因此强烈建议使用2。
另外,您也不希望使用小于正在分析的数据大小的值,因为如果使用了,那么并不是所有的示例都会被使用,但是如果使用更大的值,则函数只会将0附加到末尾,因此它是正确的大小,称为零填充。
问题2
加窗,特别是矩形滤波器,不会真正影响x,只会使样本尺寸变小,从而降低FFT的精度。在整理数据时,输出X会降低分辨率。更多的数据通常意味着更好的分辨率/准确性。
Note
StackOverflow并不是回答这些问题的真正场所。请做你的作业。阅读维基百科的一篇文章或搜索FFT,在提出问题之前先读一遍。
更新有关算法的信息。FFT
分割数据的过程称为定时抽取,正演FFT,反FFT在频率上抽取。
发布于 2015-04-06 13:35:43
当我问自己同样的问题时,最好的答案是: nexpower of 2是为了在2^N窗口中更好地拟合FFT。但是选择取决于你想要在FFT中获得的分辨率,因为有更大窗口的FFT只是在FFT中附加了一些零。此外,如果要绘制信号,则必须选择正确的频率范围:
对于2*nextpowerof2 2,对于1*nextpowerof2 2,您应该使用f从0到N+1,从0到N/2+1使用f。
https://stackoverflow.com/questions/18079909
复制相似问题