数字信号处理实验指导书《数字信号处理》上机实验指导书陈纯锴电子与信息工程学院数字信号处理实验指导书一、引言“数字信号处理”是一门理论和实验密切结合的课程,为了深入地掌握课程内容,应当在学习理论的同时,做习题和上机实验。上机实验不仅可以帮助学生深入地理解和消化基本理论,而且能锻炼初学者的独立解决问题的能力。所以,根据本课程的重点要求编写了四个实验。第一章是全书的基础内容,抽样定理、时域离散系统的时域和频域分析以及系统对输入信号的响应是重要的基本内容。由于第一章大部分内容已经在前期《信号与系统》课程中学习完,所以可通过实验一帮助学生温习以上重要内容,加深学生对“数字信号处理是通过对输入信号的一种运算达到处理目的”这一重要概念的理解。这样便可以使学生从《信号与系统》课程顺利的过渡到本课程的学习上来。第二章、三章DFT、FFT是数字信号处理的重要数学工具,它有广泛的使用内容。采用实验二、实验三加深理解DFT的基本概念、基本性质。FFT是它的快速算法,必须学会使用。数字滤波器的基本理论和设计方法是数字信号处理技术的重要内容。学习这一部分时,应重点掌握IIR和FIR两种不同的数字滤波器的基本设计方法。IIR滤波器的单位冲激响应是无限长的,设计方法是先设计模拟滤波器,然后再通过S~Z平面转换,求出相应的数字滤波器的系统函数。这里的平面转换有两种方法,即冲激响应不变法和双线性变换法,后者没有频率混叠的缺点,且转换简单,是一种普遍应用的方法。FIR滤波器的单位冲激响应是有限长的,设计滤波器的目的即是求出符合要求的单位冲激响应。窗函数法是一种基本的,也是一种重要的设计方法。学习完第七章后可以进行实验四。二、关于使用计算机语言由于数字信号处理实验的主要目的是验证数字信号处理的有关理论,进一步理解巩固所学理论知识。所以,实现实验用的算法语言可以有许多种,但为了提高实验效率,要求学生用编程效率比C语言高好几倍的MATLAB语言。下面介绍MATLAB的主要特点。(有关MATLAB的启动、程序运行和有关信号处理工具箱函数等内容将放到最后附录中介绍。)MATLAB是一种交互式的以矩阵为基本数据结构的系统。在生成矩阵对象时,不要求明确的维数说明。所谓交互式,是指MATLAB的草稿纸编程环境。即用户每输入一条命令并按回车键,MATLAB系统便解释执行之,并显示执行结果。根据该结果,用户立即知道刚输入的命令的正确性,或利用中间结果进行其他处理等。与C语言或FORTRON语言做科学数值计算的程序设计相比较,利用MATLAB可节省大量的编程时间。将其用于数字信号处理实验,则可大大提高实验效率,在有限的上机时间内,实验内容可增加几倍。例如,C语言FFT子程序有70多行,而用MATLAB只调用一个fft函数即可实现对序列进行FFT计算。另外,MATLAB的工具箱及图形显示(打印)功能,可满足各层次人员直数字信号处理实验指导书观、方便的进行分析、计算和设计工作,从而可大大节省时间。例如,序列的卷积、滤波,系统函数H(z)的幅频特性和相频特性等计算,均有现成的工具箱函数。而用其它算法语言完成这些计算的编程比较麻烦,且程序较长。由于上述特点,在美国一些大学里,MATLAB已成为辅助教学的有益工具。MATLAB已成功地用于数字信号处理课程中的问题分析、实验、滤波器设计及计算机模拟。附录中所介绍的信号处理工具箱函数及绘图函数基本可满足本教材所要求的上机实验需要。对序列进行谱分析的MATLAB程序及运行结果见附录。实验一离散信号产生及频谱的绘制一、实验目的:(1)熟悉Matlab环境。(2)掌握Matlab中一些基本函数的建立方法(2)通过编程绘制的幅度相位谱加深理解系统的特性二、实验内容1、编写程序,产生以下离散序列:(1)f(n)=δ(n)(-3n4)n1=-3;n2=4;n0=0;n=n1:n2;x=[n==n0];stem(n,x,'filled');axis([n1,n2,0,1.1*max(x)]);xlabel('时间(n)');ylabel('幅度x(n)');title('单位脉冲序列');(2)f(n)=u(n)(-5n5)n1=-5;n2=5;n0=0;)(jweH-3-2-10123400.20.40.60.81时间(n)幅度x(n)单位脉冲序列数字信号处理实验指导书n=n1:n2;x=[n=n0];stem(n,x,'filled');axis([n1,n2,0,1.1*max(x)]);xlabel('时间(n)');ylabel('幅度x(n)');title('单位阶跃序列');box(3)(0n16)n1=16;a=-0.1;w=1.6*pi;n=0:n1;x=exp((a+j*w)*n);subplot(2,2,1);plot(n,real(x));title('复指数信号的实部');subplot(2,2,3);stem(n,real(x),'filled');title('复指数序列的实部');subplot(2,2,2);plot(n,imag(x));title('复指数信号的虚部');subplot(2,2,4);stem(n,imag(x),'filled');title('复指数序列的虚部');box%boxon加边框/boxoff不加边框/box加或不加切换,注意只对上面一个图有效-5-4-3-2-101234500.20.40.60.81时间(n)幅度x(n)单位阶跃序列-0.11.6(n)jnfe数字信号处理实验指导书(4)f(n)=3sin(nπ/4(0n20)f=1/8;Um=3;nt=2;N=32;T=1/f;dt=T/N;n=0:nt*N-1;tn=n*dt;x=Um*sin(2*f*pi*tn);subplot(2,1,1);plot(tn,x);axis([0,nt*T,1.1*min(x),1.1*max(x)]);ylabel('x(t)');subplot(2,1,2);stem(tn,x);axis([0,nt*T,1.1*min(x),1.1*max(x)]);ylabel('x(n)');box05101520-1-0.500.51复指数信号的实部05101520-1-0.500.51复指数序列的实部05101520-1-0.500.51复指数信号的虚部05101520-1-0.500.51复指数序列的虚部0246810121416-202x(t)0246810121416-202x(n)数字信号处理实验指导书(5)一个连续的周期性方波信号频率为200Hz,信号幅度在-1~+1V之间,要求在图形窗口上显示其两个周期的波形。以4kHz的频率对连续信号进行采样,编写程序生成连续信号和其采样获得的离散信号波形。f=200;nt=2;N=20;T=1/f;dt=T/N;n=0:nt*N-1;tn=n*dt;x=square(2*f*pi*tn,25);%其中25为占空比subplot(2,1,1);plot(tn,x);axis([0,nt*T,1.1*min(x),1.1*max(x)]);ylabel('x(t)');subplot(2,1,2);stem(tn,x);axis([0,nt*T,1.1*min(x),1.1*max(x)]);ylabel('x(n)');box(7)绘制教材习题1.59各小题系统函数的幅度谱和相位谱。clc;%本语句的作用是清除命令执行界面中所有的输出信息clear;%清除workspace中所有的变量clf;%清除所有的绘图内容(如果本次程序执行前已经有绘图窗口存在,则可能将本程序将要绘制的图形绘制到之前的窗口中,可能导致疑惑)w=0:0.1:2*pi;%将连续w分成极小的间隔,%(1)取消下面一行可以做第1个幅度相位谱hjw=1+exp(-j*w)+exp(-2*j*w)+exp(-3*j*w)+exp(-4*j*w)+exp(-5*j*w)+exp(-6*j*w);mag=abs(hjw);%取模/幅度值ang=angle(hjw);%相位00.0010.0020.0030.0040.0050.0060.0070.0080.0090.01-1-0.500.51x(t)00.0010.0020.0030.0040.0050.0060.0070.0080.0090.01-1-0.500.51x(n))(jweH)(jweH数字信号处理实验指导书figure(1);%第一个窗口subplot(211)%将第一个窗口分成2行1列的子图,分的方法是从左到右,从上到下plot(w,mag);%以w为横坐标,幅度谱为纵坐标绘制幅度谱set(gca,'ytick',[-0.5:0.7:3]);%设定y轴显示范围,从-0.5到3,每一个刻度间隔是0.4set(gca,'Xtick',[0:pi/8:2*pi]);%同y轴含义,此处对X轴标注set(gca,'XtickLabel',{'0','pi/8','pi/4','3*pi/8','pi/2','5*pi/8','3*pi/4','7*pi/8','pi','9*pi/8','10*pi/8','11*pi/8','3*pi/2','13*pi/8','7*pi/4','15*pi/8','2*pi'});%设定横轴上坐标如何显示,w1=0:2*pi/7:2*pi;hjw1=1+exp(-j*w1)+exp(-2*j*w1)+exp(-3*j*w1)+exp(-4*j*w1)+exp(-5*j*w1)+exp(-6*j*w1);mag1=abs(hjw1);holdon;stem(w1,mag1,'r');title('幅度谱');%设定第1幅子图的标题subplot(212);%第2个子图%plot(w,ang);%显示相位stem(w,mag)set(gca,'ytick',[-pi:pi/4:pi]);set(gca,'Xtick',[0:pi/8:2*pi]);set(gca,'XtickLabel',{'0','pi/8','pi/4','3*pi/8','pi/2','5*pi/8','3*pi/4','7*pi/8','pi','9*pi/8','10*pi/8','11*pi/8','3*pi/2','13*pi/8','7*pi/4','15*pi/8','2*pi'});title('相位谱');%设定第2幅子图的标题gridon%可以在同一个子图里面叠绘多张图实验二离散傅立叶变换及谱分析一、实验目的1.掌握离散傅里叶变换的计算机实现方法。数字信号处理实验指导书2.检验实序列傅里叶变换的性质。3.掌握计算序列的圆周卷积的方法。4.熟悉连续信号经理想采样前后的频谱变化关系,加深对时域采样定理的理解。5.学习用DFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差,以便在实际中正确应用DFT。二、实验内容1.实现离散傅里叶变换。2.计算序列圆周卷积。3.计算实序列傅里叶变换并检验DFT性质。4.实现连续信号傅里叶变换以及由不同采样频率采样得到的离散信号的傅里叶变换。5.实现补零序列的傅里叶变换。6.实现高密度谱和高分辨率谱,并比较二者的不同。三、实验报告要求见各程序要求%以下为4个扩展函数%(1)离散傅立叶变换采用矩阵相乘的方法function[Xk]=dft(xn,N)n=[0:1:N-1];k=[0:1:N-1];WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^(nk);Xk=xn*WNnk;%(2)逆离散傅立叶变换10)()(NknkNWnxkX10)(1)(NknkNWkXNnx数字信号处理实验指导书function[xn]=idft(Xk,N)n=[0:1:N-1];k=[0:1:N-1];WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^(-nk);xn=(Xk*WNnk)/N;%(3