了解Matlab FFT示例

ste*_*wpf 46 matlab fft

我是matlab和FFT的新手,想要了解Matlab FFT示例.现在我有两个主要问题:

1)为什么x轴(频率)结束于500?我怎么知道没有更多的频率或者它们被忽略了?

2)我怎么知道频率在0到500之间?FFT不应该告诉我,频率在哪些限制范围内?FFT是否仅在没有频率的情况下返回幅度值?

谢谢你的提示!


有问题的例子:

考虑以1000 Hz采样的数据.形成一个信号,其中包含幅度为0.7和120 Hz的幅度为1的正弦波的50 Hz正弦曲线,并使用一些零均值随机噪声对其进行破坏:

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)')
Run Code Online (Sandbox Code Playgroud)

时域

转换到频域,通过快速傅立叶变换(FFT)找到有噪信号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))) 
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
Run Code Online (Sandbox Code Playgroud)

频域

kev*_*818 37

1)为什么x轴(频率)结束于500?我怎么知道没有更多的频率或者它们被忽略了?

它以500Hz结束,因为这是在1000Hz采样时信号奈奎斯特频率.在Mathworks示例中查看此行:

f = Fs/2*linspace(0,1,NFFT/2+1);
Run Code Online (Sandbox Code Playgroud)

第二个曲线的频率轴从0到Fs/2,或采样频率的一半. 奈奎斯特频率始终是采样频率的一半,因为在此之上,会出现混叠:别名插图

信号将"折叠"回自身,并且看起来是一些频率等于或低于500Hz.

2)我怎么知道频率在0到500之间?FFT不应该告诉我,频率在哪些限制范围内?

由于上面描述的"折叠"(奈奎斯特频率通常也称为"折叠频率"),在物理上不可能在FFT中出现500Hz以上的频率; 较高频率将"折叠"回来并显示为较低频率.

FFT是否仅在没有频率的情况下返回幅度值?

是的,MATLAB FFT函数只返回一个幅度矢量.但是,它们会映射到您传递给它的频率点.

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

  • 非常感谢您和其他所有人的回复!他们都很有帮助,很难选择一个作为正确答案,但我发现这是最清晰的答案。 (2认同)

hot*_*aw2 10

这里有一些误解.

高于500的频率可以在长度为1000的FFT结果中表示.不幸的是,这些频率全部折叠在一起并混合到前500个FFT结果区间中.因此,通常您不希望向FFT提供包含任何频率等于或高于采样率一半的频率的信号,因为FFT无关紧要,只会将高频与低频混合(混叠),使得结果非常漂亮没什么用的.这就是为什么数据在被采样并馈送到FFT之前应该进行低通滤波的原因.

FFT返回没有频率的幅度,因为频率不仅取决于FFT的长度,还取决于数据的采样率,这不是FFT本身或其输入的一部分.您可以以任何采样率提供相同长度的FFT数据,因此可以获得任何频率范围.

结果曲线结束于500的原因在于,对于任何实际数据输入,高于FFT长度一半的频率仅是前半部分中数据的镜像重复(复共轭).由于它们是重复的,大多数人只是忽略它们.为什么要重复?在FFT计算结果对谁养活FFT复杂数据(具有实部和虚部),这确实造成两个不同的半人的另一半.