matlab FFT频谱分析
FFT做频谱分析,学过信号的大概都知道,也都提过采样定理,采样时间等做频谱分析的条件,但是时间一长,难免忘了,而且没实际做过,认知总是不直观。前几天做点实验,犯一些错误,才明白这些条件的作用。
具体分析:
clc;
fs=100;
t=[0:1/fs:100];
N=length(t)-1;%减1使N为偶数
%频率分辨率F=1/t=fs/N
% p=1.3*sin(0.48*2*pi*t)+2.1*sin(0.52*2*pi*t)+1.1*sin(0.53*2*pi*t)...
% +0.5*sin(1.8*2*pi*t)+0.9*sin(2.2*2*pi*t);
%上面模拟对信号进行采样,得到采样数据p,下面对p进行频谱分析
p=5*sin(0.48*2*pi*t)+3*sin(2.4*2*pi*t);
figure(1);
plot(t,p);
grid on;
title('信号 p(t)');
xlabel('t');
ylabel('p');
Y=fft(p);
magY=abs(Y(1:1:N/2))*2/N;
f=(0:N/2-1)'*fs/N;
figure(2)
%plot(f,magY);
h=stem(f,magY,'fill','--');
set(h,'MarkerEdgeColor','red','Marker','*');
grid on;
title('频谱图 (理想值:[0.48Hz,1.3]、[0.52Hz,2.1]、[0.53Hz,1.1]、[1.8Hz,0.5]、[2.2Hz,0.9]) ');
xlabel('f (Hz)');
ylabel('幅值');
数据长度变小,频谱的分辨率也会变小:
把上述代码前三行修改为:
fs=100;
t=[0:1/fs:2];
信号:
频谱:
数据长度再小,采样时间连一个周期都不够,频谱分析就会有问题了:会有直流分量:
fs=100;
t=[0:1/fs:1];
信号:
频谱
如果不满足采样定理,采样频率至少是信号的2倍:频谱分析就完全不对了
fs=2; 采样率才2Hz, 而信号p 中有 2.4Hz的分量,所以自然不对了。。。
t=[0:1/fs:100];
这篇文章讲的不错:
《MATLAB中FFT的使用方法(频谱分析)》