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];

这篇文章讲的不错:

MATLABFFT的使用方法(频谱分析)

posted @ 2013-09-09 23:48  tofixer  阅读(4075)  评论(0编辑  收藏  举报