资源描述:
《实验二利用DFT分析离散信号频谱.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、......实验二利用DFT分析离散信号频谱1.利用FFT分析信号的频谱;(1)确定DFT计算的参数;(2)进行理论值与计算值比较,讨论信号频谱分析过程中误差原因及改善方法。答:(1)信号x[k]的周期N=16,角频率w0=2*pi/N=pi/8;作fft的点数N=16。(2)计算程序:N=16;k=0:N-1;x=cos(3*pi/8*k);X=fft(x,N);subplot(2,1,1);stem(k-N/2,abs(fftshift(X)));ylabel('幅度谱')xlabel('m')subplot(
2、2,1,2);stem(k-N/2,angle(fftshift(X)));ylabel('相位谱')xlabel('m')计算结果:.专业.专注.......我们还可以利用ifft函数进行相应的傅里叶反变换,以得到时域上的x[k],分析程序如下:N=16;k=0:N-1;x1=cos(3*pi/8*k);X=fft(x1,N);subplot(2,1,1)stem(k,x1)ylabel('傅里叶变换前的时域波形')xlabel('k')x2=ifft(X,N);subplot(2,1,2)stem(k,x2)y
3、label('傅里叶反变换后的时域波形').专业.专注.......xlabel('k')结果如下:可以看出:经过傅里叶变换和相应反变换后的信号与原信号的时域波形完全相同。2.利用FFT分析信号的频谱;(1)确定DFT计算的参数;(2)进行理论值与计算值比较,讨论信号频谱分析过程中误差原因及改善方法。答:(1)信号无限长,因此需要对其进行截短。该序列单调衰减,当k>=10时,序列已几乎衰减为0,因此只取序列在区间[0,10]上的数值进行分析。(2)计算程序:k=0:10;x=(1/2).^k;.专业.专注.....
4、..subplot(2,1,1);stem(k,x);subplot(2,1,2);w=k-5;plot(w,abs(fftshift(fft(x))));ylabel('幅度谱')xlabel('w')计算结果:3.有限长脉冲序列,利用FFT分析其频谱,并绘出其幅度谱与相位谱。答:计算程序:k=0:5;.专业.专注.......x=[233105];w=k-3;subplot(2,1,1);stem(w,abs(fftshift(fft(x,6))));ylabel('幅度谱')xlabel('w')subplo
5、t(2,1,2);stem(w,angle(fftshift(fft(x,6))));ylabel('相位谱')xlabel('w')计算结果:4.某周期序列由3个频率组成:,利用FFT分析其频谱。如何选取FFT的点数N?此3个频率分别对应FFT计算结果X[m.专业.专注.......]中的哪些点?若选取的N不合适,FFT计算出的频谱X[m]会出现什么情况?答:序列x[k]的周期为N=32,取FFT的点数N=32进行频谱分析,程序如下:N=32;k=0:N-1;x=cos(7*pi/16*k)+cos(9*pi/1
6、6*k)+cos(pi/2*k);X=fft(x,N);subplot(2,1,1);stem(k-N/2,abs(fftshift(X)));ylabel('幅度谱')xlabel('m')subplot(2,1,2);stem(k-N/2,angle(fftshift(X)));ylabel('相位谱')xlabel('m’)分析结果:.专业.专注.......信号x[k]的三个频率分别对应FFT计算结果X[m]中的m=7,m=9,m=8对于离散周期序列进行FFT频谱分析时取计算的点数为序列的周期N,如果计算的
7、点数不是此离散周期序列的周期时,X[m]会发生变化,此时并不表示序列x[k]的频谱,而相当于将序列x[k]的周期扩大或者缩减后得到新信号的频谱。在本例中,若取N=20<32,则可得到下图所示的幅度谱和相位谱:.专业.专注.......同理,若取N=40>32,则可以得到另外不同的幅度谱和相位谱,这里不再详细画出。5.某离散序列由3个频率组成:利用FFT分析其频谱。(1)对x[k]做64点FFT,绘出信号频谱,能分辨出其中的两个频率吗?(2)对x[k]补零到256点后计算FFT,能分辨出其中的两个频率吗?(3)选用非
8、矩形窗计算FFT,能够分辨出其中的两个频率吗?(4)若不能够很好地分辨出其中的两个频谱,应采取哪些措施?答:(1)对x[k]做64点FFT,程序如下:k=0:63;x=cos(2*pi/15*k)+0.75*cos(2.3*pi/15*k);.专业.专注.......X=fft(x,64);stem(k-32,abs(fftshift(X)))ylabel(