
shuzi2基于Matlab的频谱分析.doc
6页实验二 基于Mat lab的频谱分析实验目的1、 掌握时域抽样定理2、 通过实验加深对FFT的理解;3、 熟悉应用FFT对典型信号进行频谱分析的方法实验内容与步旦(1) 、时域抽样定理(2) 、离散傅立叶变换(DFT)(3) 、快速傅立叶变换(FFT)1、为了说明高密度频谱和高分辨率频谱之间的区别,考察序列x(n)有限个样本的频谱x(ii) = cos(0.48^n) + cos(0.52初)当 0 < n < 10 时,求 x(n)的 DFT.当 05-10 0 时,求 x(n)的 DFT.MATLAB代码如下:Nl = ll;nl=0:l:Nl-l; %时域采样xnl =cos(0.48*nl *pi)+cos(0.52*n 1 *pi);kl=0:l:Nl-l; %频域采样WNl=exp(-j*2*pi/Nl);nkl=nl*kl;WNnkl=WNl.Ankl;Xkl=xnl*WNnkl;subplot(2,2,l)stem(nl,xnl);titleCXl(n)1);subplot(2,2,2)stem(k 1 ,abs(Xk 1));titleCXl(n)的 DFT: Xl(k));N2=101;n2=0:l:N2-l; %时域采样xn2=cos(0.48*n2*pi)+cos(0.52*n2*pi);k2=0:l:N2-l; %频域采样WN2=exp(・j*2*pi/N2);nk2=n2*k2;WNnk2=WN2.Ank2;Xk2=xn2*WNnk2;subplot(2,2,3)stem(n2,xn2);title(X2(n));subplot(2,2,4)stem(k2,abs(Xk2));title(,X2(n)的 DFT: X2(k));运行结果如下:X1(n)1o —o——O &——0 。
—-2 @ 0 5 10X2(n)-12、己知一模拟信号牌=5),现在采样率h=20Hw.进行采样用DFT计算当序列长度分别为L=100,L=20时,N=200点的幅度频谱样值并通过作图与理论上准确的频谱样值进行 比较MATLAB代码如下:fs=20;T=l/fs;t=0:T: 1;xa=exp(-t);subplot(3,2,l)stem(t,xa);title(,连续信号Xa的抽样信号Xrf)N1=200;n 1=0:1:20;xnl=exp(-nl);kl=0:10:Nl-l;WN1 =exp(-j*2*pi/N 1);nkl=nl*kl;WNnkl=WNl.Ankl;Xkl=xnPWNnkl;subplot(3,2,3)stem(nl,xnl);titled序列长度为20的Xnl信号)subplot(3,2,4)stem(kl,abs(Xkl));titleCXnl的200点DFT的幅度频谱》N2=200;n2=0:5:100;xn2=exp(-n2);k2=0:10:N2-l;WN2=exp(・j*2*pi/N2);nk2=n2*k2;WNnk2=WN2.Ank2;Xk2=xn2*WNnk2;subplot(3,2,5)stem(n2,xn2);title(序列长度为100的Xn2信号)subplot(3,2,6)stem(k2,abs(Xk2));title(fXn2的200点DFT的幅度频谱) 运行结果如下:连续信号沔的抽样信号血序列长度为20的Xn1信号1Q0.5Q0L05 10 15 20Xn1的200点DFT的幅度频谱Xn2的200点DFT的幅度频谱序列长度为100的Xn2信号1O0.50 50 1003、一个连续信号含三个频谱分量,经采样得以下序列:x(n) = sin(2 勿 x 0.15n) + cos(2i x (0.15 + df)n) + cos(2i x (0.15 + 2df)n)(1)N=64, df分别为UK、1/64,观察其频谱;MATLAB代码如下:N=64;dfl = l/16;nl=0:N-l;xn 1 =sin(2*pi*0.15*n 1 )+cos(2*pi*(0.15+df 1 )*n 1 )+cos(2*pi*(0.15+2*df 1 )*n 1);subplot(2,2,l)stem(nl,xnl);Yl=fft(xnl,N);magl=abs(Yl);fl=nl/N;subplot(2,2,2)stem(fl,magl);title(,N=64,df=l/16,)N=64;df2= 1 /64;n2=0:N-1;xn2=sin(2*pi*0.15*n2)+cos(2*pi*(0.15+df2)*n2)+cos(2*pi*(0.15+2*df2)*n2);subplot(2,2,3)stem(n2,xn2);Y2=fft(xn2,N);mag2=abs(Y2);f2=n2/N;subplot(2,2,4)stem(f2,mag2);title(,N=64,df=l/64,)运行结果如下:4一4 ■ ■ 0 20 40 60 80N=64,df=1/16N=64,df=1/64804000.51(2) N=64、128, df为1/64,做128点得FFT,其结果有何不同?MATLAB代码如下:Ndata=64;df=l /64; %数据个数N=128; %FFT采用数据长度n 1 =0:Ndata-l; %时间序列xn 1 =sin(2*pi*0.15*nl )+cos(2*pi*(0.15+df)*n 1 )+cos(2*pi*(0.15+2*df)*n I);subplot(2,2,l)stem(nl,xnl);YI=fft(xnl,N);magl=abs(Yl);fl=(O:N-l)/N;% 真实频率subplot(2,2,2)stem(fl,magl);title(*Ndata=64 Nfft=128,);grid on;Ndata=l 28;df=l/64; %数据个数N=128; %FFT采用数据长度n 2=0:Ndata-1; % 时间序列xn2=sin(2*pi*0.15*n2)+cos(2*pi*(0.15+df)*n2)+cos(2*pi*(0. 15+2*df)*n2);subplot(2,2,3)stem(n2,xn2);Y2=fft(xn2,N);mag2=abs(Y2);f2=(0:N-l)/N; %真实频率subplot(2,2,4)stem(f2,mag2);titleCNdata=128 Nfft=128,)4-4L0Ndata=64 Nfft=1284020 40 60 80Ndata=128 Nfft=1284、被噪声污染的信号,较难看出所包含得频率分量,如•个由50Hz和120Hz正弦信号构成 的信号,受零均值随机噪声的干扰,数据采样率为1000Hz,试用FFT函数来分析其信号频 率成分,要求:(1)画出时域波形;(2)分析信号功率谱密度。
注:在MATLAB中,可用函数rand (1, N)产生均值为0,方差为1,长度为N的高斯随机 序列MATLAB代码如下:t=0:0.001:l; %采样周期为0.00Is,即采样频率为1000Hz;x=sin(2*pi*50*t)+sin(2*pi*120*t)+rand(size ⑴); % 产生受噪声污染的正县正弦波信号;subplot(2,1,1)plot(x(l:50)); %画出时域内的信号;Y=fft(x,512); %对X进行512点的傅立叶变换; _f= 1000*(0:256)/512; %设置频率轴(横轴)坐标,1000为采样频率;subplot(2,1,2)plot(f,Y( 1:257)); %画出频域内的信号U!I、思考题1.离散信号的长度对频谱有什麽影响?当信号长度一,定,傅立叶变换域的频点 数量N的变化对频谱有何影响?答:离散信号长度远大于抽样信号时,将使信号的幅度频谱不明显,因此应适度 选取信号的长度当数据个数与FFT采用的数据个数均为32时,频率的分辨率较低,但没有由于 添加零而导致的其它频率成分当数据个数少于FFT采用的数据个数时,FFT 程序将数据后补零补足FFT所需要的数据个数,致使振幅谱中出现很多其他成 分。
当数据个数多于FFT采用的数据个数时,FFT将数据截断为FFT的数据个 数,致使分辨率提高所以,在对信号做频谱分析时,数据样本应有足够的长度, 一般应取的FFT程序中所用的数据点数与原含有信号数据点数相同,这样的频 谱图具有较高的质量,可减少因补零或截断而产生的影响。
