5

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

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

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

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

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

非常感谢您,并期待收到您的来信:)

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.
4

2 回答 2

2

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

我建议您阅读零填充对 FFT 的影响。通常最好使用它,L = NFFT因为这将为您提供数据的最佳表示。

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

在您的实验中,您会看到不同的幅度,因为每种不同的频谱泄漏量都会有所不同L

于 2012-08-20T16:07:45.220 回答
1

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

您可能还想考虑使用周期图而不是直接使用 FFT - 它会为您处理窗口函数和许多其他内务管理。

于 2012-08-20T16:06:28.070 回答