实验一 MATLAB方法实现信号波形和微分方程的建立与求解Word格式文档下载.docx
《实验一 MATLAB方法实现信号波形和微分方程的建立与求解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验一 MATLAB方法实现信号波形和微分方程的建立与求解Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
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;
8;
ft=A*sin(w*t+phi);
%画图命令
例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:
3;
ft=tripuls(t,4,0.5);
axis([-3,3,-0.5,1.5]);
例1-5虚指数信号调用格式是f=exp((j*w)*t)
t=0:
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]),
实部'
);
subplot(2,2,3),plot(t,Xi),axis([0,15,-(max(Xa)+0.5),max(Xa)+0.5]),
虚部'
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)
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:
2;
width=1;
ft=2*rectpuls(t,width);
plot(t,ft)
例1-8单位阶跃信号单位阶跃信号u(t)用“t>
=0”产生,调用格式为ft=(t>
=0)
t=-1:
5;
ft=(t>
=0);
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:
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)
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
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
n=-5:
%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。
值得注意的是,利用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:
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)'
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<
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完成式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