Matlab中的FFT图,精度

信息处理 matlab fft
2022-01-29 12:03:10

我有一个来自信号发生器的 60Hz 正弦波的小输入信号,它被 50Hz 的电源频率损坏。我想使用 FFT 测量 60Hz 信号的幅度,因为它在示波器中非常小。
Matlab FFT代码:

y = data;    
Fs = 2048;
[r, L] = size(y);
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2+1))) 

但 FFT 图在 50 和 60Hz 处没有给出尖锐的峰值。情节如下所示:放大. 连续点具有交替的高低幅度,这给出了锯齿状的图。为什么会这样?60Hz的幅度是否受此影响?

2个回答

您看到的现象称为“窗口效应”或“光谱泄漏”。发生这种情况是因为理想情况下您想要分析无限长的信号(这将在频域中为您提供理想的峰值),但实际上您分析的是截断(加窗)信号。实际上,您将信号与窗口函数相乘 - 在您的情况下是一个简单的矩形窗口 - 在频域中对应于与窗口频率响应的卷积。这会给你你看到的效果。您可以尝试不同的窗口功能,但您不会摆脱基本效果。

顺便说一句,对于情节,您可以尝试使用以 dB 为单位的值,即使用20log(|Y|)而不是线性图;这会让事情看起来好一些。

如果 50 或 60 Hz 信号的频率不是其周期正好是 FFT 长度的约数,那么您将看到数据矩形窗口的影响。

您的 50 Hz 信号也可能不是一个完全纯正的正弦波,因此您会看到由于中心频率调制而产生的边带。