资源描述:
《数字信号处理实验报告 》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验报告学院(系)名称:计算机与通信工程学院姓名学号专业班级实验项目实验二离散傅里叶变换及性质课程名称数字信号处理课程代码实验时间2013年06月17日实验地点主校区计算机基础实验室批改意见成绩教师签字:一,实验目的(1)通过本实验的练习,了解离散时间信号时域运算的基本实现方法。(2)了解相关函数的调用格式及作用。(3)通过本实验,掌握离散傅里叶变换的原理及编程思想。二,实验原理对于离散序列,存在着两种傅里叶变换——离散时间傅里叶变换(DTFT)和离散傅里叶变换(DFT)。DTFT用以求出离散信
2、号的连续频谱,它仅在时域上离散而在频域上是一个连续的;DFT用以求出连续频谱上的离散样本点,所以其在时域和频域上都是离散的。对于一个离散序列,它的离散时间傅里叶变换(DTFT)的定义为:离散时间傅里叶变换收敛的充分条件是绝对可加,即利用离散快速傅里叶变换函数计算傅里叶计算傅里叶变换。MATLAB提供了内部函数来快速地进行离散傅里叶变换(DFT)和逆变换(IDFT)的计算,如下所列。,,,(1):计算L点的DFT,L为序列的长度,即。(2):计算N点的DFT。N为指定采用的点数,当,则程序会自动给
3、后面补个零点;如果,则程序会自动截断,取前N个数据。(1):计算点的IDFT,L为序列的长度,即。(2):计算N点的IDFT,N为指定采用的点数,当,则程序会自动给后面补个零点;如果,则程序会自动截断,取前N个数据。三,实验内容1.离散时间傅里叶变换DTFT【例3-1-1】求有限长序列的DTFT,画出它的幅值谱、相位谱、实部和虚部。MATLAB程序如下:clf;x=[1,2,3,4,5];nx=[-1:3]w=linspace(0,2*pi,512);H=x*exp(-j*nx'*w);subp
4、lot(2,2,1);plot(w,abs(H));ylabel('幅度');gridon;%画幅度特性曲线subplot(2,2,2);plot(w,angle(H));ylabel('相角');gridon;%画相位特性曲线subplot(2,2,3);plot(w,real(H));ylabel('实部');gridon;%画幅度实部特性曲线subplot(2,2,4);plot(w,imag(H));ylabel('虚部');gridon;%画幅度虚部特性曲线set(gcf,'color
5、','w');程序运行的结果如图1所示图12.离散傅里叶变换DFT【例3-1-2】对于离散序列,求出它的20点和23点的离散傅里叶变换的幅值谱。MATLAB程序如下:k=5;n1=[0:0.75:19];x1=cos(2*pi*n1/k);xk1=abs(fft(x1));n2=[0:0.75:22];x2=cos(2*pi*n2/k);xk2=abs(fft(x2));subplot(2,2,1);plot(n1,x1);xlabel('n');ylabel('x1(n)');gridon;s
6、ubplot(2,2,2);stem(n1,xk1);xlabel('k');ylabel('X1(k)');gridon;subplot(2,2,3);plot(n2,x2);axis([0,22,-1,1]);xlabel('n');ylabel('x2(n)');gridon;subplot(2,2,4);stem(n2,xk2);axis([0,22,0,10]);xlabel('k');ylabel('X2(k)');gridon;set(gca,'XTickMode','manual
7、','XTick',[0,5,10,15,22])set(gcf,'color','w');离散傅里叶变换及其快速计算结果如图2所示图2从图2中可以看出,只有序列的20点的傅里叶变换得到的频谱图是单一谱线。这是由于序列的周期是5,而20是5的整数倍,所以得到了单一谱线的频谱图,而23则选取了4个半周期,即出现了频谱的泄露,所以得不到单一谱线的频谱图。3.离散傅里叶变换DFT的性质(1)时移性质【例3-1-3】将序列右移10位,观察它的幅值谱和相位谱的变化。MATLAB的程序如下:clf;w=-p
8、i:2*pi/511:pi;d=10;x1=[2,1,-1,8,6,-2,-4,9,-3];xk1=abs(freqz(x1,1,w));omegal=angle(freqz(x1,1,w));x2=[zeros(1,d),x1];xk2=abs(freqz(x2,1,w));omega2=angle(freqz(x2,1,w));subplot(2,2,1);plot(w/pi,xk1);gridon;title('原始序列的幅值谱');subplot(2,2,2);plot(w/pi,xk2