1实验一常见离散信号的MATLAB产生和图形显示授课课时:2学时一、实验目的:(1)熟悉MATLAB应用环境,常用窗口的功能和使用方法。(2)掌握MATLAB在时域内产生常用离散时间信号的方法。(3)掌握离散信号的基本运算。(4)掌握简单的绘图命令。二、实验原理:(一)信号的表示和产生①单位抽样序列01)(n00nn如果)(n在时间轴上延迟了k个单位,得到)(kn即:01)(kn0nkn参考程序:例1-1:)2010(()(nnnx)clearalln1=-10;n2=20;n0=0;%在起点为n1,终点为n2的范围内,于n0处产生冲激。n=n1:n2;%生成离散信号的时间序列x=[n==n0];%生成离散信号x(n)stem(n,x);%绘制脉冲杆图xlabel('n');ylabel('x(n)');%横坐标和纵坐标的标注说明。title('UnitSampleSequence');%图形上方标注图名axis([-102001.2]);%确定横坐标和纵坐标的取值范围②单位阶跃序列01)(nu00nn例1-2:)202((u)(nnnx)clearalln1=-2;n2=20;n0=0;n=n1:n2;%生成离散信号的时间序列x=[n=n0];%生成离散信号x(n)stem(n,x,'filled');2xlabel('n');ylabel('x(n)');title('UnitstepSequence');axis([-22001.2]);③正弦序列)sin()(wnAnx例1-3:一正弦信号的频率为1HZ,振幅值幅度A为1V,在窗口显示2个周期的信号波形,并对该信号的一个周期进行32点采样获得离散信号并显示该连续信号和离散信号的波形。参考程序:clearf=1;A=1;nt=2;N=32;T=1/f;%输入信号频率,振幅和显示周期数dt=T/N;%采样时间间隔n=0:nt*N-1;%建立离信号的时间序列tn=n*dt;%确定时间序列阳电在时间轴上的位置。x=A*sin(2*pi*f*tn);subplot(2,1,1);plot(tn,x);%显示原连续信号axis([0nt*T1.1*min(x)1.1*max(x)]);%限定横坐标和纵坐标的显示范围ylabel('x(t)');subplot(2,1,2);stem(tn,x);%显示经采样的信号axis([0nt*T1.1*min(x)1.1*max(x)]);ylabel('x(n)');④复指数序列jwnenx)(例1-4;6.01.0-、,求jwnenx)(n1=30;a=-0.1;w=0.6;n=0:n1;x=exp((a+j*w)*n);stem(n,x);xlabel('n');ylabel('x(n)');title('复指数序列');⑤指数序列3)(u)(nanxn例1-5:nanx)(,其中a为实数clearn1=-10;n2=10;a1=0.5;a2=2;na1=n1:0;x1=a1.^na1;na2=0:n2;x2=a2.^na2;subplot(2,2,1),plot(na1,x1);title('实指数信号(a1)');subplot(2,2,3),stem(na1,x1);title('实指数序列(a1)');subplot(2,2,2),plot(na2,x2);title('实指数信号(a1)');subplot(2,2,4),stem(na2,x2);title('实指数序列(a1)');(二)序列的基本运算对离散时间序列实行基本运算可得到新的序列,这些基本运算主要包括加、减、乘、除、移位、反折等。两个序列的加减乘除是对应离散样点值的加减乘除,因此,可通过MATLAB的点乘和点除、序列移位和反折来实现,与连续时间信号处理方法基本一样。a)序列的相加与相乘设两离散序列x1(n),x2(n),序列相加为x(n)=x1(n)+x2(n),相乘为x(n)=x1(n).x2(n),实际上是对应的序列值相加或相乘。在MATLAB中可以用运算符“+”实现,但相加的两个序列必须有相同的长度,且应该保证它们是相同的采样位置相加或相乘,因此在计算时,必须格外注意序列下标的计算。例1-6:求)100()4()2()(nnnnxclearalln1=0;n2=10;n01=2;n02=4;%赋初值n=n1:n2;x1=[(n-n01)==0];x2=[(n-n02)==0];x3=x1+x2;subplot(3,1,1);stem(n,x1);title('x1');subplot(3,1,2);stem(n,x2);title('x2');subplot(3,1,3);stem(n,x3);4title('x3');例1-7:)85()4()(2)64()2()(1nnunxnnunx求x1(n)+x2(n)clearalln1=-4:6;n01=-2;x1=[(n1-n01)=0];%建立x1信号n2=-5:8;n02=4;x2=[(n2-n02)=0];%建立x2信号n=min([n1,n2]):max([n1,n2]);%为x信号建立时间序列nN=length(n);%求出时间序列n的点数Ny1=zeros(1,N);y2=zeros(1,N);%新建一维N列y1、y2全零数组y1(find((n=min(n1))&(n=max(n1))))=x1;%对y1赋值y2(find((n=min(n2))&(n=max(n2))))=x2;%对y2赋值x=y1+y2;stem(n,x);b)序列的移位将一个离散信号序列进行移位,形成新的序列:x1(n)=x(n-m)m0时,原序列x(n)向右移m位,m0,原序列x(n)向左移m位。例1-8:序列x1=[11101],求x1(n),x1(n-1),x1(n+1)%shiftclearallx1=[11101];n1=-3:1;%设定范围n=n1+1;%范围右移m=n1-1;%左移x=x1;subplot(3,1,1);stem(n,x);%右移ylabel('x1(n-1)');subplot(3,1,2);stem(n1,x);%原序列ylabel('x1(n)');subplot(3,1,3);stem(m,x);%左移ylabel('x1(n+1)')c)序列的反褶x(-n)Matlab提供了fliplr函数,可以实现序列的反褶。5例1-9::将序列x1={12103},-3=n=1,求x1(-n)%fanzheclearx1=[12103];n1=[-3:1:1];subplot(1,2,1);stem(n1,x1);ylabel('x(n)');xlabel('n');n=-fliplr(n1);x=fliplr(x1);subplot(1,2,2);stem(n,x);ylabel('x(-n)');xlabel('n');d)序列的尺度变换原序列x(n),y(n)=x(mn)就是对原序列每隔m点取样形成的,相当于将时间轴压缩或扩展了m倍。例1-10:)2/(),2(),2sin()(nxnxnnx求clearalln=(0:20)/20;%归一化x=sin(2*pi*n);%x(n)x1=sin(2*pi*n*2);%x(2n)x2=sin(2*pi*n/2);%x(3n)subplot(3,1,1);stem(n,x);ylabel('x(n)');subplot(3,1,2);stem(n,x1);ylabel('x(2n)');subplot(3,1,3);stem(n,x2);ylabel('x(n/2)');三、实验内容及步骤:(1)复习常用离散时间信号的有关内容,阅读并输入实验原理中介绍的例题程序,理解其语句含义。(2)编写程序,产生下列离散序列,并绘出其图形.a))55(),4(2)3()(nnnnx;6b))55(),2()3()(nnununxc))(1-2)(nnunx)((3).已知两序列如下:x[n]={-451-2-302},-4n4;y[n]={6-3-1087-2};-2n6;编程计算两序列的和、积,以及y(n-2),y(-n)。四、实验用MATLAB函数介绍1.涉及到的MATLAB子函数其中在信号的产生和表示的实验过程中常用到的MATLAB指令(函数名)有:stem(),zeros(),ones(),length(),linspace(),axis(),square(),rand(),title(),xlable(),ylable(),subplot()等,具体调用格式参看“help”或者查阅相关书籍。另外,在具体的实验过程中也可以根据实际需要自己定义函数例如:impseq.m,stepseq.m,sigadd.m等。举例:function[x,n]=impseq(n0,ns,nf)n=[ns:nf];x=[(n-n0)==0];在序列的基本运算的实验过程中常用到的MATLAB指令(函数名)有:find,fliplr等,调用格式:find(n=min(n1)&(n=max(n1)):在符合关系运算条件的范围内寻找非零元素的索引号。X1=fliplr(x):将x的行元素进行左右翻转,赋给变量x1.2.用MATLAB生产离散信号须注意的问题1)有关数组与下标MATLAB中处理的数组,将下标放在变量后面的小括号内,且约定从1开始递增,例如x=[5,4,3,2,1,0],表示x(1)=5,x(2)=4,......,x(6)=0.若要表示一个下标不是由1开始的数字x(n),一般采用两个矢量,例如:n=[-2:3];x=[5,4,3,2,1,0];这表示了一个含6个采样点的矢量。n为一组时间矢量,对应x有:x(-2)=5,......x(3)=0.2)信号的图形绘制连续信号作图使用plot函数绘制线形图,离散信号作图使用stem函数绘制脉冲杆图。调用格式:stem(x,y):绘制以x为横轴、y为纵轴的脉冲杆图图形注:实验过程中也可以使用自己编制的自定义函数,如impseq()、stepseq()等。五、思考题:产生单位抽样序列和单位阶跃序列各有几种方法?如何使用?六、实验报告要求(1)简述实验目的及原理。(2)列写调试通过的实验程序,描绘实验程序产生的曲线图形。(3)简要回答思考题。