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 绘制出如图三角调幅信号的频谱图(转化为数字序列,用FFT求)