实验一 常见离散信号的MATLAB 产生和图形显示授课课时:2学时 一、实验目的:(1)熟悉MATLAB 应用环境,常用窗口的功能和使用方法。
(2)掌握MATLAB 在时域内产生常用离散时间信号的方法。
(3)掌握离散信号的基本运算。
(4)掌握简单的绘图命令。
二、实验原理:(一)信号的表示和产生① 单位抽样序列⎩⎨⎧=01)(n δ00≠=n n 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即:⎩⎨⎧=-01)(k n δ≠=n k n参考程序:例1-1:)2010(()(<<-=n n n x )δclear alln1=-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('Unit Sample Sequence');%图形上方标注图名 axis([-10 20 0 1.2]);%确定横坐标和纵坐标的取值范围② 单位阶跃序列⎩⎨⎧=01)(n u00<≥n n 例1-2:)202((u )(<<-=n n n x )clear alln1=-2;n2=20;n0=0;n=n1:n2;%生成离散信号的时间序列 x=[n>=n0];%生成离散信号x(n) stem(n,x,'filled'); xlabel('n');ylabel('x(n)'); title('Unit step Sequence'); axis([-2 20 0 1.2]);③ 正弦序列)sin()(ϕ+=wn A n x例1-3:一正弦信号的频率为1HZ ,振幅值幅度A 为1V ,在窗口显示2个周期的信号波形,并对该信号的一个周期进行32点采样获得离散信号并显示该连续信号和离散信号的波形。
参考程序:clear f=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([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)');④ 复指数序列jwn e n x =)(例1-4;6.01.0-==ωσ、,求jwne n x =)(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('复指数序列');⑤指数序列nax n)(u)(n=例1-5:n a(,其中a为实数)nx=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('实指数信号(a<1)');subplot(2,2,3),stem(na1,x1);title('实指数序列(a<1)');subplot(2,2,2),plot(na2,x2);title('实指数信号(a>1)');subplot(2,2,4),stem(na2,x2);title('实指数序列(a>1)');(二)序列的基本运算对离散时间序列实行基本运算可得到新的序列,这些基本运算主要包括加、减、乘、除、移位、反折等。
两个序列的加减乘除是对应离散样点值的加减乘除,因此,可通过MATLAB 的点乘和点除、序列移位和反折来实现,与连续时间信号处理方法基本一样。
a)序列的相加与相乘设两离散序列x1(n),x2(n),序列相加为x(n)=x1(n)+x2(n),相乘为x(n)=x1(n).x2(n),实际上是对应的序列值相加或相乘。
在MATLAB 中可以用运算符“+”实现,但相加的两个序列必须有相同的长度,且应该保证它们是相同的采样位置相加或相乘,因此在计算时,必须格外注意序列下标的计算。
例1-6:求)100()4()2()(<<-+-=n n n n x δδclear alln1=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);title('x3'); 例1-7:)85()4()(2)64()2()(1<<--=<<-+=n n u n x n n u n x 求x1(n)+x2(n )clear all n1=-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) m>0时,原序列x(n)向右移m位,m<0,原序列x(n)向左移m位。
例1-8:序列x1 = [1 1 1 0 1],求x1(n),x1(n-1),x1(n+1)%shiftclear allx1 = [1 1 1 0 1];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函数,可以实现序列的反褶。
例1-9::将序列x1 ={1 2 1 0 3},-3<=n<=1,求x1(-n) %fanzheclearx1 = [1 2 1 0 3];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()(n x n x n n x 求π=clear alln = (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()(<<--++=n n n n x δδ; b))55(),2()3()(<<-++-=n n u n u n xc))(1-2)(nn u n x )(=(3).已知两序列如下:x[n]={-4 5 1 -2 -3 0 2}, -4<n<4;y[n]={6 -3 -1 0 8 7 -2}; -2<n<6; 编程计算两序列的和、积,以及y (n-2),y(-n)。
四、实验用MATLAB 函数介绍1.涉及到的MATLAB 子函数其中在信号的产生和表示的实验过程中常用到的MATLAB 指令(函数名)有:stem(),zeros(),ones(),length(),linspace(),axis(),square(),rand(),title(),xlable(),ylable(),s ubplot()等,具体调用格式参看“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)):在符合关系运算条件的范围内寻找非零元素的索引号。