在计算FFT时信号的长度

5
我想询问一些与我上一个问题相关的问题,所以我不想在另一个线程中发布。我的问题包含代码,因此我不能将其作为评论发布。因此,我必须将旧的问题编辑为新的问题。请看一下并帮忙。谢谢。
我是FFT和DSP的新手,我想向您询问有关在Matlab中计算FFT的一些问题。以下代码来自于Matlab的帮助文档,我只是去掉了噪声。
1. 我可以选择与NFFT不同的信号长度L吗? 2. 我不确定我是否正确地使用了窗口。但是当我使用窗口(以下代码中的汉宁窗)时,我无法得到精确的幅度值? 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.
2个回答

2

谢谢 Markus。我不知道它是否能正确地与 NFFT=L 一起使用?我听说如果 NFFT=2^nextpow(L),程序会运行得更快。这是正确的吗? - Mai
我有一个传感器,可以以3MHz的采样率从两个不同的过程中记录声发射信号作为原始信号。然后我得到了时间基准信号。现在我想使用FFT比较这些信号。我的问题似乎很愚蠢,但我是一名学生,不是特别擅长DSP。谢谢你的帮助。你能否请解释一下,我需要做什么来分析这些信号? - Mai
@Mai:你看到我的另一个答案了吗?你需要应用窗函数,而且你还应该考虑使用MATLAB的周期图函数,而不是直接使用FFT。 - Paul R
Mai,Matlab的FFT函数在长度为2的幂次方时运行速度更快,但是将输入信号填充到下一个2的幂次方并不能改善数据,而且Matlab可以处理其他FFT长度。当你增加FFT的长度时,你会得到更高的频率分辨率,这会导致相邻频率间泄漏减少。Paul R建议使用窗函数-这也是减少频谱泄漏的好方法,Matlab有许多窗函数供您尝试。 - Markus
谢谢你,Markus和Paul R :) - Mai
嗨,保罗,据我所知,Periodogram是一个用于计算功率谱密度PSD的函数。而PSD是在一个较长时间间隔内对傅里叶变换幅度平方的平均值。 - Mai

1

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

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


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