了解Matlab的FFT例子了解Matlab的FFT例子(Understanding Matlab

2019-05-14 13:33发布

我是新来的MATLAB和FFT,并希望了解Matlab的FFT例子 。 现在我有两个主要问题:

1)为什么在500 x轴(频率)结束了吗? 我怎么知道,有没有更多的频率或者他们恰恰忽略了?

2)我怎么知道的频率在0和500之间? 如果不是FFT告诉我,这限制了频率? 是否仅FFT未经频率返回幅度值?

感谢您的任何提示!


例如,在问题:

考虑在1000Hz的采样数据。 形成含有振幅1和腐败它与一些零均值随机噪声的振幅在0.7和120赫兹的正弦曲线的50赫兹正弦波的信号:

Fs = 1000;                    % Sampling frequency
T = 1/Fs;                     % Sample time
L = 1000;                     % Length of signal
t = (0:L-1)*T;                % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); 
y = x + 2*randn(size(t));     % Sinusoids plus noise
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')

转换到频域,离散傅立叶变换的嘈杂信号y通过取快速傅立叶变换(FFT)实测值:

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))) 
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

Answer 1:

1)为什么在500 x轴(频率)结束了吗? 我怎么知道,有没有更多的频率或者他们恰恰忽略了?

它结束在500Hz处,因为这是该信号的奈奎斯特频率时在1000Hz的采样。 看这句话在The MathWorks公司的例子:

f = Fs/2*linspace(0,1,NFFT/2+1);

该第二曲线的频率轴从0到fs / 2,或采样频率的一半。 奈奎斯特频率总是采样频率的一半,因为上述的是, 混叠发生:

的信号将“折叠”回到其自身上,并且似乎是一些频率等于或低于500Hz的。

2)我怎么知道的频率在0和500之间? 如果不是FFT告诉我,这限制了频率?

由于上述“折叠”(奈奎斯特频率通常也被称为“折叠频率”),它是频率高于500Hz的出现在FFT物理上不可能的; 更高的频率将“折叠”回去,并且显示为较低的频率。

是否仅FFT未经频率返回幅度值?

是的,MATLAB FFT功能只返回幅度的一个载体。 但是,它们映射到你传递给它的频点。

让我知道什么需要澄清,所以我可以帮助您进一步。



Answer 2:

这里有一些误解。

高于500的频率可以在长度1000。不幸的是,这些频率都被折叠在一起并混合到第一500米FFT结果仓的FFT结果来表示。 所以正常情况下你不想养活FFT包含的任何频率达到或超过一半的采样率的信号,因为FFT不会在意,并会就在高频率与低的人(别名),使结果相当混合在一起很多无用的。 这就是为什么数据应被采样并馈送到FFT之前低通滤波。

在FFT没有频率返回振幅由于频率取决于,不只是对FFT的长度,而且还取决于数据的采样率,这是不是FFT本身的一部分,或者它的输入。 您可以在任何采样率供给相同的长度的FFT数据,从而得到频率的任何范围出来。

结果图解在500结束的原因是,对于任何实际的数据输入时,FFT的长度的一半以上的频率在所述第一半的数据的镜像只是重复(复共轭)。 由于它们是重复的,大多数人只是忽略它们。 为什么剧情副本? 在FFT计算结果对谁养活FFT复杂数据(具有实部和虚部),这确实造成两个不同的半人的另一半。



Answer 3:

这听起来像你需要一些背景阅读的FFT是什么(如http://en.wikipedia.org/wiki/FFT )。 但是,为了回答你的问题:

为什么在500 x轴(频率)结束了吗?

由于输入矢量长度是1000。一般地,长度-的FFT N输入波形将产生一个长度- N输出向量。 如果输入波形是真实的,那么输出将是对称的,所以第一个501分就足够了。

编辑:( 我没有注意到的是,例如填充时域向量。)

由于时域波形被声明为具有1kHz的采样率的频率进行到500赫兹。 奈奎斯特采样定理指出,随着采样率的信号fs可以支持(实际)信号具有最大带宽fs/2

我怎么知道的频率是0和500之间?

往上看。

如果不是FFT告诉我,这限制了频率?

没有。

是否仅FFT未经频率返回幅度值?

的FFT只需指定一个幅度(和相位),以每频率窗口。



Answer 4:

之所以你的X轴绘制的频率仅直到500Hz的是你的命令语句'F = FS / 2 * linspace(0,1,NFFT / 2 + 1);' 。 您的Fs是1000。因此,当你通过值范围从0到1时,它返回长度NFFT / 2 + 1的矢量除以2&然后乘法。 该载体由等间隔的频率值的,范围从0到fs / 2(即,500赫兹)。 由于您使用绘制' 曲线(F,2和* ABS(Y(1:NFFT / 2 + 1)))'命令,您的X轴极限是500赫兹。



文章来源: Understanding Matlab FFT example
标签: matlab fft