信号与系统MATLAB实验全

  • 格式:doc
  • 大小:448.50 KB
  • 文档页数:45

1 实验篇 信号与系统实验指导

实验一、MATLAB编程基础及典型实例

一、实验目的

(1) 熟悉MATLAB软件平台的使用;

(2) 熟悉MATLAB编程方法及常用语句;

(3) 掌握MATLAB的可视化绘图技术;

(4) 结合《信号与系统》的特点,编程实现常用信号及其运算。

二、实验原理

连续信号是指自变量的取值范围是连续的,且对于一切自变量的取值,除了有若干个不连续点以外,信号都有确定的值与之对应。严格来说,MATLAB并不能处理连续信号,而是用等时间间隔点的样值来近似表示连续信号。当取样时间间隔足够小时,这些离散的样值就能较好地近似连续信号。

矩阵是MATLAB进行数据处理的基本单元,矩阵运算是MATLAB最重要的运算。通常意义上的数量(也称为标量)在MATLAB系统中是作为1×1的矩阵来处理的,而向量实际上是仅有一行或者一列的矩阵。

通常用向量表示信号的时间取值范围,如n = -5:5,但信号x(n)、向量n本身的下标都是从1开始的,因此必须用一个与向量x等长的定位时间变量n,以及向量x,才能完整地表示序列x(n)。这一点详情可参考预备篇示例7的程序说明。

三、实验内容与步骤

(1) 新建一个文件夹,以自己的汉语名字命名,以后就用该文件夹专门存放自己所编制的M文件和产生的图形;将该文件夹设置成当前工作目录。

(2) 绘制信号t)32sin(ex(t)t2的曲线,t的范围在0 ~ 30s,取样时间间隔为0.1s.

(3) 在n = [-10:10] 范围产生离散序列:其余n0,3n32n,x(n) ,并绘图。

2 四、实验报告要求

整理并给出“实验内容与步骤”(2)、(3)的程序代码与产生的图形;并回答下面的问题。

(1) 在调用某一函数文件时,该文件中除了输入、输出变量外的其它变量在调用函数结束后是否还存在?这些变量是全局还是局部变量?

(2) 设n = -10:0.2:20,你可以通过哪些方法查看向量n的维数?经过关系运算y = (n >= 3)以后,y的维数是多少?y又等于什么?

(3) 通过MATLAB的帮助系统,学习fliplr函数的功能和使用方法。再此基础上,写出能够产生如下图形的程序,其中4n4,2x(n)n。

-4-20240246810121416x(n)-4-20240246810121416x(-n)

3 连续时间系统的时域分析

一、实验目的

(1) 深刻理解卷积运算,掌握连续线性卷积的计算方法;

(2) 加深对线性时不变系统中零状态响应概念的理解,掌握其求解方法;

(3) 掌握给定连续系统的冲激响应和阶跃响应。

二、实验原理

(1)

线性时不变 (LTI) 连续时间系统用常系数线性微分方程进行描述,系统的零状态响应就是在系统初始状态为零条件下微分方程的解。MATLAB控制系统工具箱提供了一个lsim函数来求解连续时间系统的零状态响应。设系统方程为:

f(t)b(t)fb(t)fb(t)fby(t)a(t)ya(t)ya(t)ya)()()()()()(01122330112233,

该方程左边、右边的系数向量分别为][0123a,a,a,aa,][0123b,b,b,bb,所对应的系统模型sys可借助MATLAB中的tf函数得到:sys = tf(b, a) .

这样,系统的零状态响应为:y = lsim(sys, f, t) ,其中f是输入信号向量,t是与f对应的时间变量。

(2)

连续系统的冲激响应、阶跃响应分别是输入信号为)t(和)t(u所对应的零状态响应。MATLAB控制系统工具箱专门提供了两个函数求解连续系统的冲激响应和阶跃响应。

冲激响应:y = impulse(sys, t) ;

阶跃响应:y = step(sys, t) .

其中sys, t的含义同上。

(3)

卷积是信号与系统中一个最基本、也是最重要的概念之一。在时域中,对于LTI 连续时间系统,其零状态响应等于输入信号与系统冲激响应的卷积;而利用卷积定理,这种关系又对应频域中的乘积。如实验一所述,我们用离散卷积来代替连续卷积,只要取样时间间隔足够小时,就可得到满意的效果。

MATLAB信号处理工具箱提供了一个计算两个离散序列卷积和的函数

4 conv。设向量a、b代表待卷积的两个序列,则c = conv(a, b)就是a与b卷积后得到的新序列。

我们知道两个序列卷积以后,一般而言所得新序列的时间范围、序列长度都会发生变化。例如设f1(n)长度为5,-3≤n≤1;f2(n)长度为7,2≤n≤8;则卷积后得到的新序列长度为11,-1≤n≤9。但是用conv函数求出卷积后没有给出新序列所对应的时间变量。为此,我们在下面的程序示例中给出了一个函数文件dconv,它在完成conv函数功能的同时,还产生了一个对应新序列的时间变量。

(4)

对于连续卷积

)kt(f)k(fd)t(f)(f)t(f)t(f)t(fk2102121lim,

令nt(n为整数),则

kk)kn(f)k(f)kn(f)k(f)n(f][2121 (*)

由(*)式,连续卷积积分可由离散卷积和近似代替,只要取样时间间隔足够小,就可以得到高精度卷积积分的数值计算。在示例3中给出了一个函数文件cconv来完成该功能。

三、程序示例

示例1:已知系统的微分方程为

f(t)(t)fy(t)(t)y(t)y)()()(344112,)t(ef(t)t。求零状态响应y(t)。

a = [1 4 4];

b = [1 3];

sys = tf(b, a);

td = 0.01;

t = 0 : td : 10;

f = exp(-t);

y = lsim(sys, f, t);

plot(t, y);

xlabel('t(sec)');

ylabel('y(t)');

grid on

程序运行结果见下图。

5 01234567891000.050.10.150.20.250.30.35t(sec)y(t)

示例2:利用conv函数,编制一个函数文件dconv,其输出为两个序列卷积后的新序列以及与该新序列对应的时间变量。

function [f, k] = dconv(f1, f2, k1, k2)

% 计算 f1与f2的卷积,并返回与得到的新序列相对应的时间变量

f = conv(f1, f2);

k_start = k1(1) + k2(1);

k_end = length(f1) + length(f2) - 2;

k = k_start : (k_start + k_end);

示例3:在dconv函数和(*)式的基础上,编制一个函数文件cconv,利用离散卷积和来近似计算连续卷积积分。

function [f, k] = cconv(f1,f2,k1,k2,td)

% 计算 f1与f2的连续卷积,并返回与得到的新序列相对应的时间变量

f = td*conv(f1,f2); % 实验讲义中的(*)式计算

k_start = k1(1) + k2(1);

k_end = length(f1) + length(f2) - 2;

k = k_start :td: (k_start + k_end*td);

6 四、实验内容与步骤

(1) 已知系统的微分方程为

(t)fy(t)(t)y(t)y)()()(11222,)t(f(t)。计算系统的零状态响应y(t)、冲激响应)t(和阶跃响应)t(g,并画出相应的图形。

(2) 编程实现如下图所示的两个波形;并利用cconv函数计算这两个信号的卷积、画出卷积后的波形。

t-1 0 12f1(t)-2 0 2t1f2(t)

五、实验报告要求

整理并给出“实验内容与步骤”(1)、(2)、(3)中的程序代码与产生的图形;并回答下面的问题。

(1) 在“实验内容与步骤”(1),零状态响应y(t)和阶跃响应)t(g是否相同?为什么?

(2) 两序列进行卷积后得到新的序列,说明新序列在时域长度、时域区间上与原来两序列的关系。

7 实验三、连续时间系统的频域分析

一、实验目的

(1) 理解周期信号的傅里叶分解,掌握傅里叶系数的计算方法;

(2) 深刻理解和掌握非周期信号的傅里叶变换及其计算方法;

(3) 熟悉傅里叶变换的性质,并能应用其性质实现信号的幅度调制;

(4) 理解连续时间系统的频域分析原理和方法,掌握连续系统的频率响应求解方法,并画出相应的幅频、相频响应曲线。

二、实验原理

(1) 周期信号的傅里叶分解

设有连续时间周期信号()ft,它的周期为T,角频率22fT,且满足狄里赫利条件,则该周期信号可以展开成傅里叶级数,即可表示为一系列不同频率的正弦或复指数信号之和。傅里叶级数有三角形式和指数形式两种。

1) 三角形式的傅里叶级数:

01212011()cos()cos(2)sin()sin(2)2cos()sin()2nnnnaftatatbtbtaantbnt

式中系数na,nb称为傅里叶系数,可由下式求得:

222222()cos(),()sin()TTTTnnaftntdtbftntdtTT

2) 指数形式的傅里叶级数:

()jntnnftFe

式中系数nF称为傅里叶复系数,可由下式求得:

221()TjntTnFftedtT

8 周期信号的傅里叶分解用Matlab进行计算时,本质上是对信号进行数值积分运算。Matlab中进行数值积分运算的函数有quad函数和int函数。其中int函数主要用于符号运算,而quad函数(包括quad8,quadl)可以直接对信号进行积分运算。因此利用Matlab进行周期信号的傅里叶分解可以直接对信号进行运算,也可以采用符号运算方法。quadl函数(quad系)的调用形式为:y=quadl(‘func’,a,b)或y=quadl(@myfun,a,b)。其中func是一个字符串,表示被积函数的.m文件名(函数名);a、b分别表示定积分的下限和上限。第二种调用方式中”@”符号表示取函数的句柄,myfun表示所有限定义的函数的文件名。

(2)周期信号的频谱

周期信号经过傅里叶分解可表示为一系列正弦或复指数信号之和。为了直观地表示出信号所含各分量的振幅,以频率(或角频率)为横坐标,以各谐波的振幅或虚指数函数的幅度为纵坐标,可画出幅度-频率关系图,称为幅度频谱或幅度谱。类似地,可画出各谐波初相角与频率的关系图,称为相位频谱或相位谱。

在计算出信号的傅里叶分解系数后,就可以直接求出周期信号的频谱并画出其频谱图。

(3)非周期信号的傅里叶变换和性质

非周期信号的傅里叶变换定义为:

()()jtFjfted