MATLAB中,点数如何影响FFT?

4
当对一个信号进行fft(signal, nfft)操作时,nfft如何影响结果以及为什么会这样?我可以选择一个固定的nfft值,比如2^18吗?还是需要使用2^nextpow2(2*length(signal)-1)
我通过自相关函数的FFT计算两个信号的功率谱密度(PSD),并希望比较结果。由于这两个信号长度不同,我担心如果没有固定nfft,将会使比较变得非常困难!
2个回答

3

使用2的幂次方没有固有原因(但在某些情况下可能会使处理更加有效)。

然而,为了使两个不同信号的FFT“相称”,在进行它们的FFT之前,确实需要将其中一个(或两个)信号零填充到相同的长度。


然而,我必须说:如果您需要问这个问题,那么您可能还没有达到DSP学习曲线上的一个点,无法从结果中获得任何有用的信息。您应该找一本关于DSP理论的好书,例如这本


3
大多数现代FFT实现(包括基于FFTW的MATLAB)现在很少需要将信号时间序列填充到2的幂等长度。然而,几乎所有实现都会为长度为2的幂的数据向量提供更好的性能,有时甚至是更好得多的性能。对于MATLAB来说,将长度填充为2的幂或具有许多低素数因子的长度将为您提供最佳性能(N = 1000 = 2 ^ 3 * 5 ^ 3将是非常好的选择,N = 997将是糟糕的选择)。
零填充不会增加PSD中的频率分辨率,但它确实会减小频域中的bin大小。因此,如果您向信号向量添加NZeros,则FFT现在将输出长度为(N + NZeros)/ 2 + 1的向量。这意味着每个频率的bin现在的宽度为:
Bin width (Hz) = F_s / (N + NZeros)
其中F_s是信号采样频率。
如果您发现需要分离或识别频率域中两个紧密空间的峰值,则需要增加采样时间。您很快就会发现,零填充对此毫无帮助-直觉上,这正是我们所期望的。我们如何在不在输入中添加更多信息(更长的时间序列)的情况下期望在功率谱中获得更多信息?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接