数字信号处理(A)实验指导书柏逢明吉林城建学院2012年10月20日实验一离散时间信号分析一、实验目的:加深对常用离散信号的理解,掌握序列运算和序列构造方法。二、实验原理:连续信号采样获得离散时间序列,对序列进行运算和构造典型序列过程。三、实验内容:信号是信息的载体,它可以传递不同的信息。离散时间信号是时间变量离散化的信号。它是对连续时间信号经过抽样而获得的。经过采样得到的多个离散点的有序排列的信号可称为序列x(n)。(一)、序列的运算1.序列相加与相乘:已知序列2020,05.1)(2020,20/)sin()(2001naanxnnnxn,分别求两序列相加及相乘)()()()()()(212211nxnxnynxnxny%sequence1.mw0=pi/20;a=1.05;n1=[-20:20];n2=[-20:20];subplot(2,2,1),stem(n1,sin(w0.*n1),'.k');axis([-20,20,-1,3]);text(-10,2,'x1(n)');xlabel('n')subplot(2,2,2),stem(n2,a.^n2,'.k');axis([-20,20,-1,3]);text(-10,2,'x2(n)');xlabel('n')n=[min(min(n1),min(n2)):max(max(n1),max(n2))];x1=zeros(1,length(n));x2=zeros(1,length(n));x1([find((n=min(n1))&(n=max(n1)))])=sin(w0.*n1);x2([find((n=min(n2))&(n=max(n2)))])=a.^n2;y1=x1+x2;y2=x1.*x2;subplot(2,2,3);stem(n,y1,'.k');axis([-20,20,-1,3]);text(-10,2,'y1(n)');xlabel('n')subplot(2,2,4);stem(n,y2,'.k');axis([-20,20,-1,3]);text(-10,2,'y2(n)');xlabel('n')2.序列移位(延迟):设x(n)={1,2,3,4,5,5,4,3,2,1}且n={0,1,2,3,4,5,6,7,8,9},求出序列x(n)及其移位x(n-2)、x(n+2)的图形。%sequence2.mn1=[0:9];x=[1,2,3,4,5,5,4,3,2,1];subplot(3,1,1);stem(n1,x,'.b'),axis([-3,12,0,5])text(0,3,'x(n)')n2=n1-2;subplot(3,1,2);stem(n2,x,'.b'),axis([-3,12,0,5])text(9,3,'x(n+2)')n3=n1+2;subplot(3,1,3);stem(n3,x,'.b'),axis([-3,12,0,5])text(0,3,'x(n-2)')3.序列反褶(翻转):已知序列10152)(nnnxn,求x(n)的反褶序列。解:x(n)的反褶序列为10152)(nnnxn---,设nanx)(,a=1.1,-10≤n≤20。序列x(n)的反褶序列x(-n)的Matlab程序实现:%sequence3.ma=1.1;n=[-10:20];x=a.^n;subplot(2,1,1);stem(n,x,'.k'),axis([-20,20,0,8])text(0,5,'x(n)')n=fliplr(-n);x=fliplr(x);subplot(2,1,2);stem(n,x,'.k'),axis([-20,20,0,8])text(0,5,'x(-n)')(二)、典型序列1.单位冲激序列(单位抽样序列):0001)(nnn(1)采用Matlab编程实现:function[x,nx]=delta(n)x=(n==0);nx=n;(2)采用Matlab的zeros函数实现:x=zeros(1,N);x(1)=12.单位阶跃序列:0001)(nnnu(1)采用Matlab编程实现:functionu=u(n)u=[n=0];nu=n;(2)采用Matlab的ones函数实现:x=ones(1,N);3.矩形序列:NnnNnnRN,00101)(function[x,nx]=RNn(N,n);%设N=5,此时R5(n)x=[(n=0)&(n=N-1)];nx=n;4.实指数序列:nanx)(%sequence4.ma1=1.1;a2=0.9;a3=-1.1;a4=-0.9;n=[-5:15];x1=(a1.^n);x2=(a2.^n);x3=(a3.^n);x4=(a4.^n);subplot(2,2,1);stem(n,x1,'.k');axis([-5,15,-0.5,5]);xlabel('n');text(3.5,3.5,'a1');subplot(2,2,2);stem(n,x2,'.k');axis([-5,15,-0.2,1.2]);xlabel('n');text(10,0.7,'0a1');subplot(2,2,3);stem(n,x3,'.k');axis([-5,15,-6,4]);xlabel('n');text(4,-4,'a-1');subplot(2,2,4);stem(n,x4,'.k');axis([-5,15,-1,1.2]);xlabel('n');text(10,0.7,'-1a0');5.正弦序列:)sin()(0nAnx,设15/0%sequence5.mw=pi/15;%正弦序列的数字域频率反映了序列变化的快慢,如w=0.01*pi和w=0.1*pin=[-15:15];x=sin(w.*n);stem(n,x,'.k');axis([-15,15,-2,2]);text(-14,1.7,'sin(nw)');text(12,-0.3,'n');6.复指数序列:)sin()cos()(000njnenxnj设15/0,复指数序列njenx0)(幅度特性与相位特性的Matlab实现程序:%sequence6.mw0=pi/15;n=[-15:15];x=exp(j.*w0.*n);subplot(2,1,1);stem(n,abs(x),'.k');axis([-15,15,-0.2,1.5]);text(11,-0.1,'n');text(1,1.2,'x(n)')subplot(2,1,2);stem(n,angle(x),'.k');text(11,-0.5,'n');text(1,3,'arg[x(n)]');四、实验要求:①要求学生运用MATLAB编程完成一些数字信号处理的基本功能,加深对教学内容的理解;②讨论复指数序列的性质。实验二DFS、DFT及FFT1.M脚本文件编写;2.Fourier级数与FFT一、实验目的:熟悉MATLAB软件中M文件的编写方法,实验数字信号处理从Fouriere级数展开到FFT的过程。二、实验原理:时域函数的Fourier级数展开与FFT,符号方法与几分方法和子程序调用。三、实验内容:(一)、关于Matlab程序设计之M文件编写:Matlab语言代码的文件称为M文件,其后缀都为m。M文件分为函数程序和脚本程序两种:函数程序可以接受输入参数,并可以输出;脚本程序是Matlab表达式的集合,不可以接受参数。编辑M文件可以使用各种文本编辑器,Matlab中具有内置的M文件编辑器。1.M脚本文件脚本程序是一种最简单的M文件,它没有输入输出参数,只不过是Matlab表达式的集合(如前命令行中的所有命令)。脚本程序可以是一系列命令行中执行命令的集合,也可以是操作工作空间中的变量和程序中新建的变量。编写M文件的步骤:①点击File→NEW选M-file或在窗口工具条上点击NewFile图标,打开Matlab文件编辑器(MatlabEditor/Debugger),进行M文件程序编写(当然,也可以用其他文本编辑器);②单击编辑器工具条保存图标,进行文件保存为*.m格式文件,如ex91.m;③运行文件:a.必须使得*.m文件所在目录为当前目录,或让该目录处于搜索路径上;b.然后运行该指令:ex91(即扩展名前的名称)。2.M函数程序函数程序既可以接受输入参数,也可以输出参数,同时也可进行函数操作工作空间的变量。同其他高级语言类似,M函数文件也有局部变量和全局变量。编写M函数程序文件与编写M脚本文件的步骤相同。注意:在一个M函数程序文件中要有函数项语句。只能有一个主函数(function),一般放在文件最前面,其它函数均为子函数(function)。运行时运行主函数所制定的文件。3.应用举例问题:已知一分段函数15457.0117575.015457.0),(215.175.375.0216215.175.375.02112122212212122xxexxexxexxpxxxxxxxx,试画出此函数所表示的三维曲面。(1)用M脚本文件表示:%[ex91.m]a=2;b=2;clf;x=-a:0.2:a;y=-b:0.2:b;fori=1:length(y)forj=1:length(x)ifx(j)+y(i)1z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2-1.5*x(j));elseifx(j)+y(i)=-1z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2+1.5*x(j));elsez(i,j)=0.7575*exp(-y(i)^2-6.*x(j)^2);endendendaxis([-a,a,-b,b,min(min(z)),max(max(z))]);colormap(flipud(winter));surf(x,y,z);运行命令:ex91运行结果:三维图形(2)用M程序文件表示:%[ex92.m]functionex92(a,b)%这是主函数%Thisismysecondexample.%adefinethelimitofvariablex.%bDefinethelimitofvariabley.a=2;b=2;clf;x=-a:0.2:a;y=-b:0.2:b;fori=1:length(y)forj=1:length(x)ifx(j)+y(i)1z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2-1.5*x(j));elseifx(j)+y(i)=-1z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2+1.5*x(j));elsez(i,j)=0.7575*exp(-y(i)^2-6.*x(j)^2);endendendaxis([-a,a,-b,b,min(min(z)),max(max(z))]);colormap(flipud(winter));surf(x,y,z);运行命令:ex92(2,2)运行结果:三维图形(与前相同)(二)、数据信号处理:从Fouriere级数展开到FFT:已知时域函数elsetttw,05.15.0,5.0)(,求Fouriere级数展开系数。编程方法:(1)符号方法:%%[fzzysym.m]function[A_sym,B_sym]=fzzysym(T,Nf,Nn)%采用符号计算求[0,T]内时间函数的三角级数展开系数%函数的输入输出都是数值量%Nf谐波的阶数%Nn输出数据的准确位数%A_sym第1元素是直流项,其后元素依次是1,2,3,...次谐波cos项展开系数%B_sym第2,3,4,...元素