1、实验:离散时间信号与系统的时域分析 一、实验目的 1、熟悉和掌握常用的用于信号与系统时域仿真分析的MATLAB函数; 2、掌握离散时间信号的MATLAB产生,掌握用周期延拓的方法将一个非周期信号进行周期信号延拓形成一个周期信号的MATLAB编程; 3、牢固掌握系统的单位序列响应的概念,掌握MATLAB描述LTI系统的常用方法及有关函数,并学会利用MATLAB求解LTI系统响应,绘制相应曲线。 基本要求:掌握用MATLAB描述离散时间信号的方法,能够编写MATLAB程序,实现各种信号的时域变换和运算,并且以图形的方式再现各种信号的波形。掌握线性时不变离散系统的时域数学模型用MATL
2、AB描述的方法,掌握线性常系数差分方程的求解编程。 二、实验原理 信号(Signal)一般都是随某一个或某几个独立变量的变化而变化的,例如,温度、压力、声音,还有股票市场的日收盘指数等,这些信号都是随时间的变化而变化的,还有一些信号,例如在研究地球结构时,地下某处的密度就是随着海拔高度的变化而变化的。一幅图片中的每一个象素点的位置取决于两个坐标轴,即横轴和纵轴,因此,图像信号具有两个或两个以上的独立变量。 在《信号与系统》课程中,我们只关注这种只有一个独立变量(Independent variable)的信号,并且把这个独立变量统称为时间变量(Time variable),不管这
3、个独立变量是否是时间变量。 在自然界中,大多数信号的时间变量都是连续变化的,因此这种信号被称为连续时间信号(Continuous-Time Signals)或模拟信号(Analog Signals),例如前面提到的温度、压力和声音信号就是连续时间信号的例子。但是,还有一些信号的独立时间变量是离散变化的,这种信号称为离散时间信号。前面提到的股票市场的日收盘指数,由于相邻两个交易日的日收盘指数相隔24小时,这意味着日收盘指数的时间变量是不连续的,因此日收盘指数是离散时间信号。 而系统则用于对信号进行运算或处理,或者从信号中提取有用的信息,或者滤出信号中某些无用的成分,如滤波,从
4、而产生人们所希望的新的信号。系统通常是由若干部件或单元组成的一个整体(Entity)。系统可分为很多不同的类型,例如,根据系统所处理的信号的不同,系统可分为连续时间系统(Continuous-time system)和离散时间系统(Discrete-time system),根据系统所具有的不同性质,系统又可分为因果系统(Causal system)和非因果系统(Noncausal system)、稳定系统(Stable system)和不稳定系统(Unstable system)、线性系统(Linear system)和非线性系统(Nonlinear system)、时变系统(Time-va
5、riant system)和时不变系统(Time-invariant system)等等。 然而,在信号与系统和数字信号处理中,我们所分析的系统只是所谓的线性时不变系统,这种系统同时满足两个重要的基本性质,那就是线性性和时不变性,通常称为线性时不变(LTI)系统。 1. 信号的时域表示方法 1.1将信号表示成独立时间变量的函数 例如 x(t)=sin(ωt) 和 x[n]=n(0.5)nu[n] 分别表示一个连续时间信号和一个离散时间信号。在MATLAB中有许多内部函数,可以直接完成信号的这种表达,例如: sin():正弦信号 cos():余弦信
6、号 exp():指数信号 1.2用信号的波形图来描述信号 用函数曲线表示一个信号,图1.1就是一个连续时间信号和一个离散时间信号的波形图。 图1.1 连续时间信号与离散时间信号的波形图 1.3将信号用一个数据序列来表示 对于离散时间信号,还可以表示成一个数的序列,例如: x[n]={...., 0.1, 1.1, -1.2, 0, 1.3, ….} ↑n=0 在《信号与系统》和《数字信号处理》课程中,上述三种信号的描述方法是经常要使用的。 2 用MATLAB仿真离散时间信号
7、 在MATLAB中,无论是连续时间信号还是离散时间信号,MATLAB都是用一个数字序列来表示信号,这个数字序列在MATLAB中叫做向量(vector)。通常的情况下,需要与时间变量相对应。 如前所述,MATLAB有很多内部数学函数可以用来产生这样的数字序列,例如sin()、cos()、exp()等函数可以直接产生一个按照正弦、余弦或指数规律变化的数字序列。 2.1离散时间信号的仿真 程序Program1_2用来产生离散时间信号x[n]=sin(0.2πn)。 % Program1_2 % This program is used to generate a discr
8、ete-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
9、 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 % Pro
10、gram1_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
11、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
12、),其语法为: 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
13、 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)]; % Gene
14、rate 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]定义为 2.1 离散时间单位阶跃信号u[n]除了也可以直接用前面给出的扩展函数来产生,还可以利用MATLAB内部函数ones(
15、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的含义是,该函数将把
16、一个图形窗口分割成n1×n2个子图,即将绘制的图形将绘制在第n3个子图中。 2.2信号的时域变换 2.2.1 信号的时移 信号的时移可用下面的数学表达式来描述: 设一个连续时间信号为x(n),它的时移y(n) 表示为: y(n) = x(n - n0) 2.2 其中,n0为位移量。若n0为正数,则y(n)等于将x(n)右移n0秒之后的结果。反之,若n0为负数,则y(n)等于将x(n)左移n0秒之后的结果。 在MATLAB中,时移运算与数学上习惯表达方法完全相同
17、 2.2.2 信号的时域反褶 对一个信号x[n]的反褶运算在数学上表示为 y[n] = x[-n] 2.3 这种反褶运算,用MATLAB实现起来也是非常简单的。有多种方法可以实现信号的反褶运算。 方法一,修改绘图函数plot(t,x)和stem(n,x)中的时间变量t和n,即用-t和-n替代原来的t和n,这样绘制出来的图形,看起来就是原信号经时域反褶后的版本。 方法二,直接利用原信号与其反褶信号的数学关系式来实现。这种方法最符合信号反褶运算的实际意义。 方
18、法三,使用MATLAB内部函数fliplr()来实现信号的反褶运算。其用法如下: y = fliplr(x):其中x为原信号x(t)或x[n],而y则为x的时域反褶。需要说明的是,函数fliplr()对信号作时域反褶,仅仅将信号中各个元素的次序作了一个反转,这种反转处理是独立于时间变量t和n的。因此,如果信号与其时间变量能够用一个数学函数来表达的话,那么建议将时间变量t和n的范围指定在一个正负对称的时间区间即可。 2.2.3周期信号 在《信号与系统》课程中,周期信号是一类非常重要的信号。给定一个信号x(t)或x[n],如果满足
19、 x(t) = x(t+kT) 2.4 x[n] = x[n+kN] 2.5 则该信号叫做周期信号。其中,k为任意整数,T和N为常数,通常称为信号的基本周期或最小周期。 周期信号可以看作是一个时限的非周期信号经过周期延拓之后形成的。在数字信号处理中,周期延拓这一信号处理方法非常重要。 3 LTI系统的时域描述 3.1线性时不变系统 在分析LTI系统时,有关LTI系统的两个重要的性质是必须首先掌握和理解的。这就是线性性(
20、Linearity)和时不变性(Time-invariance)。所谓线性性就是指系统同时满足齐次性和叠加性。这可以用下面的方法来描述。 假设系统在输入信号x1(t)作用时的响应信号为y1(t),在输入信号x2(t)作用时的响应信号为y2(t),给定两个常数a和b,如果当输入信号为x(t)时系统的响应信号为y(t),且满足 x(t) = x1(t) + x2(t) 2.6(a) y(t) = y1(t) + y2(t)
21、 2.7(b) 则该系统具有叠加性(Additivity)。如果满足 x(t) = ax1(t) 2.8(a) y(t) = ay1(t) 2.8(b) 则该系统具有齐次性(Homogeneity)。一个系统如果是线性系统的话,那么这个系统必须同时具有叠加性和齐次性。 又假设系统在输入信号x(t)作用时的响应信号为y(t),对一个给定时间常数t0,如果当输入信号为x(t-t0)时
22、系统的响应信号为y(t-t0)的话,则该系统具有时不变性。 同时具有线性性和时不变性的系统,叫做线性时不变系统,简称LTI系统。LTI系统有连续时间LTI系统和离散时间LTI系统之分。连续时间系统的输入和输出信号都必须是连续时间信号,而离散时间系统的输入和输出信号都必须是离散时间信号。 3.2 LTI系统的单位序列响应 离散时间LTI系统的单位冲激响应的定义与连续时间LTI系统的单位冲激响应相同,只是离散时间单位冲激函数δ[n]的定义有所不同。 系统的单位冲激响应是一个非常重要的概念,对于一个系统,如果我们知道了该系统的单位冲激响应,那么,该系统对任意输入信号
23、的响应信号都可以求得。也就是说,系统的输入信号x(t)、x[n]和输出信号y(t)、y[n]之间的关系可以用一个数学表达式来描述,这个数学表达式为 2.9(a) 2.9(b) 这个表达式就是LTI系统的卷积模型,它是根据系统的线性性和时不变性以及信号可以分解成单位冲激函数经推理得到的。这个表达式实际上告诉了我们一个重要的结论,那就是,任意LTI系统可以完全由它的单位冲激响应h(t)/h[n]来确定。由于系统的单位冲激响应是零状
24、态响应,故按照式2.9求得的系统响应也是零状态响应。式2.9中的积分运算叫做卷积积分,求和运算叫做卷积和,是描述连续时间系统输入输出关系的一个重要表达式。 给定一个连续时间LTI系统,在系统的初始条件为零时,用单位冲激信号δ(t)作用于系统,此时系统的响应信号称为系统的单位冲激响应(Unit impulse response),一般用h(t)来表示。需要强调的是,系统的单位冲激响应是在激励信号为δ(t)时的零状态响应(Zero-state response)。 3.3 用线性常系数差分方程描述LTI系统 线性常系数差分方程是描述LTI系统的另一个时域模型。其原理和实验二中描述相同,此处
25、不再赘述。 三、实验内容及步骤 1. 负指数序列x=(0.8201e^j0.6557)^n*u(n)=(0.65+j0.5)^n*u(n)的幅度和相位。 编写程序:clear, close all, n=0:0.4:20; x=((0.65+1i*0.5).^n).*(n>=0); xr=real(x); xi=imag(x); xamp=abs(x); xpha=angle(x); subplot(221) stem(n,xr,'.');axis([0 20 -3 3]); xlabel('n'),ylabel('xr');title('实部'); grid o
26、n, subplot(222) stem(n,xi,'.');axis([0 20 -3 3]); xlabel('n'),ylabel('xi');title('虚部'); grid on, subplot(223) stem(n,xamp,'.');axis([0 20 -0.1 3]); xlabel('n'),ylabel('xamp');title('幅度'); grid on, subplot(224) stem(n,xpha,'.');axis([0 20 -4 4]); xlabel('n'),ylabel('xpha');title('相位'); gr
27、id on, set(gcf,'color','w'); 2. 正弦函数sin(pi/7n+pi/6)的幅度和相位。 编写程序:clear, close all, n=-20:0.5:20; x=sin(pi/7*n+pi/6); xr=real(x); xi=imag(x); xamp=abs(x); xpha=angle(x); subplot(221) stem(n,xr,'.');axis([-20 20 -3 3]); xlabel('n'),ylabel('xr');title('实部'); grid on, subplot(222) ste
28、m(n,xi,'.');axis([-20 20 -3 3]); xlabel('n'),ylabel('xi');title('虚部'); grid on, subplot(223) stem(n,xamp,'.');axis([-20 20 -0.1 3]); xlabel('n'),ylabel('xamp');title('幅度'); grid on, subplot(224) stem(n,xpha,'.');axis([-20 20 -4 4]); xlabel('n'),ylabel('xpha');title('相位'); grid on, set(gcf,'color','w'); 四、实验报告要求 1、书写所编写的全部MATLAB程序 2、详细记录实验过程中的有关信号波形图(存于自带的U盘中),图形要有明确的标题。 本实验完成时间: 13 年 9 月 10 日






