计算FFT时的信号长度

时间:2012-08-20 15:21:15

标签: matlab signal-processing fft wavelet

我想问一些与我的最后一个问题相关的问题,所以我不想在另一个帖子中发帖。我的问题包含一个代码,因此我不能将其作为评论发布。所以我必须将我的旧问题编辑成一个新问题。请看看并帮忙。谢谢。

我是FFT和DSP的新手,我想问你一些关于在Matlab中计算FFT的问题。以下代码来自Matlab帮助,我刚刚删除了噪音。

  1. 我可以选择与NFFT不同的信号L的长度吗?

  2. 我不确定我是否正确使用了窗口。但是当我使用窗口(以下代码中的hanning)时,我无法获得幅度的确切值?

  3. 当L和NFFT得到不同的值时,幅度值也不同。如何获得输入信号幅度的精确值? (在下面的代码中,我使用一个已知的信号来检查代码是否正常工作。但是如果我从传感器获得信号而我不知道它的振幅,我该如何检查?)

    < / LI>

    我非常感谢你,期待收到你的回复:)

    Fs = 1000;                    % Sampling frequency
    T = 1/Fs;                     % Sample time
    L = 512;                     % Length of signal
    NFFT=1024;                   % number of fft points
    t = (0:L-1)*T;                % Time vector
    x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);    input signal
    X = fft(hann(L).*x', NFFT)/L;
    f = Fs/2*linspace(0,1,NFFT/2+1);
    plot(f,2*abs(X(1:NFFT/2+1)))     % Plot single-sided amplitude spectrum.
    

2 个答案:

答案 0 :(得分:2)

L是输入信号中的样本数。如果L < NFFT则差异为零填充。

我建议你读一下零填充对FFT的影响。通常最好使用L = NFFT,因为这样可以最好地表示您的数据。

这里给出了关于使用零填充和FFT的例外答案: https://dsp.stackexchange.com/questions/741/why-should-i-zero-pad-a-signal-before-taking-the-fourier-transform

在您的实验中,您会看到不同的振幅,因为每个不同的L会有不同的频谱泄漏量。

答案 1 :(得分:1)

您需要在FFT之前应用window function,以便在采样窗口中具有非整数周期数的频率分量获得一致的结果。

您可能还想考虑使用periodogram而不是直接使用FFT - 它会处理窗口功能以及许多其他内务管理。