Matlab中的FFT图

Posted

技术标签:

【中文标题】Matlab中的FFT图【英文标题】:FFT plot in Matlab 【发布时间】:2014-03-05 10:50:37 【问题描述】:

我有一个来自信号发生器的 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的幅度是否受此影响?

【问题讨论】:

如果您还添加时域信号图,那就太好了。信号源是什么? 【参考方案1】:

大概有两种效果

    如果测量信号的时间窗口,这将不可避免地导致信号模式的开始和结束之间的相位间隙。间隙或矩形信号的 FFT 会导致高频振荡。这些由边界效应引起的振荡可以通过一个窗口函数来抑制,它可以平滑到边界的信号。

    DFT 中有一个离散的频谱。如果测量的信号与这些离散模式中的任何一个都不匹配,则需要更多的频率来重建原始信号。

【讨论】:

【参考方案2】:

您的 50 Hz 信号可能不是纯正弦波。与完美正弦波的任何差异(例如削波或失真)都等同于会在频谱中产生边带的调制。

对周期不是 FFT 长度的精确约数的信号加窗也会使加窗伪影与该信号卷积。

【讨论】:

以上是关于Matlab中的FFT图的主要内容,如果未能解决你的问题,请参考以下文章

matlab中怎么画函数的相位谱

在matlab中,如何画出一个信号的频谱图?

如何用matlab 绘制出如图三角调幅信号的频谱图(转化为数字序列,用FFT求)

matlab中powergui中的fft分析怎么用

对12bit的AD建模后matlab写程序对其进行FFT,计算SNR并输出频谱图,程序该怎么写???急

如何用matlab求周期函数的频谱?