12131信号与系统matlab实验指导书Word下载.docx
- 文档编号:20835572
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:48
- 大小:317.32KB
12131信号与系统matlab实验指导书Word下载.docx
《12131信号与系统matlab实验指导书Word下载.docx》由会员分享,可在线阅读,更多相关《12131信号与系统matlab实验指导书Word下载.docx(48页珍藏版)》请在冰豆网上搜索。
closeall,%Closeallfigurewindows
dt=0.01;
%Specifythestepoftimevariable
t=-2:
dt:
2;
%Specifytheintervaloftime
x=sin(2*pi*t);
%Generatethesignal
plot(t,x)%Openafigurewindowanddrawtheplotofx(t)
title('
Sinusoidalsignalx(t)'
)
xlabel('
Timet(sec)'
常用的图形控制函数
axis([xmin,xmax,ymin,ymax]):
图型显示区域控制函数,其中xmin为横轴的显示起点,xmax为横轴的显示终点,ymin为纵轴的显示起点,ymax为纵轴的显示终点。
有时,为了使图形具有可读性,需要在所绘制的图形中,加上一些网格线来反映信号的幅度大小。
MATLAB中的gridon/gridoff可以实现在你的图形中加网格线。
gridon%在图形中加网格线。
gridoff%取消图形中的网格线。
holdon%图形显示窗口原来的图像保持。
holdoff%关闭图形保持功能。
figure%打开新的显示窗口。
x=input(‘Typeinsignalx(t)inclosedform:
’)%接收键盘输入。
在绘制信号的波形图时,有时我们需要将若干个图形绘制在图一个图形窗口中,这就需要使用MATLAB的图形分割函数subplot(),其用法是在绘图函数stem或plot之前,使用图形分割函数subplot(n1,n2,n3),其中的参数n1,n2和n3的含义是,该函数将把一个图形窗口分割成n1×
n2个子图,即将绘制的图形将绘制在第n3个子图中。
在《信号与系统》课程中,单位阶跃信号u(t)和单位冲激信号δ(t)是二个非常有用的信号。
它们的定义如下
1.1(a)
1.1(b)
这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。
产生单位冲激信号的扩展函数为:
functiony=delta(t)
y=(u(t)-u(t-dt))/dt;
产生单位阶跃信号的扩展函数为:
functiony=u(t)
y=(t>
=0);
%y=1fort>
0,elsey=0
请将这二个MATLAB函数分别以delta和u为文件名保存在work文件夹中,以后,就可以像教材中的方法使用单位冲激信号δ(t)和单位阶跃信号u(t)。
单位冲激信号:
x=-10:
0.1:
10;
y=(x==0);
%就是个条件判断,只有x=0的时候,y才为“1”
plot(x,y);
如果是单位脉冲信号(离散的),改成stem(x,y);
就行了
t=-5:
0.01:
5;
y=(t==0);
subplot(121);
plot(t,y,'
r'
);
n=-5:
x=(n==0);
subplot(122);
>
stem(n,x);
x=-2:
y=100*(x==0);
stairs(x,y)
练习产生正弦信号(sin、cos)、指数信号(exp)、符号函数(sign)、抽样函数(sinc)、矩形脉冲(rectpuls(t,width))、三角脉冲(tripuls(t,width,skew))
2.2离散时间信号的仿真
程序Program1_2用来产生离散时间信号x[n]=sin(0.2πn)。
%Program1_2
%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignalanddrawitsplot
n=-10:
x=sin(0.2*pi*n);
stem(n,x)%Openafigurewindowanddrawtheplotofx[n]
title('
Sinusoidalsignalx[n]'
xlabel('
Timeindexn'
请仔细阅读该程序,比较程序Program1_1和Program1_2中的不同之处,以便自己编程时能够正确使用这种方法方针连续时间信号和离散时间信号。
程序Program1_3用来仿真下面形式的离散时间信号:
%Program1_3
%Thisprogramisusedtogenerateadiscrete-timesequence
%anddrawitsplot
%Specifytheintervaloftime,thenumberofpointsofnis11.
x=[0,0,0,0,0.1,1.1,-1.2,0,1.3,0,0];
stem(n,x,'
.'
)%Openafigurewindowanddrawtheplotofx[n]
gridon,
Adiscrete-timesequencex[n]'
由于在程序的stem(n,x,'
)语句中加有'
选项,因此绘制的图形中每根棒条线的顶端是一个实心点。
如果需要在序列的前后补较多的零的话,可以利用函数zeros(),其语法为:
zeros(1,N):
圆括号中的1和N表示该函数将产生一个一行N列的矩阵,矩阵中的所有元素均为零。
利用这个矩阵与序列x[n]进行组合,从而得到一个长度与n相等的向量。
例如,当x[n]={0.1,1.1,-1.2,0,1.3}时,为了得到程序Program1_3中的序列,
可以用这个MATLAB语句x=[zeros(1,4)xzeros(1,2)]来实现。
用这种方法编写的程序如下:
%Program1_4
%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignal
x=[zeros(1,4),0.1,1.1,-1.2,0,1.3,zeros(1,2)];
%Generatethesequence
stem(n,x,'
离散时间单位阶跃信号u[n]定义为
1.2
离散时间单位阶跃信号u[n]除了也可以直接用前面给出的扩展函数来产生,还可以利用MATLAB内部函数ones(1,N)来实现。
这个函数类似于zeros(1,N),所不同的是它产生的矩阵的所有元素都为1。
单位冲激序列:
n=-10:
y=[zeros(1,10),1,zeros(1,10)];
stem(n,y)
单位阶跃序列:
y=[zeros(1,10),ones(1,11)];
值得注意的是,利用ones(1,N)来实现的单位阶跃序列并不是真正的单位阶跃序列,而是一个长度为N单位门(Gate)序列,也就是u[n]-u[n-N]。
但是在一个有限的图形窗口中,我们看到的还是一个单位阶跃序列。
三、实验内容及步骤
Q1-1:
修改程序Program1_1,将dt改为0.2,再执行该程序,保存图形,看看所得图形的效果如何?
dt=0.01时的信号波形dt=0.2时的信号波形
此处粘贴图形此处粘贴图形
这两幅图形有什么区别,哪一幅图形看起来与实际信号波形更像?
答:
Q1-2:
修改程序Program1_1,并以Q1_2为文件名存盘,产生实指数信号x(t)=e-2t。
要求在图形中加上网格线,并使用函数axis()控制图形的时间范围在0~2秒之间。
然后执行该程序,保存所的图形。
修改Program1_1后得到的程序Q1_2如下:
信号x(t)=e-2t的波形图
Q1-3:
将实验原理中所给的单位冲激信号和单位阶跃信号的函数文件在MATLAB文件编辑器中编写好,并分别以以文件名delta和u存入work文件夹中以便于使用。
抄写函数文件delta如下:
抄写函数文件u如下:
Q1-4:
修改程序Program1_4,并以Q1_4为文件名存盘,利用axis()函数,将图形窗口的横坐标范围改为-2≤n≤5,纵坐标范围改为-1.5≤x≤1.5。
修改Program1_4后得到的程序Q1_4如下:
信号的波形图
此处粘贴图形
实验二连续系统的时域分析
一、实验目的
1.掌握信号的时域变换。
2.信号的时域运算。
3.掌握卷积的计算。
4.掌握微分方程的求解。
二、实验原理
1信号的时域变换
1.1信号的时移
信号的时移可用下面的数学表达式来描述:
设一个连续时间信号为x(t),它的时移y(t)表示为:
y(t)=x(t-t0)2.1
其中,t0为位移量。
若t0为正数,则y(t)等于将x(t)右移t0秒之后的结果。
反之,若t0为负数,则y(t)等于将x(t)左移t0秒之后的结果。
在MATLAB中,时移运算与数学上习惯表达方法完全相同。
程序Program2_1对给定一个连续时间信号x(t)=e-0.5tu(t),对它分别左移2秒钟和右移2秒钟得到信号x1(t)=e-0.5(t+2)u(t+2)和x2(t)=e-0.5(t-2)u(t-2)。
%Program2_1
%Thisprogramisusedtoimplementthetime-shiftoperation
%onacontinuous-timesignalandtoobtainitstime-shiftedversions
%andtodrawtheirplots.
clear,closeall,
x=exp(-0.5*t).*u(t);
%Generatetheoriginalsignalx(t)
x1=exp(-0.5*(t+2)).*u(t+2);
%Shiftx(t)totheleftby2secondtogetx1(t)
x2=exp(-0.5*(t-2)).*u(t-2);
%Shiftx(t)totherightby2secondtogetx2(t)
subplot(311)
plot(t,x)%Plotx(t)
Originalsignalx(t)'
subplot(312)
plot(t,x1)%Plotx1(t)
Leftshiftedversionofx(t)'
subplot(313)
plot(t,x2)%Plotx2(t)
Rightshiftedversionofx(t)'
1.2信号的时域反褶
对一个信号x[n]的反褶运算在数学上表示为
y[n]=x[-n]2.2
这种反褶运算,用MATLAB实现起来也是非常简单的。
有多种方法可以实现信号的反褶运算。
方法一,修改绘图函数plot(t,x)和stem(n,x)中的时间变量t和n,即用-t和-n替代原来的t和n,这样绘制出来的图形,看起来就是原信号经时域反褶后的版本。
方法二,直接利用原信号与其反褶信号的数学关系式来实现。
这种方法最符合信号反褶运算的实际意义。
1.3信号的时域尺度变换
信号x(t)的时域尺度变换在数学描述为
y(t)=x(at),2.3
其中a为任意常数。
根据a的不同取值,这种时域尺度变换对信号x(t)具有非常不同的影响。
当a=1时,y(t)=x(t);
当a=-1时,y(t)=x(-t),即y(t)可以通过将x(t)反褶运算而得到;
当a>
1时,y(t)=x(at),y(t)是将x(t)在时间轴上的压缩而得到;
当0<
a<
1时,y(t)=x(at),y(t)是将x(t)在时间轴上的扩展而得到;
当-1<
0时,y(t)=x(at),y(t)是将x(t)在时间轴上的扩展同时翻转而得到;
当a<
-1时,y(t)=x(at),y(t)是将x(t)在时间轴上的压缩同时翻转而得到;
由此可见,信号的时域尺度变换,除了对信号进行时域压缩或扩展外,还可能包括对信号的时域反褶运算。
实际上,MATLAB完成式2.3的运算,并不需要特殊的处理,按照数学上的常规方法即能完成。
1.4周期信号
在《信号与系统》课程中,周期信号是一类非常重要的信号。
给定一个信号x(t)或x[n],如果满足
x(t)=x(t+kT)2.4
x[n]=x[n+kN]2.5
则该信号叫做周期信号。
其中,k为任意整数,T和N为常数,通常称为信号的基本周期或最小周期。
周期信号可以看作是一个时限的非周期信号经过周期延拓之后形成的。
在数字信号处理中,周期延拓这一信号处理方法非常重要。
下面的程序段,就是将一个非周期信号x1(t)=e-2t[u(t)-u(t-2)]经过周期延拓之后而得到一个周期信号:
clear,closeall;
t=-4:
0.001:
4;
T=2;
x=0;
fork=-2:
x=x+exp(-2*(t-k*T)).*(u(t-k*T)-u(t-(k+1)*T));
end
plot(t,x)
仔细阅读该程序,可以发现其算法就是:
2.6
由于k无法计算到无穷,而是以有限值加以替代,反映到有限宽度图形窗口中得到的效果完全符合要求。
2信号的时域运算
2.1相加
symsx
f1=sin(x)
f2=x^2
f=f1+f2
ezplot(f)
%f1、f2是符号表达式。
2.2相乘
f=f1*f2
2.3微分
f=sin(x^2)
h=diff(f)
ezplot(h)
2.4积分
f=sin(x)
h=int(f,x)%h=int(f,x,a,b)为定积分
3卷积的计算
卷积的计算通常可按下面的五个步骤进行(以卷积积分为例):
1)该换两个信号波形图中的横坐标,由t改为τ,τ变成函数的自变量;
2)把其中一个信号反褶,如把h(τ)变成h(-τ);
3)把反褶后的信号做移位,移位量是t,这样t是一个参变量。
在τ坐标系中,t>
0时图形右移,t<
0时图形左移。
4)计算两个信号重叠部分的乘积x(τ)h(t-τ);
5)完成相乘后图形的积分。
对于两个时限信号(Time-limitedsignal),按照上述的五个步骤,作卷积积分运算时,关键是正确确定不同情况下的积分限。
只要正确地确定了积分限都能得到正确定积分结果。
尽管如此,在时域中计算卷积积分,总体上来说是一项比较困难的工作。
借助MATLAB的内部函数conv()可以很容易地完成两个信号的卷积积分运算。
其语法为:
y=conv(x,h)。
其中x和h分别是两个作卷积运算的信号,y为卷积结果。
为了正确地运用这个函数计算卷积,这里有必要对conv(x,h)做一个详细说明。
conv(x,h)函数实际上是完成两个多项式的乘法运算。
例如,两个多项式p1和p2分别为:
和
这两个多项式在MATLAB中是用它们的系数构成一个行向量来表示的,如果用x来表示多项式p1,h表示多项式p2,则x和h分别为
x=[1234]
h=[4321]
在MATLAB命令窗口依次键入
x=[1234];
h=[4321];
y=conv(x,h)
在屏幕上得到显示结果:
y=411203020114
这表明,多项式p1和p2的乘积为:
正如前所述,用MATLAB处理连续时间信号时,独立时间变量t的变化步长应该是很小的,假定用符号dt表示时间变化步长,那么,用函数conv()作两个信号的卷积积分时,应该在这个函数之前乘以时间步长方能得到正确的结果。
也就是说,正确的语句形式应为:
y=dt*conv(x,h)。
对于定义在不同时间段的两个时限信号x(t),t0≤t≤t1,和h(t),t2≤t≤t3。
如果用y(t)来表示它们的卷积结果,则y(t)的持续时间范围要比x(t)或h(t)要长,其时间范围为t0+t2≤t≤t1+t3。
这个特点很重要,利用这个特点,在处理信号在时间上的位置时,可以很容易地将信号的函数值与时间轴的位置和长度关系保持一致性。
根据给定的两个连续时间信号x(t)=t[u(t)-u(t-1)]和h(t)=u(t)-u(t-1),编写程序,完成这两个信号的卷积运算,并绘制它们的波形图。
范例程序如下:
%Program2_2
%Thisprogramcomputestheconvolutionoftwocontinuou-timesignals
clear;
closeall;
t0=-2;
t1=4;
dt=0.01;
t=t0:
t1;
x=u(t)-u(t-1);
h=t.*(u(t)-u(t-1));
y=dt*conv(x,h);
%Computetheconvolutionofx(t)andh(t)
subplot(221)
plot(t,x),gridon,title('
Signalx(t)'
),axis([t0,t1,-0.2,1.2])
subplot(222)
plot(t,h),gridon,title('
Signalh(t)'
subplot(212)
t=2*t0:
2*t1;
%Againspecifythetimerangetobesuitabletothe
%convolutionofxandh.
plot(t,y),gridon,title('
Theconvolutionofx(t)andh(t)'
),axis([2*t0,2*t1,-0.1,0.6]),
Timetsec'
在有些时候,做卷积和运算的两个序列中,可能有一个序列或者两个序列都非常长,甚至是无限长,MATLAB处理这样的序列时,总是把它看作是一个有限长序列,具体长度由编程者确定。
实际上,在信号与系统分析中所遇到的无限长序列,通常都是满足绝对可和或绝对可积条件的信号。
因此,对信号采取这种截短处理尽管存在误差,但是通过选择合理的信号长度,这种误差是能够减小到可以接受的程度的。
若这样的一个无限长序列可以用一个数学表达式表示的话,那么,它的长度可以由编程者通过指定时间变量n的范围来确定。
例如,对于一个单边实指数序列x[n]=0.5nu[n],通过指定n的范围为0≤n≤100,则对应的x[n]的长度为101点,虽然指定更宽的n的范围,x[n]将与实际情况更相符合,但是,注意到,当n大于某一数时,x[n]之值已经非常接近于0了。
对于序列x[n]=0.5nu[n],当n=7时,x[7]=0.0078,这已经是非常小了。
所以,对于这个单边实指数序列,指定更长的n的范围是没有必要的。
当然,不同的无限长序列具有不同的特殊性,在指定n的范围时,只要能够反映
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12131 信号 系统 matlab 实验 指导书