实验一MATLAB方法实现信号波形和微分方程的建立与求解
实验一 MATLAB方法实现信号波形和微分方程的建立与求解 一、实验目的 1、熟悉和掌握常用的用于信号与系统时域仿真分析的MATLAB函数; 2、掌握连续时间和离散时间信号的MATLAB产生,掌握用周期延拓的方法将一个非周期信号进行周期信号延拓形成一个周期信号的MATLAB编程; 3、牢固掌握系统的单位冲激响应的概念,掌握LTI系统的卷积表达式及其物理意义,掌握卷积的计算方法、卷积的基本性质; 4、掌握利用MATLAB计算卷积的编程方法,并利用所编写的MATLAB程序验证卷积的常用基本性质; 掌握MATLAB描述LTI系统的常用方法及有关函数,并学会利用MATLAB求解LTI系统响应,绘制相应曲线。 基本要求:掌握用MATLAB描述连续时间信号和离散时间信号的方法,能够编写MATLAB程序,实现各种信号的时域变换和运算,并且以图形的方式再现各种信号的波形。掌握线性时不变连续系统的时域数学模型用MATLAB描述的方法,掌握卷积运算、线性常系数微分方程的求解编程。 二、实验原理 信号(Signal)一般都是随某一个或某几个独立变量的变化而变化的,例如,温度、压力、声音,还有股票市场的日收盘指数等,这些信号都是随时间的变化而变化的,还有一些信号,例如在研究地球结构时,地下某处的密度就是随着海拔高度的变化而变化的。一幅图片中的每一个象素点的位置取决于两个坐标轴,即横轴和纵轴,因此,图像信号具有两个或两个以上的独立变量。 在《信号与系统》课程中,我们只关注这种只有一个独立变量(Independent variable)的信号,并且把这个独立变量统称为时间变量(Time variable),不管这个独立变量是否是时间变量。 在自然界中,大多数信号的时间变量都是连续变化的,因此这种信号被称为连续时间信号(Continuous-Time Signals)或模拟信号(Analog Signals),例如前面提到的温度、压力和声音信号就是连续时间信号的例子。但是,还有一些信号的独立时间变量是离散变化的,这种信号称为离散时间信号。前面提到的股票市场的日收盘指数,由于相邻两个交易日的日收盘指数相隔24小时,这意味着日收盘指数的时间变量是不连续的,因此日收盘指数是离散时间信号。 而系统则用于对信号进行运算或处理,或者从信号中提取有用的信息,或者滤出信号中某些无用的成分,如滤波,从而产生人们所希望的新的信号。系统通常是由若干部件或单元组成的一个整体(Entity)。系统可分为很多不同的类型,例如,根据系统所处理的信号的不同,系统可分为连续时间系统(Continuous-time system)和离散时间系统(Discrete-time system),根据系统所具有的不同性质,系统又可分为因果系统(Causal system)和非因果系统(Noncausal system)、稳定系统(Stable system)和不稳定系统(Unstable system)、线性系统(Linear system)和非线性系统(Nonlinear system)、时变系统(Time-variant system)和时不变系统(Time-invariant system)等等。 然而,在信号与系统和数字信号处理中,我们所分析的系统只是所谓的线性时不变系统,这种系统同时满足两个重要的基本性质,那就是线性性和时不变性,通常称为线性时不变(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 % This program is used to generate a sinusoidal signal and draw its plot clear, % Clear all variables close all, % Close all figure windows dt = 0.01; % Specify the step of time variable t = -2:dt:0.2; % Specify the interval of time x = sin(2*pi*t); % Generate the signal plot(t,x) % Open a figure window and draw the plot of x(t) title( Sinusoidal signal x(t) ) xlabel( Time t (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); %画图命令,用直线段连接函数值表示曲线 grid on; %在图上画方格 例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); %画图命令 grid on; %在图上画方格 例1-3 抽样信号 抽样信号Sa(t)=sin(t)/t在MATLAB中用 sinc 函数表示。 定义为 t=-3*pi:pi/100:3*pi; ft=sinc(t/pi); plot(t,ft); grid on; 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); grid on; 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) grid on; 例1-8 单位阶跃信号 单位阶跃信号u(t)用“t>=0”产生,调用格式为ft=(t>=0) t=-1:0.01:5; ft=(t>=0); plot(t,ft); grid on; axis([-1,5,-0.5,1.5]); 例1-9 正弦信号符号算法 syms t %定义符号变量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文件 function f=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]);grid on 常用的图形控制函数 axis([xmin,xmax,ymin,ymax]):图型显示区域控制函数,其中xmin为横轴的显示起点,xmax为横轴的显示终点,ymin为纵轴的显示起点,ymax为纵轴的显示终点。 有时,为了使图形具有可读性,需要在所绘制的图形中,加上一些网格线来反映信号的幅度大小。MATLAB中的grid on/grid off可以实现在你的图形中加网格线。 grid on:在图形中加网格线。 grid off:取消图形中的网格线。 x = (‘Type in signal x(t) in closed :’) 在《信号与系统》课程中,单位阶跃信号u(t) 和单位冲激信号δ(t) 是二个非常有用的信号。它们的定义如下 1.1(a) 1.1(b) 这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。产生单位冲激信号的扩展函数为: function y = 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 % This program is used to generate a discrete-time sinusoidal signal and draw its plot clear, % Clear all variables close all, % Close all figure windows n = -10:10; % Specify the interval of time x = sin(0.2*pi*n); % Generate the signal stem (n,x) % Open a figure window and draw the plot of x[n] title ( Sinusoidal signal x[n] ) xlabel ( Time index n ) 请仔细阅读该程序,比较程序Program1_1和Program1_2中的不同之处,以便自己编程时能够正确使用这种方法方针连续时间信号和离散时间信号。 程序Program1_3用来仿真下面形式的离散时间信号: x[n]={, 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 plot clear, % Clear all variables close all, % Close all figure windows n = -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 signal stem(n,x, . ) % Open a figure window and draw the plot of x[n] grid on, title ( A discrete-time sequence x[n] ) xlabel ( Time index 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中的序列, ↑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 plot clear, % Clear all variables close all, % Close all figure windows n = -5:5; % Specify the interval of time x = [zeros(1,4), 0.1, 1.1, -1.2, 0, 1.3, zeros(1,2)]; % Generate the sequence stem (n,x, . ) % Open a figure window and draw the plot of x[n] grid on, title ( A discrete-time sequence x[n] ) xlabel ( Time index n ) 离散时间单位阶跃信号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 % 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 信号的时域反褶 对一个信号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 x = [1 2 3 4]; >> h = [4 3 2 1]; >> y=conv(x,h) 在屏幕上得到显示结果: y = 4 11 20 30 20 11 4 这表明,多项式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),编写程序,完成这两个信号的卷积运算,并绘制它们的波形图。范例程序如下: % Program1_6 % This program computes the convolution of two continuou-time signals clear;close all; t0 = -2; t1 = 4; dt = 0.01; t = t0:dt:t1; x = u(t)-u(t-1); h = t.*(u(t)-u(t-1)); y = dt*conv(x,h); % Compute the convolution of x(t) and h(t) subplot(221) plot(t,x), grid on, title( Signal x(t) ), axis([t0,t1,-0.2,1.2]) subplot(222) plot(t,h), grid on, title( Signal h(t) ), axis([t0,t1,-0.2,1.2]) subplot(212) t = 2*t0:dt:2*t1; % Again specify the time range to be suitable to the % convolution of x and h. plot(t,y), grid on, title( The convolution of x(t) and h(t) ), axis([2*t0,2*t1,-0.1,0.6]), xlabel( Time t sec ) 在有些时候,做卷积和运算的两个序列中,可能有一个序列或者两个序列都非常长,甚至是无限长,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的范围时,只要能够反映序列的主要特征就可以了。 3.4 用线性常系数微分方程描述LTI系统 线性常系数微分方程或差分方程是描述LTI系统的另一个时域模型。一个连续时间LTI系统,它的输入信号x(t)输出信号y(t)关系可以用下面的微分方程来表达 1.12 式1.12中,max (N, M)定义为系统的阶。式1.12描述了LTI系统输入信号和输出信号的一种隐性关系(Implicit relationship)。为了求得系统响应信号的显式表达式(Explicit expression),必须对微分方程和差分方程求解。 在MATLAB中,一个LTI系统也可以用系统微分方程的系数来描述,例如,一个LTI连续时间系统的微分方程为 MATLAB则用两个系数向量num = [1]和den = [1 3 2]来描述该系统,其中num和den分别表示系统微分方程右边和左边的系数,按照微分运算的降阶排列。 MATLAB的内部函数impulse(),step(),initial(),lsim() 可以用来计算并绘制连续时间LTI系统的单位冲激响应,单位阶跃响应,零输入响应和任意信号作用于系统的零状态响应。这些函数的用法描述如下: h= impulse(num, den, T) 和 impulse(num, den, T) s = step(num, den, T) 和 step(num, den, T) y = lsim(num, den, x, t) 和 lsim(num, den, x, t) 函数impulse(),step()用来计算由num和den表示的LTI系统的单位冲激响应和单位阶跃响应,响应的时间范围为0~T,其中den和num分别为系统微分方程左右两边的系数向量,T为指定的响应的终点时间。h和s的点数默认值为101点。由此可以计算时间步长为dt = T/(101-1)。不带返回值的函数如impulse(num, den, T)和step(num, den, T)将直接在屏幕上绘制系统的单位冲激响和单位阶跃响应曲线。带返回值的函数如y = lsim(num, den, x, t)和y = lsim(num, den, x, t),用来计算由num和den表示的LTI系统在输入信号x作用下的零状态响应。其中t为指定的时间变化范围,x为输入信号,它们的长度应该是相同的。如带返回参数y,则将计算的响应信号保存在y中,若不带返回参数y,则直接在屏幕上绘制输入信号x和响应信号y的波形图。 例如,编写程序,计算并绘制由下面的微分方程表示的系统的单位冲激响应h(t),单位阶跃响应s(t)。 MATLAB范例程序如下: % Program1_7 % This program is used to compute the impulse response h(t) and the step response s(t) of a % continuous-time LTI system clear, close all; num = [8]; den = [1 3 2]; t = 0:0.01:8; subplot(221), impulse(num,den,8); subplot(222), step(num,den,8) 对于一般的系统求解零输入或者零状态响应,我们也可以使用dsolve函数进行求解。 如: 设方程,试求零状态响应y(t)。 解法一:用lsim函数 t=0:0.01:8; x=2*exp(-t); y=lsim(1,[1 5 6],x,t); plot(t,y) ; 解法二:用dsolve函数 t=0:0.01:8; yzs=dsolve( D2y+5*Dy+6*y=2*exp(-t) , y(0)=0,Dy(0)=0 ); ezplot(yzs,[0 8]) 可以看出两幅图形是完全一样的。它们的区别在于使用dsolve函数得到的yzs是一个字符串,表示的是响应函数表达式。在这个例子中,yzs= -2*exp(-2*t)+exp(-3*t)+exp(-t),它表示该方程的零状态响应为。 三、实验内容及步骤 实验前,必须首先阅读本实验原理,读懂所给出的全部范例程序。实验开始时,先在计算机上运行这些范例程序,观察所得到的信号的波形图。并结合范例程序应该完成的工作,进一步分析程序中各个语句的作用,从而真正理解这些程序。 实验前,一定要针对下面的实验项目做好相应的实验准备工作,包括事先编写好相应的实验程序等事项。 Q1-1:修改程序Program1_1,将dt改为0.2,再执行该程序,保存图形,看看所得图形的效果如何? dt = 0.01时的信号波形 dt = 0.2时的信号波形 这两幅图形有什么区别,哪一幅图形看起来与实际信号波形更像? 答: Q1-2:以Q1_2为文件名存盘,产生实门信号和信号。 要求在图形中加上网格线,并使用函数axis()控制图形的时间范围在-2~2秒之间。然后执行该程序,保存所的图形。 Q1-3:将实验原理中所给的单位冲激信号和单位阶跃信号的函数文件在MATLAB文件编辑器中编写好,并分别以以文件名delta和Heaviside存入work文件夹中以便于使用。 抄写函数文件delta如下: 抄写函数文件u如下: Q1-4:仿照前面的示例程序的编写方法,编写一个MATLAB程序,以Q1_4为文件名存盘,使之能够在同一个图形窗口中的两个子图中分别绘制信号x[n]=0.5|n| 和x(t)=cos(2πt)[u(t)-u(t-3)]。要求选择的时间窗能够表现出信号的主要部分(或特征)。 编写的程序Q1_4如下: 信号x[n]=0.5|n| 的波形图和信号x(t)=cos(2πt)[u(t)-u(t-3)]的波形图 Q1-5:根据示例程序的编程方法,编写一个MATLAB程序,以Q1_5为文件名存盘,由给定信号 x(t) = e-0.5tu(t) 求信号y(t) = x(1.5t+3),并绘制出x(t) 和y(t)的图形。 编写的程序Q1_5如下: 信号x(t)的波形图 和 信号y(t) = x(1.5t+3) 的波形图 此处粘贴图形 此处粘贴图形 Q1-6:给定两个离散时间序列 x[n] = 0.5n{u[n]-u[n-8]} h[n] = u[n]-u[n-8] 编写程序Q1_6,计算它们的卷积,并分别绘制x[n]、h[n]和它们的卷积y[n]的图形。 编写的程序Q1_6如下: 信号x[n]、h[n]和y[n]的波形图 此处粘贴图形 Q1-7编写程序Q1_7,分别用lsim和dsolve函数计算并绘制由如下微分方程表示的系统在输入信号为x(t) = (e-2t - e-3t)u(t)时的零状态响应和你手工计算得到的系统零状态响应曲线。 手工计算得到的系统零状态响应的数学表达式是: 编写的程序Q1_7如下: 用MATLAB绘制的手工计算的系统响应 粘帖用MATLAB绘制的手工计算的系统响应 执行程序Q1_7得到的系统响应 此处粘帖执行程序Q1_7得到的系统响应 (2条曲线分为上下排列的2个子图来绘制) Q1-8编写程序Q1_8,用Matlab的方法计算并绘制由如下微分方程表示系统的冲激响应和阶跃响应,并分为上下两个子图绘制在一个图中。 Q1-9:做如下总结: 1、信号与系统分析,就是基于信号的分解,在时域中,信号主要分解成: 2、写出卷积的运算步骤,并谈谈你对卷积的一些基本性质的理解。利用MATLAB计算卷积的函数是什么?如何使用? 3、在时域中,描述一个连续时间LTI系统的数学模型有: 4、MATLAB是如何表示一个由微分方程描述的连续时间LTI系统的?求解连续时间LTI系统的单位冲激响应、单位阶跃响应以及系统在某一个输入信号作用下的零状态响应的MATLAB函数有哪些? 四、实验报告要求 1、按要求完整书写你所编写的全部MATLAB程序 2、详细记录实验过程中的有关信号波形图,图形要有明确的标题。全部的MATLAB图形应该复制在本实验报告中的相应位置。 3、实事求是地回答相关问题,严禁抄袭。 本实验完成时间: 年 月 日