实验一++信号的产生及时间变量的变换.doc_第1页
实验一++信号的产生及时间变量的变换.doc_第2页
实验一++信号的产生及时间变量的变换.doc_第3页
实验一++信号的产生及时间变量的变换.doc_第4页
实验一++信号的产生及时间变量的变换.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 信号的产生及时间变量的变换一、实验目的1. 熟悉和掌握常用的用于信号与系统时域仿真分析的MATLAB函数;2. 掌握连续时间和离散时间信号的MATLAB产生,掌握用周期延拓的方法将一个非周期信号进行周期信号延拓形成一个周期信号的MATLAB编程;基本要求:掌握用MATLAB描述连续时间信号和离散时间信号的方法,能够编写MATLAB程序,实现各种信号的时域变换和运算,并且以图形的方式再现各种信号的波形。二、实验原理1. 信号的时域表示方法1.1将信号表示成独立时间变量的函数例如 x(t)=sin(t) 和 xn=n(0.5)nun分别表示一个连续时间信号和一个离散时间信号。在MATLAB中有许多内部函数,可以直接完成信号的这种表达,例如:sin():正弦信号cos():余弦信号exp():指数信号1.2用信号的波形图来描述信号用函数曲线表示一个信号,图1.1就是一个连续时间信号和一个离散时间信号的波形图。图1.1 连续时间信号与离散时间信号的波形图1.3将信号用一个数据序列来表示对于离散时间信号,还可以表示成一个数的序列,例如: xn=., 0.1, 1.1, -1.2, 0, 1.3, . n=02 用MATLAB仿真连续时间信号和离散时间信号 在MATLAB中,无论是连续时间信号还是离散时间信号,MATLAB都是用一个数字序列来表示信号,这个数字序列在MATLAB中叫做向量(vector)。通常的情况下,需要与时间变量相对应。 如前所述,MATLAB有很多内部数学函数可以用来产生这样的数字序列,例如sin()、cos()、exp()等函数可以直接产生一个按照正弦、余弦或指数规律变化的数字序列。2.1连续时间信号的仿真程序Program1_1是用MATLAB对一个正弦信号进行仿真的程序,请仔细阅读该程序,并在计算机上运行,观察所得图形。% Program1_1% This program is used to generate a sinusoidal signal and draw its plotclear, % Clear all variablesclose all, % Close all figure windowsdt = 0.01; % Specify the step of time variablet = -2:dt:2; % Specify the interval of timex = sin(2*pi*t); % Generate the signalplot(t,x) % Open a figure window and draw the plot of x(t)title(Sinusoidal signal x(t)xlabel(Time t (sec)常用的图形控制函数axis(xmin,xmax,ymin,ymax):图型显示区域控制函数,其中xmin为横轴的显示起点,xmax为横轴的显示终点,ymin为纵轴的显示起点,ymax为纵轴的显示终点。有时,为了使图形具有可读性,需要在所绘制的图形中,加上一些网格线来反映信号的幅度大小。MATLAB中的grid on/grid off可以实现在你的图形中加网格线。grid on:在图形中加网格线。grid off:取消图形中的网格线。x = input(Type in signal x(t) in closed form:)单位阶跃信号u(t) 和单位冲激信号(t) 是二个非常有用的信号。它们的定义如下 1.1(a) 1.1(b)这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。产生单位冲激信号的扩展函数为:function y = delta(t)dt = 0.01;y = (u(t)-u(t-dt)/dt;产生单位阶跃信号的扩展函数为:% Unit step functionfunction y = u(t)y = (t=0); % y = 1 for t 0, else y = 0 请将这二个MATLAB函数分别以delta 和u为文件名保存在work文件夹中,以后,就可以像教材中的方法使用单位冲激信号(t) 和单位阶跃信号u(t)。2.2离散时间信号的仿真程序Program1_2用来产生离散时间信号xn=sin(0.2n)。% Program1_2+% This program is used to generate a discrete-time sinusoidal signal and draw its plotclear, % Clear all variablesclose all, % Close all figure windowsn = -10:10; % Specify the interval of timex = sin(0.2*pi*n); % Generate the signalstem (n,x) % Open a figure window and draw the plot of xntitle (Sinusoidal signal xn)xlabel (Time index n) 请仔细阅读该程序,比较程序Program1_1和Program1_2中的不同之处,以便自己编程时能够正确使用这种方法仿真连续时间信号和离散时间信号。 程序Program1_3用来仿真下面形式的离散时间信号: xn=., 0.1, 1.1, -1.2, 0, 1.3, . n=0% Program1_3% This program is used to generate a discrete-time sequence% and draw its plotclear, % Clear all variablesclose all, % Close all figure windowsn = -5:5; % Specify the interval of time, the number of points of n is 11.x = 0, 0, 0, 0, 0.1, 1.1, -1.2, 0, 1.3, 0, 0; % Generate the signalstem(n,x,.) % Open a figure window and draw the plot of xngrid on,title (A discrete-time sequence xn)xlabel (Time index n) 由于在程序的stem(n,x,.) 语句中加有.选项,因此绘制的图形中每根棒条线的顶端是一个实心点。 如果需要在序列的前后补较多的零的话,可以利用函数zeros(),其语法为: zeros(1, N):圆括号中的1和N表示该函数将产生一个一行N列的矩阵,矩阵中的所有元素均为零。利用这个矩阵与序列xn进行组合,从而得到一个长度与n相等的向量。 例如,当 xn= 0.1, 1.1, -1.2, 0, 1.3 时,为了得到程序Program1_3中的序列, n=0可以用这个MATLAB语句x = zeros(1,4) x zeros(1, 2) 来实现。用这种方法编写的程序如下:% Program1_4% This program is used to generate a discrete-time sinusoidal signal% and draw its plotclear, % Clear all variablesclose all, % Close all figure windows+n = -5:5; % Specify the interval of timex = zeros(1,4), 0.1, 1.1, -1.2, 0, 1.3, zeros(1,2); % Generate the sequencestem (n,x,.) % Open a figure window and draw the plot of xngrid on,title (A discrete-time sequence xn)xlabel (Time index n) 离散时间单位阶跃信号un定义为 1.2离散时间单位阶跃信号un除了也可以直接用前面给出的扩展函数来产生,还可以利用MATLAB内部函数ones(1,N) 来实现。这个函数类似于zeros(1,N),所不同的是它产生的矩阵的所有元素都为1。 值得注意的是,利用ones(1,N) 来实现的单位阶跃序列并不是真正的单位阶跃序列,而是一个长度为N单位门(Gate)序列,也就是un-un-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% This program is used to implement the time-shift operation% on a continuous-time signal and to obtain its time-shifted versions% and to draw their plots.clear,close all,t = -5:0.01:5;x = exp(-0.5*t).*u(t); % Generate the original signal x(t)x1 = exp(-0.5*(t+2).*u(t+2); % Shift x(t) to the left by 2 second to get x1(t)x2 = exp(-0.5*(t-2).*u(t-2); % Shift x(t) to the right by 2 second to get x2(t)subplot(311)plot(t,x) % Plot x(t)grid on,title (Original signal x(t)subplot (312)plot (t,x1) % Plot x1(t)grid on,title (Left shifted version of x(t)subplot (313)plot (t,x2) % Plot x2(t)grid on,title (Right shifted version of x(t)xlabel (Time t (sec)2.3.2 信号的时域反褶 对一个信号xn的反褶运算在数学上表示为 yn = 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)或xn,而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 a 0时,y(t) = x(at),y(t)是将x(t)在时间轴上的扩展同时翻转而得到; 当 a -1时,y(t) = x(at),y(t)是将x(t)在时间轴上的压缩同时翻转而得到; 由此可见,信号的时域尺度变换,除了对信号进行时域压缩或扩展外,还可能包括对信号的时域反褶运算。实际上,MATLAB完成式1.5的运算,并不需要特殊的处理,按照数学上的常规方法即能完成。2.3.4周期信号 周期信号是一类非常重要的信号。给定一个信号x(t)或xn,如果满足 x(t) = x(t+kT) 1.6 xn = xn+kN 1.7则该信号叫做周期信号。其中,k为任意整数,T和N为常数,通常称为信号的基本周期或最小周期。 周期信号可以看作是一个时限的非周期信号经过周期延拓之后形成的。在数字信号处理中,周期延拓这一信号处理方法非常重要。下面的程序段,就是将一个非周期信号x1(t) = e-2tu(t)-u(t-2)经过周期延拓之后而得到一个周期信号:clear, close all;t = -4:0.001:4;T = 2; x = 0;for k = -2:2; x = x+exp(-2*(t-k*T).*(u(t-k*T)-u(t-(k+1)*T);end仔细阅读该程序,可以发现其算法就是: 1.8 由于k无法计算到无穷,而是以有限值加以替代,反映到有限宽度图形窗口中得到的效果完全符合要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论