实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx

上传人:b****6 文档编号:5186306 上传时间:2022-12-13 格式:DOCX 页数:25 大小:171.20KB
下载 相关 举报
实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx_第1页
第1页 / 共25页
实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx_第2页
第2页 / 共25页
实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx_第3页
第3页 / 共25页
实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx_第4页
第4页 / 共25页
实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx

《实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx》由会员分享,可在线阅读,更多相关《实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx(25页珍藏版)》请在冰豆网上搜索。

实验一 MATLAB方法实现信号波形和微分方程的建立与求解.docx

实验一MATLAB方法实现信号波形和微分方程的建立与求解

实验一MATLAB方法实现信号波形和微分方程的建立与求解

一、实验目的

1、熟悉和掌握常用的用于信号与系统时域仿真分析的MATLAB函数;

2、掌握连续时间和离散时间信号的MATLAB产生,掌握用周期延拓的方法将一个非周期信号进行周期信号延拓形成一个周期信号的MATLAB编程;

3、牢固掌握系统的单位冲激响应的概念,掌握LTI系统的卷积表达式及其物理意义,掌握卷积的计算方法、卷积的基本性质;

4、掌握利用MATLAB计算卷积的编程方法,并利用所编写的MATLAB程序验证卷积的常用基本性质;

掌握MATLAB描述LTI系统的常用方法及有关函数,并学会利用MATLAB求解LTI系统响应,绘制相应曲线。

基本要求:

掌握用MATLAB描述连续时间信号和离散时间信号的方法,能够编写MATLAB程序,实现各种信号的时域变换和运算,并且以图形的方式再现各种信号的波形。

掌握线性时不变连续系统的时域数学模型用MATLAB描述的方法,掌握卷积运算、线性常系数微分方程的求解编程。

二、实验原理

信号(Signal)一般都是随某一个或某几个独立变量的变化而变化的,例如,温度、压力、声音,还有股票市场的日收盘指数等,这些信号都是随时间的变化而变化的,还有一些信号,例如在研究地球结构时,地下某处的密度就是随着海拔高度的变化而变化的。

一幅图片中的每一个象素点的位置取决于两个坐标轴,即横轴和纵轴,因此,图像信号具有两个或两个以上的独立变量。

在《信号与系统》课程中,我们只关注这种只有一个独立变量(Independentvariable)的信号,并且把这个独立变量统称为时间变量(Timevariable),不管这个独立变量是否是时间变量。

在自然界中,大多数信号的时间变量都是连续变化的,因此这种信号被称为连续时间信号(Continuous-TimeSignals)或模拟信号(AnalogSignals),例如前面提到的温度、压力和声音信号就是连续时间信号的例子。

但是,还有一些信号的独立时间变量是离散变化的,这种信号称为离散时间信号。

前面提到的股票市场的日收盘指数,由于相邻两个交易日的日收盘指数相隔24小时,这意味着日收盘指数的时间变量是不连续的,因此日收盘指数是离散时间信号。

而系统则用于对信号进行运算或处理,或者从信号中提取有用的信息,或者滤出信号中某些无用的成分,如滤波,从而产生人们所希望的新的信号。

系统通常是由若干部件或单元组成的一个整体(Entity)。

系统可分为很多不同的类型,例如,根据系统所处理的信号的不同,系统可分为连续时间系统(Continuous-timesystem)和离散时间系统(Discrete-timesystem),根据系统所具有的不同性质,系统又可分为因果系统(Causalsystem)和非因果系统(Noncausalsystem)、稳定系统(Stablesystem)和不稳定系统(Unstablesystem)、线性系统(Linearsystem)和非线性系统(Nonlinearsystem)、时变系统(Time-variantsystem)和时不变系统(Time-invariantsystem)等等。

然而,在信号与系统和数字信号处理中,我们所分析的系统只是所谓的线性时不变系统,这种系统同时满足两个重要的基本性质,那就是线性性和时不变性,通常称为线性时不变(LTI)系统。

1.信号的时域表示方法

1.1将信号表示成独立时间变量的函数

例如x(t)=sin(ωt)和x[n]=n(0.5)nu[n]

分别表示一个连续时间信号和一个离散时间信号。

在MATLAB中有许多内部函数,可以直接完成信号的这种表达,例如:

sin():

正弦信号

cos():

余弦信号

exp():

指数信号

1.2用信号的波形图来描述信号

用函数曲线表示一个信号,图1.1就是一个连续时间信号和一个离散时间信号的波形图。

图1.1连续时间信号与离散时间信号的波形图

1.3将信号用一个数据序列来表示

对于离散时间信号,还可以表示成一个数的序列,例如:

x[n]={....,0.1,1.1,-1.2,0,1.3,….}

↑n=0

在《信号与系统》和《数字信号处理》课程中,上述三种信号的描述方法是经常要使用的。

2用MATLAB仿真连续时间信号和离散时间信号

在MATLAB中,无论是连续时间信号还是离散时间信号,MATLAB都是用一个数字序列来表示信号,这个数字序列在MATLAB中叫做向量(vector)。

通常的情况下,需要与时间变量相对应。

如前所述,MATLAB有很多内部数学函数可以用来产生这样的数字序列,例如sin()、cos()、exp()等函数可以直接产生一个按照正弦、余弦或指数规律变化的数字序列。

2.1连续时间信号的仿真

MATLAB提供了大量的生成基本信号的函数,例如指数信号、正余弦信号。

表示连续时间信号有两种方法,一是数值法,二是符号法。

数值法是定义某一时间范围和取样时间间隔,然后调用该函数计算这些点的函数值,得到两组数值矢量,可用绘图语句画出其波形;符号法是利用MATLAB的符号运算功能,需定义符号变量和符号函数,运算结果是符号表达的解析式,也可用绘图语句画出其波形图。

程序Program1_1是用MATLAB对一个正弦信号进行仿真的程序,请仔细阅读该程序,并在计算机上运行,观察所得图形。

%Program1_1

%Thisprogramisusedtogenerateasinusoidalsignalanddrawitsplot

clear,%Clearallvariables

closeall,%Closeallfigurewindows

dt=0.01;%Specifythestepoftimevariable

t=-2:

dt:

0.2;%Specifytheintervaloftime

x=sin(2*pi*t);%Generatethesignal

plot(t,x)%Openafigurewindowanddrawtheplotofx(t)

title('Sinusoidalsignalx(t)')

xlabel('Timet(sec)')

例1-1指数信号指数信号在MATLAB中用exp函数表示。

,调用格式为ft=A*exp(a*t)程序是

A=1;a=-0.4;

t=0:

0.01:

10;%定义时间点

ft=A*exp(a*t);%计算这些点的函数值

plot(t,ft);%画图命令,用直线段连接函数值表示曲线

gridon;%在图上画方格

例1-2正弦信号正弦信号在MATLAB中用sin函数表示。

调用格式为ft=A*sin(w*t+phi)

A=1;w=2*pi;phi=pi/6;

t=0:

0.01:

8;%定义时间点

ft=A*sin(w*t+phi);%计算这些点的函数值

plot(t,ft);%画图命令

gridon;%在图上画方格

例1-3抽样信号抽样信号Sa(t)=sin(t)/t在MATLAB中用sinc函数表示。

定义为

t=-3*pi:

pi/100:

3*pi;

ft=sinc(t/pi);

plot(t,ft);

gridon;

axis([-10,10,-0.5,1.2]);%定义画图范围,横轴,纵轴

title('抽样信号')%定义图的标题名字

例1-4三角信号三角信号在MATLAB中用tripuls函数表示。

调用格式为ft=tripuls(t,width,skew),产生幅度为1,宽度为width,且以0为中心左右各展开width/2大小,斜度为skew的三角波。

width的默认值是1,skew的取值范围是-1~+1之间。

一般最大幅度1出现在t=(width/2)*skew的横坐标位置。

t=-3:

0.01:

3;

ft=tripuls(t,4,0.5);

plot(t,ft);gridon;

axis([-3,3,-0.5,1.5]);

例1-5虚指数信号调用格式是f=exp((j*w)*t)

t=0:

0.01:

15;

w=pi/4;

X=exp(j*w*t);

Xr=real(X);%取实部

Xi=imag(X);%取虚部

Xa=abs(X);%取模

Xn=angle(X);%取相位

subplot(2,2,1),plot(t,Xr),axis([0,15,-(max(Xa)+0.5),max(Xa)+0.5]),

title('实部');

subplot(2,2,3),plot(t,Xi),axis([0,15,-(max(Xa)+0.5),max(Xa)+0.5]),

title('虚部');

subplot(2,2,2),plot(t,Xa),axis([0,15,0,max(Xa)+1]),title('模');

subplot(2,2,4),plot(t,Xn),axis([0,15,-(max(Xn)+1),max(Xn)+1]),title('相角');

%subplot(m,n,i)命令是建立m行n列画图窗口,并指定画图位置i

例1-6复指数信号调用格式是f=exp((a+j*b)*t)

t=0:

0.01:

3;

a=-1;b=10;

f=exp((a+j*b)*t);

subplot(2,2,1),plot(t,real(f)),title('实部')

subplot(2,2,3),plot(t,imag(f)),title('虚部')

subplot(2,2,2),plot(t,abs(f)),title('模')

subplot(2,2,4),plot(t,angle(f)),title('相角')

例1-7矩形脉冲信号矩形脉冲信号可用rectpuls函数产生,

调用格式为y=rectpuls(t,width),幅度是1,宽度是width,以t=0为对称中心。

t=-2:

0.01:

2;

width=1;

ft=2*rectpuls(t,width);

plot(t,ft)

gridon;

例1-8单位阶跃信号单位阶跃信号u(t)用“t>=0”产生,调用格式为ft=(t>=0)

t=-1:

0.01:

5;

ft=(t>=0);

plot(t,ft);gridon;

axis([-1,5,-0.5,1.5]);

例1-9正弦信号符号算法

symst%定义符号变量t

y=sin(pi/4*t)%符号函数表达式

ezplot(y,[-16,16])%符号函数画图命令

或者

f=sym('sin(pi/4*t)')%定义符号函数表达式

ezplot(f,[-16,16])

例1-10单位阶跃信号MATTLAB符号数学函数Heaviside表示阶跃信号,但要画图需在工作目录创建Heaviside的M文件

functionf=Heaviside(t)

f=(t>0);

保存,文件名是Heaviside,调用该函数即可画图,例

t=-1:

0.01:

3;

f=heaviside(t);

plot(t,f)

axis([-1,3,-0.2,1.2])

或者

y=sym('Heaviside(t)');

ezplot(y,[-1,5]);gridon

常用的图形控制函数

axis([xmin,xmax,ymin,ymax]):

图型显示区域控制函数,其中xmin为横轴的显示起点,xmax为横轴的显示终点,ymin为纵轴的显示起点,ymax为纵轴的显示终点。

有时,为了使图形具有可读性,需要在所绘制的图形中,加上一些网格线来反映信号的幅度大小。

MATLAB中的gridon/gridoff可以实现在你的图形中加网格线。

gridon:

在图形中加网格线。

gridoff:

取消图形中的网格线。

x=input(‘Typeinsignalx(t)inclosedform:

’)

在《信号与系统》课程中,单位阶跃信号u(t)和单位冲激信号δ(t)是二个非常有用的信号。

它们的定义如下

1.1(a)

1.1(b)

这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。

产生单位冲激信号的扩展函数为:

functiony=delta(t)

dt=0.01;

y=(Heaviside(t)-Heaviside(t-dt))/dt;

请将这个MATLAB函数以delta为文件名保存在work文件夹中,以后,就可以像教材中的方法使用单位冲激信号δ(t)。

2.2离散时间信号的仿真

程序Program1_2用来产生离散时间信号x[n]=sin(0.2πn)。

%Program1_2

%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignalanddrawitsplot

clear,%Clearallvariables

closeall,%Closeallfigurewindows

n=-10:

10;%Specifytheintervaloftime

x=sin(0.2*pi*n);%Generatethesignal

stem(n,x)%Openafigurewindowanddrawtheplotofx[n]

title('Sinusoidalsignalx[n]')

xlabel('Timeindexn')

请仔细阅读该程序,比较程序Program1_1和Program1_2中的不同之处,以便自己编程时能够正确使用这种方法方针连续时间信号和离散时间信号。

程序Program1_3用来仿真下面形式的离散时间信号:

x[n]={....,0.1,1.1,-1.2,0,1.3,….}

↑n=0

%Program1_3

%Thisprogramisusedtogenerateadiscrete-timesequence

%anddrawitsplot

clear,%Clearallvariables

closeall,%Closeallfigurewindows

n=-5:

5;%Specifytheintervaloftime,thenumberofpointsofnis11.

x=[0,0,0,0,0.1,1.1,-1.2,0,1.3,0,0];%Generatethesignal

stem(n,x,'.')%Openafigurewindowanddrawtheplotofx[n]

gridon,

title('Adiscrete-timesequencex[n]')

xlabel('Timeindexn')

由于在程序的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中的序列,

↑n=0

可以用这个MATLAB语句x=[zeros(1,4)xzeros(1,2)]来实现。

用这种方法编写的程序如下:

%Program1_4

%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignal

%anddrawitsplot

clear,%Clearallvariables

closeall,%Closeallfigurewindows

n=-5:

5;%Specifytheintervaloftime

x=[zeros(1,4),0.1,1.1,-1.2,0,1.3,zeros(1,2)];%Generatethesequence

stem(n,x,'.')%Openafigurewindowanddrawtheplotofx[n]

gridon,

title('Adiscrete-timesequencex[n]')

xlabel('Timeindexn')

离散时间单位阶跃信号u[n]定义为

1.2

离散时间单位阶跃信号u[n]除了也可以直接用前面给出的扩展函数来产生,还可以利用MATLAB内部函数ones(1,N)来实现。

这个函数类似于zeros(1,N),所不同的是它产生的矩阵的所有元素都为1。

值得注意的是,利用ones(1,N)来实现的单位阶跃序列并不是真正的单位阶跃序列,而是一个长度为N单位门(Gate)序列,也就是u[n]-u[n-N]。

但是在一个有限的图形窗口中,我们看到的还是一个单位阶跃序列。

在绘制信号的波形图时,有时我们需要将若干个图形绘制在图一个图形窗口中,这就需要使用MATLAB的图形分割函数subplot(),其用法是在绘图函数stem或plot之前,使用图形分割函数subplot(n1,n2,n3),其中的参数n1,n2和n3的含义是,该函数将把一个图形窗口分割成n1xn2个子图,即将绘制的图形将绘制在第n3个子图中。

2.3信号的时域变换

2.3.1信号的时移

信号的时移可用下面的数学表达式来描述:

设一个连续时间信号为x(t),它的时移y(t)表示为:

y(t)=x(t-t0)1.3

其中,t0为位移量。

若t0为正数,则y(t)等于将x(t)右移t0秒之后的结果。

反之,若t0为负数,则y(t)等于将x(t)左移t0秒之后的结果。

在MATLAB中,时移运算与数学上习惯表达方法完全相同。

程序Program1_5对给定一个连续时间信号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)。

%Program1_5

%Thisprogramisusedtoimplementthetime-shiftoperation

%onacontinuous-timesignalandtoobtainitstime-shiftedversions

%andtodrawtheirplots.

clear,closeall,

t=-5:

0.01:

5;

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)

gridon,

title('Originalsignalx(t)')

subplot(312)

plot(t,x1)%Plotx1(t)

gridon,

title('Leftshiftedversionofx(t)')

subplot(313)

plot(t,x2)%Plotx2(t)

gridon,

title('Rightshiftedversionofx(t)')

xlabel('Timet(sec)')

2.3.2信号的时域反褶

对一个信号x[n]的反褶运算在数学上表示为

y[n]=x[-n]1.4

这种反褶运算,用MATLAB实现起来也是非常简单的。

有多种方法可以实现信号的反褶运算。

方法一,修改绘图函数plot(t,x)和stem(n,x)中的时间变量t和n,即用-t和-n替代原来的t和n,这样绘制出来的图形,看起来就是原信号经时域反褶后的版本。

方法二,直接利用原信号与其反褶信号的数学关系式来实现。

这种方法最符合信号反褶运算的实际意义。

方法三,使用MATLAB内部函数fliplr()来实现信号的反褶运算。

其用法如下:

y=fliplr(x):

其中x为原信号x(t)或x[n],而y则为x的时域反褶。

需要说明的是,函数fliplr()对信号作时域反褶,仅仅将信号中各个元素的次序作了一个反转,这种反转处理是独立于时间变量t和n的。

因此,如果信号与其时间变量能够用一个数学函数来表达的话,那么建议将时间变量t和n的范围指定在一个正负对称的时间区间即可。

2.3.3信号的时域尺度变换

信号x(t)的时域尺度变换在数学描述为

y(t)=x(at),1.5

其中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

当-1

当a<-1时,y(t)=x(at),y(t)是将x(t)在时间轴上的压缩同时翻转而得到;

由此可见,信号的时域尺度变换,除了对信号进行时域压缩或扩展外,还可能包括对信号的时域反褶运算。

实际上,MATLAB完成式1.5的运算,并不需要特殊的处理,按照数学上的常规方法即能完成。

3LTI系统的时域描述

3.1线性时不变系统

在分析LTI系统时,有关LTI系统的两个重要的性质是必须首先掌握和理解的。

这就是线性性(Linearity)和时不变性(Time-invariance)。

所谓线性性就是指系统同时满足齐次性和叠加性。

这可以用下面的方法来描述。

假设系统在输入信号x1(t)作用时的响应信号为y1(t),在输入信号x2(t)作用时的响应信号为y2(t),给定两个常数a和b,如果当输入信号为x(t)时系统的响应信号为y(t),且满足

x(t)=x1(t)+x2(t)1.9(a)

y(t)=y1(t)+y2(t)1.9(b)

则该系统具有叠加性(Additiv

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1