1

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

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

4

2 回答 2

3

问题 1

要回答第一个问题,标准约定是选择 2 的幂次于您要输入的数据的大小。2 的幂次的原因是由于 fft 算法拆分数据的方式。虽然您可以使用 2 的幂以外的大小,但如果这样做会更慢,因此强烈建议使用 2 的幂。同时使用length(x)notsize(x)

此外,您不想使用小于您正在分析的数据大小的值,因为如果这样做,则不会使用所有样本,但是如果您使用更大的值,该函数只会在末尾附加 0,所以它是正确的大小,称为零填充。

问题2

开窗,尤其是使用矩形滤波器,不会真正影响 x,除了使样本量更小会导致 FFT 的准确性降低。当您修剪数据时,输出 X 的分辨率会降低。更多的数据通常意味着更好的分辨率/准确度

笔记

StackOverflow 并不是这些问题的真正场所。请做好功课。在提出可以通过阅读 Wikipedia 文章或谷歌搜索 FFT 轻松回答的问题之前,请先阅读。

更新 有关 FFT 算法的信息。快速傅里叶变换

对于正向 FFT,拆分数据的过程称为时间抽取,反向 FFT 称为频率抽取

于 2013-08-06T12:26:32.930 回答
0

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

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

于 2015-04-06T13:35:43.720 回答