北京理工大学信号与系统实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于MATLAB的信号与系统实验1实验1信号的时域描述与运算一、实验目的1、掌握信号的MATLAB表示及其可视化方法。2、掌握信号基本时域运算的MATLAB实现方法。3、利用MATLAB分析常用信号,加深对信号时域的理解。二、实验原理1、连续时间的MATLAB表示连续时间信号指的是在连续时间范围内有定义的信号,即除若干个不连续点外,在任何信号都有意义。在MATLAB中,连续时间信号可以用两种方法来表示,即向量表示法和符号对象表示法。向量表示法:严格意义上来说,MATLAB并不能处理连续时间信号,都必须是用信号等时间间隔采样后的采样值来近似表示的,采样时间间隔足够小的时候,这些采样值就可以近似地表示出连续时间信号。例如:t=0:0.01:10;x=sin(t);此时利用plot(t,x)命令即可绘制上述信号的时域波形。符号对象表示法:连续时间信号先用表达式表示出来,然后采用符号表达式来表示信号。例如:symt;x=xin(t);此时利用ezplot(x)命令即可绘制上述信号的时域波形。基于MATLAB的信号与系统实验2常用的信号产生函数:函数名功能heaviside单位阶跃响应sin正弦函数cos余弦函数sincsinc函数exp指数函数2、连续时间信号的时域运算对连续时间信号的运算包括量信号想家、相乘、微分、积分以及位移反转、尺度变换(尺度伸缩)等1)相加和相乘信号的相加和相乘指两个信号对应时刻的值相加和相乘,对于两个采用向量表示的可以直接使用算术运算的运算符“+”和“•”来计算,此时要求表示两信号的向量时间范围和采样间隔相同,采用符号对象表示的两个信号,可以直接根据符号对象的运算规则运算。2)微分和积分对于向量表示发表示的连续时间信号,可以用过数值计算的方法计算信号的微分和积分。这里由时间向量[t1,t2,…,tN]和采样值向量[x1,x2,…,xN]表示的连续信号的微分是利用差分来近似求取的。MATLAB里用diff来计算差分x(k+1)-x(k)。函数名功能Rectpuls门函数Tripuls三角脉冲函数Square周期方波Sawtooth周期锯齿波或三角函数基于MATLAB的信号与系统实验3连续信号的定积分可以由MATLAB的quad函数实现,调用格式为quad(‘functions_name’,a,b)其中,functions_name为被积函数名,a、b为积分区间。对于符号对象表示的连续时间信号,MATLAB提供了diff函数和quad函数分别用于求微分和积分3)位移、反转、尺度变换符号的位移:信号x(t)的自变量t更换为(t-t0),表示x(t)波形在t轴上整体移动,当t00整体右移,当t00整体左移。信号的反转:信号x(t)的自变量t更换为-t,x(t)的波形相当于以t=0为轴反转过来。信号的尺度变换:信号x(t)的自变量t更换为at,x(at)表示信号压缩(a1)或拉伸(a1)。3、离散时间信号的MATLAB表示离散时间信号仅在一些离散时刻有定义。在MATLAB中离散时间信号需要使用两个向量来表示,其中一个向量用于表示离散的时间点,另一个向量用来表示这些时间点上的值。stem函数用于沪指离散时间信号波形,为了与我们表示离散时间信号的习惯相同,在绘图时一般需要添加“filled”选项,以绘制实心的杆状图形。4、离散时间信号的时域运算离散时间信号的相加相乘是将两个信号对应的时间上的值相加或相乘,可以直接使用算术运算的运算符“+”或“•”来计算。基于MATLAB的信号与系统实验4离散时间信号的位移,则可看作是将表示时间的向量平移,而表示对应时间点上的值的向量不变。离散时间信号的反转,则可看作是将表示时间的向量和表示对应时间点桑的值的向量以零为基准点,一纵轴为对称轴反折,向量的反折可以利用MATLAB的fliplr函数实现。三、实验内容、实验结果以及实验中遇到的一些问题与解决(1)利用MATLAB绘制下列连续时间信号波形:①②③④第一题的总代码如下:symstx1=(1-exp(-0.5*t))*heaviside(t);%函数subplot(221);ezplot(x1);%分块画图xlabel('t');title('1(1)x(t)');%标记x2=cos(pi*t)*[heaviside(t)-heaviside(t-2)];subplot(222);ezplot(x2);xlabel('t');title('1(2)x(t)');x3=abs(t)/2*cos(pi*t)*[heaviside(t+2)-heaviside(t-2)];subplot(223);ezplot(x3);xlabel('t');title('1(3)x(t)');x4=exp(-t)*sin(2*pi*t)*[heaviside(t)-heaviside(t-3)];subplot(224);ezplot(x4);xlabel('t');title('1(4)x(t)');X(t)=[u(t)-u(t-2)]X(t)=[u(t+2)-u(t-2)]X(t)=[u(t)-u(t-3)]X(t)=(u(t)基于MATLAB的信号与系统实验5第一题程序运行结果如下:(2)利用MATLAB绘制下列连续时间信号波形:①②③④第二题的总代码如下:n=0:10;x1=heaviside(n-3);subplot(221);stem(n,x1,'filled');xlabel('n');title('2(1)x(n)');x2=(-1/2).^(n).*heaviside(n);subplot(222);stem(n,x2,'filled');024600.51t1(1)x(t)00.511.52-1-0.500.51t1(2)x(t)-2-1012-0.500.51t1(3)x(t)0123-0.500.5t1(4)x(t)X(t)=u(n-3)X(t)=u(n)X(t)=n[u(n)-u(n-5)]X(t)=u(n)基于MATLAB的信号与系统实验601234567891000.10.20.30.40.50.60.70.80.91n2(1)x(n)xlabel('n');title('2(2)x(n)');x3=n.*[heaviside(n)-heaviside(n-5)];subplot(223);stem(n,x3,'filled');xlabel('n');title('2(3)x(n)');x4=sin(n*pi/2).*heaviside(n);subplot(224);stem(n,x4,'filled');xlabel('n');title('2(4)x(n)');第二题程序运行结果如下:注:第一个图中我将单位阶跃函数的定义给改了。在课前我就着手这次的实验,我一直百思不得其解的是单位阶跃信号在这题中n=3时应该为1,而右图是我第一次做这道题的图,在n=3时却是0.5。051000.51n2(1)x(n)0510-0.500.51n2(2)x(n)051001234n2(3)x(n)0510-1-0.500.51n2(4)x(n)基于MATLAB的信号与系统实验7于是在实验课上就这个问题我请教了老师,就是这个heaviside函数的定义可以通过在C盘搜索heaviside文件找到它的定义:functionY=heaviside(X)%HEAVISIDEStepfunction.%HEAVISIDE(X)is0forX0,1forX0,and.5forX==0.%HEAVISIDE(X)isnotafunctioninthestrictsense.%SeealsoDIRAC.%Copyright1993-2012TheMathWorks,Inc.Y=zeros(size(X),'like',X);Y(X0)=1;Y(X==0)=.5;Y(isnan(X))=NaN;看到这个函数的定义后,老师建议如果要改进要么将这个定义函数修改,要么就自己新定义一个函数保存在源文件中。经过思考,我决定暂时修改这个函数,借用与我这次实验。于是我修改了上面这段代码的下划线处,结果如下:Y=zeros(size(X),'like',X);Y(X0)=1;Y(X==0)=1;Y(isnan(X))=NaN;于是,我得到的图就是上文已经给出的“第二题的图”。这个小小的问题当然不妨碍实验,但是从中我得到了定义一个函数的方法,也是一个小小的收获。(3)利用MATLAB生成并绘制连续周期矩形波信号,要求周期为2,峰值为3,显示3个周期的波形。第三题代码如下:基于MATLAB的信号与系统实验8t=linspace(0,2*pi);%取间隔y=3*square(pi*t);%方波plot(t,y);axis([02*pi-3.53.5]);%设置坐标范围gridon;%网络线xlabel('t');title('y');第三题程序运行结果如下:在课前编这道题时我是没有什么思路的,首先是周期方波怎么表示?我细细再看了书上实验内容的参考后,明白了用square函数来表示,却不懂得周期方波的函数怎么使用。此时我不得不上网去查周期方波函数square的使用方法,这才明白了函数括号里直接加上2*pi*t即是周期为1的方波。网上有道例题,给出了linspace这个函数的定义,于是我就用这个函数取了间隔。这样第一次画出的图形乍一看是几条竖线,我才0123456-3-2-10123ty基于MATLAB的信号与系统实验9回想起来绪论的时候老师曾经讲过用axis函数来调整坐标系。当然在最后,为了使用新学的知识,我加上了个gridon来修饰整个图形。(4)已知信号x1(t),以及信号x2(t)=sin(2πt),用MATLAB绘出下列信号的波形:①X3(t)=x1(t)+x2(t)②X4(t)=x1(t)×x2(t)③X5(t)=x1(t)+x1(t)④X6(t)=x2(t)×x3(t-1)第四题的总代码如下:symstx1=(4-t)*[heaviside(t)-heaviside(t-4)];%用阶跃信号当门函数x10=(t+4)*[heaviside(t+4)-heaviside(t)];x2=sin(2*pi*t);x3=x1+x2;subplot(221);ezplot(x3);xlabel('t');title('4(1)x(t)');x4=x1*x2;subplot(222);ezplot(x4);xlabel('t');title('4(2)x(t)');x5=x10+x1;subplot(223);ezplot(x5);xlabel('t');title('4(3)x(t)');x3=subs(x3,t,t-1);%变量替换x6=x2*x3;subplot(224);ezplot(x6);xlabel('t');title('4(4)x(t)');第四题程序运行结果如下:基于MATLAB的信号与系统实验10这题在完成的过程中,主要是门函数的使用问题。我刚开始的思路是使用两个单位阶跃信号相减,还有一种方法是同学说的直接使用门函数rectpuls。相比之下我认为同学的方法更加好,然而当我使用rectpuls(0,4)定义一个在0-4的门函数后,编译出来的图形都十分的奇怪。于是我上网查找了有关rectpuls的用法,结果粗略的查找之下并没有非常详细的解答,原因是这个函数好像是在前几个版本新加进去的函数,网上有的一般是以y轴为作为门函数的中心进行定义,并没有偏离y轴的线为中心作门函数的定义。一方面是我比较懒惰,没能耐心接着寻找这个问题的答案,另一方面我就要试试我自己的想法是否能够编译出可能的图形。因此我使用[heaviside(0)-heaviside(4)]、[heaviside(-4)-heaviside(0)]作门函数,结果发现编出的前三个图形经过验证是正确的。最后一个图形需要使用到变量替换的一个函数subs,其实就在书上

1 / 91
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功