实验篇 信号与系统实验指导
实验一、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的范围在0 ~ 30s,取样时间间隔为0.1s.
(3) 在n = [-10:10] 范围产生离散序列: ,并绘图。
四、实验报告要求
整理并给出“实验内容与步骤”(2)、(3)的程序代码与产生的图形;并回答下面的问题。
(1) 在调用某一函数文件时,该文件中除了输入、输出变量外的其它变量在调用函数结束后是否还存在?这些变量是全局还是局部变量?
(2) 设n = -10:0.2:20,你可以通过哪些方法查看向量n的维数?经过关系运算y = (n >= 3)以后,y的维数是多少?y又等于什么?
(3) 通过MATLAB的帮助系统,学习fliplr函数的功能和使用方法。再此基础上,写出能够产生如下图形的程序,其中。
连续时间系统的时域分析
一、实验目的
(1) 深刻理解卷积运算,掌握连续线性卷积的计算方法;
(2) 加深对线性时不变系统中零状态响应概念的理解,掌握其求解方法;
(3) 掌握给定连续系统的冲激响应和阶跃响应。
二、实验原理
(1)
线性时不变 (LTI) 连续时间系统用常系数线性微分方程进行描述,系统的零状态响应就是在系统初始状态为零条件下微分方程的解。MATLAB控制系统工具箱提供了一个lsim函数来求解连续时间系统的零状态响应。设系统方程为:
,
该方程左边、右边的系数向量分别为,,所对应的系统模型sys可借助MATLAB中的tf函数得到:sys = tf(b, a) .
这样,系统的零状态响应为:y = lsim(sys, f, t) ,其中f是输入信号向量,t是与f对应的时间变量。
(2)
连续系统的冲激响应、阶跃响应分别是输入信号为和所对应的零状态响应。MATLAB控制系统工具箱专门提供了两个函数求解连续系统的冲激响应和阶跃响应。
冲激响应:y = impulse(sys, t) ;
阶跃响应:y = step(sys, t) .
其中sys, t的含义同上。
(3)
卷积是信号与系统中一个最基本、也是最重要的概念之一。在时域中,对于LTI 连续时间系统,其零状态响应等于输入信号与系统冲激响应的卷积;而利用卷积定理,这种关系又对应频域中的乘积。如实验一所述,我们用离散卷积来代替连续卷积,只要取样时间间隔足够小时,就可得到满意的效果。
MATLAB信号处理工具箱提供了一个计算两个离散序列卷积和的函数conv。设向量a、b代表待卷积的两个序列,则c = conv(a, b)就是a与b卷积后得到的新序列。
我们知道两个序列卷积以后,一般而言所得新序列的时间范围、序列长度都会发生变化。例如设f1(n)长度为5,-3≤n≤1modulate;f2(n)长度为7,2≤n≤8;则卷积后得到的新序列长度为11,-1≤n≤9。但是用conv函数求出卷积后没有给出新序列所对应的时间变量。为此,我们在下面的程序示例中给出了一个函数文件dconv,它在完成conv函数功能的同时,还产生了一个对应新序列的时间变量。
(4)
对于连续卷积
,
令(为整数),则
(*)
由(*)式,连续卷积积分可由离散卷积和近似代替,只要取样时间间隔足够小,就可以得到高精度卷积积分的数值计算。在示例3中给出了一个函数文件cconv来完成该功能。
三、程序示例
示例1:已知系统的微分方程为
,。求零状态响应。
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
程序运行结果见下图。
示例2:利用conv函数,编制一个函数文件dconv,其输出为两个序列卷积后的新序列以及与该新序列对应的时间变量。
function [f, k] = dconv(f1, f2, k1, k2)
% 计算 f1与f2的卷积,并返回与得到的新序列相对应的时间变量
f = conv(f1, f2);
k_start = k1(1) + k2(1);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论