如何在MATLAB中更改FFT的点数

时间:2012-06-05 19:58:08

标签: matlab signal-processing fft correlation

当取fft(signal, nfft)信号时,nfft如何改变结果?为什么?我可以为nfft设置固定值,比如说2^18,还是需要2^nextpow2(2*length(signal)-1)

我通过采用自相关的FFT计算两个信号的功率谱密度(PSD),我想比较结果。由于信号长度不同,我担心如果我不修复nfft,这会使比较变得非常困难!

2 个答案:

答案 0 :(得分:3)

没有使用二次幂的固有理由(它可能会使处理在某些情况下更有效)。

然而,为了使两个不同信号的FFT“相称”,您确实需要在获取FFT之前将一个或另一个(或两个)信号填零到相同的长度。


然而,我觉得有必要说:如果你需要问这个问题,那么你可能不会在DSP学习曲线上的某个点上,你将能够对结果做任何有用的事情。你应该给自己一本关于DSP理论的好书,例如: this

答案 1 :(得分:3)

大多数现代FFT实现(包括基于FFTW的MATLAB)现在很少需要将信号的时间序列填充到等于2的幂的长度。然而,几乎所有实现都将为具有2个长度的功率的数据向量的FFT提供更好的,有时更好的性能。对于MATLAB来说,填充到2的幂或具有许多低素数因子的长度将给你最好的性能(N = 1000 = 2 ^ 3 * 5 ^ 3将是优秀的,N = 997将是一个可怕的选择)

零填充不会增加PSD中的频率分辨率,但它确实会减小频域中的bin大小。因此,如果将NZeros添加到长度为N的信号向量,则FFT将输出长度为(N + NZeros)/ 2 + 1的向量。这意味着每个频率区域的宽度现在将为:

  

Bin宽度(Hz)= F_s /(N + NZeros)

其中F_s是信号采样频率。

如果您发现需要在频域中分离或识别两个紧密的空间峰值,则需要增加样本时间。你会很快发现零填充为你买不到任何东西 - 直觉上这就是我们所期望的。我们如何在功率谱中获得更多信息,而无需在输入中添加更多信息(更长的时间序列)?

最佳,