MATLAB分析频谱

根据信号的FFT计算信号频率和幅度:

假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。

每一个点就对应着一个频率点。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs。即第一个点对应0Hz,第N+1个点对应Fs。例如第n点所表示的频率为:Fn=(n-1)*Fs/N。其中估计出来的信号频率Fn能分辨的频率为Fs/N。

对信号做了FFT之后,结果为复数,由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。因为采样频率要大于信号频率的2倍,因此不考虑FFT中高于信号频率部分的结果。

fs=1e3;
t=0:1/fs:1;
N=length(t);
delta=fs/(N-1);
f=120;
y=sin(2*pi*f*t);
ff=(0:N-1)*delta;
plot(ff,abs(fft(y)));

上面例子中,采样率为1k,数据长度为1001,则每个点的频率代表1Hz,delta越大分辨越精确。

MATLAB分析频谱_第1张图片

 

在上面的基础上加入直流分量,并改变信号幅度:

fs=1e3;
t=0:1/fs:1;
N=length(t);
delta=fs/(N-1);
f=120;
y=3*sin(2*pi*f*t)+2;
ff=(0:N-1)*delta;
plot(ff,abs(fft(y)));

直流分量幅值为2,sin分量幅值为3。对信号FFT后求其频谱:

MATLAB分析频谱_第2张图片

在频谱中,直流分量幅值=零频FFT幅值/N。即2002/1001=2。

其他频率点的幅值=FFT幅值/(N/2)。即1465/(1001/2)=2.92。


对于信号做2048点FFT:

fs=100e6;
N=(1:1000);
t=N/fs;
f=15e6;
y=3*sin(2*pi*f*t);
plot(abs(fft(y,2048)));

信号长度为1000,做2048点FFT:

MATLAB分析频谱_第3张图片

信号频率=[(pos-1)/2048*Length(y)]*[fs/Length(y)]=(pos-1)*fs/2048,先计算信号FFT谱线在数据长度为N的情况下的位置,再根据频率分辨单元计算信号频率。或者直接用谱线位置-1,乘以采样率除以FFT的长度。

信号幅度=FFT中谱线高度/(N/2)。其中N为信号长度。

FFT的长度不能小于信号长度。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(MATLAB分析频谱)