基于Matlab的频谱分析.docx
《基于Matlab的频谱分析.docx》由会员分享,可在线阅读,更多相关《基于Matlab的频谱分析.docx(9页珍藏版)》请在冰豆网上搜索。
基于Matlab的频谱分析
基于Matlab的频谱分析
一、实验目的
1、把握时域抽样定理。
2、通过实验加深对FFT的明白得。
3、熟悉应用FFT对典型信号进行频谱分析的方式。
二、实验原理
一、时域抽样定理
时域抽样定理给出了持续信号抽样进程中信号不失真的约束条件:
关于基带信号,信号抽样频率大于等于2倍的信号最高频率,即。
时域抽样是把持续信号变成适于数字系统处置的离散信号。
对持续信号以距离T抽样,那么可取得的离散序列为。
图1持续信号抽样的离散序列
若,那么信号与的频谱之间存在:
其中:
的频谱为,的频谱为。
可见,信号时域抽样致使信号频谱的周期化。
(rad/s)为抽样角频率,为抽样频率。
数字角频率Ω与模拟角频率ω的关系为:
Ω=ωT。
二、离散傅立叶变换(DFT)
有限长序列的离散傅立叶变换(DFT)为
逆变换为
3、快速傅立叶变换(FFT)
在各类信号序列中,有限长序列占重腹地位。
对有限长序列能够利用离散傅立叶变换(DFT)进行分析。
DFT不但能够专门好的反映序列的频谱特性,而且易于用快速算法(FFT)在运算机上进行分析。
有限长序列的DFT是其z变换在单位圆上的等距离采样,或说是序列傅立叶的等距离采样,因此能够用于序列的谱分析。
FFT是DFT的一种快速算法,它是对变换式进行一次次分解,使其成为假设干小数据点的组合,从而减少运算量。
MATLAB为计算数据的离散快速傅立叶变换,提供了一系列丰硕的数学函数,要紧有Fft、Ifft、Fft2、Ifft2,Fftn、ifftn和Fftshift、Ifftshift等。
当所处置的数据的长度为2的幂次时,采纳基-2算法进行计算,计算速度会显著增加。
因此,要尽可能使所要处置的数据长度为2的幂次或用添零的方式来添补数据使之成为2的幂次。
Fft函数挪用方式:
、Y=fft(X);、Y=fft(X,N);
、Y=fft(X,[],dim)或Y=fft(X,N,dim)。
函数Ifft的参数应用与函数Fft完全相同。
三.实验内容与步骤
1、为了说明高密度频谱和高分辨率频谱之间的区别,考察序列x(n)有限个样本的频谱。
当时,求x(n)的DFT.
当时,求x(n)的DFT.
程序:
functionDFTX1
N=input('请输入离散信号的长度:
');
n=0:
N-1;k=0:
N-1;
xn=cos*n*pi)+cos*n*pi);
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
Xk=xn*WNnk;
subplot(2,1,1)
stem(n,xn);
title('x(n):
');gridon;
subplot(2,1,2)
stem(k,abs(Xk));
title('x(n)的DFT:
');gridon;
>>DFTX1
请输入离散信号的长度:
10
>>DFTX1
请输入离散信号的长度:
100
频谱图:
二、已知一模拟信号,此刻采样率进行采样。
用DFT计算当序列长度别离为L=100,L=20时,N=200点的幅度频谱样值并通过作图与理论上准确的频谱样值进行比较。
程序:
L1=100;L2=20;
t1=0:
L1-1;x1=exp(-t1/20);
t2=0:
L2-1;x2=exp(-t2/20);
N=0:
199;
WN=exp(-j*2*pi/length(N));
nk1=t1'*N;nk2=t2'*N;
WNnk1=WN.^nk1;WNnk2=WN.^nk2;
Xk1=x1*WNnk1;
Xk2=x2*WNnk2;
subplot(4,1,1)
stem(t1,x1);
title('序列长度L=100时x(n)图:
');gridon;
subplot(4,1,3)
stem(t2,x2);
title('序列长度L=20时x(n)图:
');gridon;
subplot(4,1,2)
stem(N,abs(Xk1));
title('序列长度L=100时x(n)的DFT图:
');gridon;
subplot(4,1,4)
stem(N,abs(Xk2));
title('序列长度L=20时x(n)的DFT图:
');gridon;
实验图:
3、一个持续信号含三个频谱分量,经采样得以下序列:
(1)N=64,df别离为、1/64,观看其频谱;
程序:
functiondftx3(df)
N=64;
k=0:
127;
n=0:
N-1;
xn=sin(2*pi**n)+cos(2*pi*+df)*n)+cos(2*pi*+2*df)*n);
WN=exp(-j*2*pi/length(k));
nk=n'*k;
WNnk=WN.^nk;
Xk=xn*WNnk;
subplot(2,1,1)
plot(n,xn);
title('df=1/16,长度为N=64的有限序列x(n)图:
');gridon;
subplot(2,1,2)
plot(abs(Xk(1:
64)));
title('取上图x(n)做128点的DFT图:
');gridon;
>>dftx3(1/16)
>>dftx3(1/64)
>>
实验图:
(2)N=64、128,df为1/64,做128点得FFT,其结果有何不同?
程序:
n1=0:
63;n2=0:
127;df=1/64;
x1=sin(2*pi**n1)+cos(2*pi*+df)*n1)+cos(2*pi*+2*df)*n1);
x2=sin(2*pi**n2)+cos(2*pi*+df)*n2)+cos(2*pi*+2*df)*n2);
y1=fft(x1,128);
y2=fft(x2,128);
subplot(3,1,1)
plot(n2,x2);
title('有限序列x(n):
');gridon;
subplot(3,1,2)
plot(abs(y1(1:
64)));
title('取有限序列x(n)长度N=64的128点FFT图:
');gridon;
subplot(3,1,3)
plot(abs(y2(1:
64)));
title('取有限序列x(n)长度N=128的128点FFT图:
');gridon;
实验图:
4、被噪声污染的信号,较难看出所包括得频率分量,如一个由50Hz和120Hz正弦信号组成的信号,受零均值随机噪声的干扰,数据采样率为1000Hz,试用FFT函数来分析其信号频率成份,要求:
(1)画出时域波形;
(2)分析信号功率谱密度。
注:
在MATLAB中,可用函数rand(1,N)产生均值为0,方差为1,长度为N的高斯随机序列。
t=0:
:
1;
x=sin(2*pi*50*t)+sin(2*pi*120*t)+rand(size(t));
subplot(2,1,1)
plot(x(1:
50));
title('由50Hz和120Hz正弦信号组成且受噪声污染的信号图:
');gridon;Y=fft(x,512);
subplot(2,1,2)
plot(abs(Y).^2);
title('受污染信号功率谱密度图:
');gridon;