资源描述
信号与系统实验指导书
信息科学与工程学院
电子信息科学与技术系
目 录
实 验
实验一 常见信号的MATLAB表示及运算…………………………………………………………… 1
实验二 LTI系统的响应……………………………………………………………………………………… 9
实验三 连续时间信号的频域分析…………………………………………………………………… 15
实验四 系统的零极点及频率响应特性……………………………………………………………… 20
实验五 连续信号与系统的S域分析………………………………………………………………… 24
实验六 离散信号与系统的Z变换分析……………………………………………………………… 28
实验七 语音信号的滤波…………………………………………………………………………………… 33
附 录
附录一 MATLAB环境………………………………………………………………………………………34
附录二 MATLAB常用命令函数表…………………………………………………………………………36
附录三 基本绘图命令………………………………………………………………………………………38
附录四 多项式的求值、求根和部分分式展开…………………………………………………………………41
附录五 符号积分变换………………………………………………………………………………………42
附录六 信号与系统分析常用函数……………………………………………………………………………44
实验及报告要求:
1.预习:实验之前在实验报告上书写实验目的,实验原理,实验内容及理论计算部分;看懂实验指导书上的例题。
2.上机:根据实验指导书及Matlab的help文件学习函数调用方法,自己编程序实现实验内容的要求。
3.报告:将实验程序及输出数据(中间数据可以省略)或图形保存为电子文档,页面设置纸型大小统一为B5,打印并粘贴在实验报告合适位置(每段程序及图形应标注出相应实验内容);根据实验结果回答思考题。
注:要求实验报告书写整洁,在规定时间内完成并上交。根据实验内容及报告完成情况给出实验成绩(优、良、中、差),迟交者适当降低当次成绩,不交者当次成绩为0,所有实验成绩经综合后将以15%的比例记入本课程期末综合成绩中。
实验一 常见信号的MATLAB表示及运算
一、实验目的
1.熟悉常见信号的意义、特性及波形
2.学会使用MATLAB表示信号的方法并绘制信号波形
3. 掌握使用MATLAB进行信号基本运算的指令
4. 熟悉用MATLAB实现卷积积分的方法
二、实验原理
信号一般是随时间而变化的某些物理量。按照自变量的取值是否连续,信号分为连续时间信号和离散时间信号,一般用和来表示。若对信号进行时域分析,就需要绘制其波形,如果信号比较复杂,则手工绘制波形就变得很困难,且难以精确。MATLAB强大的图形处理功能及符号运算功能,为实现信号的可视化及其时域分析提供了强有力的工具。
根据MATLAB的数值计算功能和符号运算功能,在MATLAB中,信号有两种表示方法,一种是用向量来表示,另一种则是用符号运算的方法。在采用适当的MATLAB语句表示出信号后,就可以利用MATLAB中的绘图命令绘制出直观的信号波形了。下面分别介绍连续时间信号和离散时间信号的MATLAB表示及其波形绘制方法。
1.连续时间信号
所谓连续时间信号,是指其自变量的取值是连续的,并且除了若干不连续的点外,对于一切自变量的取值,信号都有确定的值与之对应。从严格意义上讲,MATLAB并不能处理连续信号。在MATLAB中,是用连续信号在等时间间隔点上的样值来近似表示的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。在MATLAB中连续信号可用向量或符号运算功能来表示。
⑴ 向量表示法
对于连续时间信号,可以用两个行向量f和t来表示,其中向量t是用形如的命令定义的时间范围向量,其中,为信号起始时间,为终止时间,p为时间间隔。向量f为连续信号在向量t所定义的时间点上的样值。例如:对于连续信号 ,我们可以将它表示成行向量形式,同时用绘图命令plot()函数绘制其波形。其程序如下:
t1=-10:0.5:10; %定义时间t的取值范围:-10~10,取样间隔为0.5,
%则t1是一个维数为41的行向量
f1=sin(t1). /t1; %定义信号表达式,求出对应采样点上的样值,
%同时生成与向量t1维数相同的行向量f1
figure(1); %打开图形窗口1
plot(t1,f1); %以t1为横坐标,f1为纵坐标绘制f1的波形
t2=-10:0.1:10; %定义时间t的取值范围:-10~10,取样间隔为0.1,
%则t2是一个维数为201的行向量
f2=sin(t2). /t2; %定义信号表达式,求出对应采样点上的样值
%同时生成与向量t2维数相同的行向量f2
figure(2); %打开图形窗口2
plot(t2,f2); %以t2为横坐标,f2为纵坐标绘制f2的波形
运行结果如下:
图1-1 图1-2
说明:
l plot是常用的绘制连续信号波形的函数。
l 严格说来,MATLAB不能表示连续信号,所以,在用plot( )命令绘制波形时,要对自变量t进行取值,MATLAB会分别计算对应点上的函数值,然后将各个数据点通过折线连接起来绘制图形,从而形成连续的曲线。因此,绘制的只是近似波形,而且,其精度取决于t的取样间隔。t的取样间隔越小,即点与点之间的距离越小,则近似程度越好,曲线越光滑。例如:图1-1是在取样间隔为p=0.5时绘制的波形,而图1-2是在取样间隔p=0.1时绘制的波形,两相对照,可以看出图1-2要比图1-1光滑得多。
l 在上面的f=sin(t). /t语句中,必须用点除符号,以表示是两个函数对应点上的值相除。
⑵ 符号运算表示法
如果一个信号或函数可以用符号表达式来表示,那么我们就可以用前面介绍的符号函数专用绘图命令ezplot()等函数来绘出信号的波形。例如:对于连续信号,我们也可以用符号表达式来表示它,同时用ezplot()命令绘出其波形。其MATLAB程序如下:
syms t ; %符号变量说明
f=sin(t)/t ; %定义函数表达式
ezplot(f,[-10,10]); %绘制波形,并且设置坐标轴显示范围
运行结果如下:
图1-3
⑶ 常见信号的MATLAB表示
对于普通的信号,应用以上介绍的两种方法即可完成计算函数值或绘制波形,但是对于一些比较特殊的信号,比如单位阶跃信号e(t)、符号函数sgn(t)等,在MATLAB中这些信号都有专门的表示方法。
l 单位阶跃信号
单位阶跃信号的定义为: ,单位阶跃信号是信号分析的基本信号之一,在信号与系统分析中有着非常重要的作用,通常,我们用它来表示信号的定义域,简化信号的时域表示形式。例如:可以用两个不同延时的单位阶跃信号来表示一个矩形门信号,即:
在MATLAB中,可通过多种方法得到单位阶跃信号,下面分别介绍。
方法一: 调用Heaviside(t)函数
在MATLAB的Symbolic Math Toolbox 中,有专门用于表示单位阶跃信号的函数,即Heaviside(t)函数,用它即可方便地表示出单位阶跃信号以及延时的单位阶跃信号,并且可以方便地参加有关的各种运算过程。
首先定义函数Heaviside(t) 的m函数文件,该文件名应与函数名同名即Heaviside.m。
%定义函数文件,函数名为Heaviside,输入变量为x,输出变量为y
function y= Heaviside(t)
y=(t>0); %定义函数体,即函数所执行指令
%此处定义t>0时y=1,t<=0时y=0,注意与实际的阶跃信号定义的区别。
例① 用MATLAB画出单位阶跃信号的波形,其程序如下:
ut=sym('Heaviside(t)'); %定义单位阶跃信号(要用符号函数定义法)
ezplot(ut,[-2,10]) %绘制单位阶跃信号在-2~10范围之间的波形
运行结果如下:
例② 用MATLAB画出信号的波形
其程序如下:
f=sym('Heaviside(t+2)-3*Heaviside(t-5)'); %定义函数表达式
ezplot(f,[-4,20]) %绘制函数在-4~20范围之间的波形
运行结果如下:
方法二:数值计算法
在MATLAB中,有一个专门用于表示单位阶跃信号的函数,即stepfun( )函数,它是用数值计算法表示的单位阶跃函数。其调用格式为:
stepfun(t,t0)
其中,t是以向量形式表示的变量,t0表示信号发生突变的时刻,在t0以前,函数值小于零,t0以后函数值大于零。有趣的是它同时还可以表示单位阶跃序列,这只要将自变量以及取样间隔设定为整数即可。有关单位阶跃序列的表示方法,我们后面有专门论述,下面通过一个例子来说明如何调用stepfun( )函数来表示单位阶跃函数。
例① 用stepfun( )函数表示单位阶跃信号,并绘出其波形
程序如下:
t=-1:0.01:4; %定义时间样本向量
t0=0; %指定信号发生突变的时刻
ut=stepfun(t,t0); %产生单位阶跃信号
plot(t,ut) %绘制波形
axis([-1,4,-0.5,1.5]) %设定坐标轴范围
运行结果如下:
例② 绘出门函数的波形
程序如下:
t=-4:0.01:4; %定义时间样本向量
t1=-2; %指定信号发生突变的时刻
u1=stepfun(t,t1); %产生左移位的阶跃信号e(t+2)
t2=2; %指定信号发生突变的时刻
u2=stepfun(t,t2); %产生右移位的阶跃信号e(t-2)
g=u1-u2; %表示门函数
plot(t,g) %绘制门函数的波形
axis([-4,4,-0.5,1.5]) %设定坐标轴范围-4<x<4 ,-0.5<y<1.5
运行结果如下:
l 符号函数
符号函数的定义为:
在MATLAB中有专门用于表示符号函数的函数sign() ,由于单位阶跃信号e (t)和符号函数两者之间存在以下关系:,因此,利用这个函数就可以很容易地生成单位阶跃信号。下面举个例子来说明如何利用sign()函数生成单位阶跃信号,并同时绘制其波形。
举例:利用sign()函数生成单位阶跃信号,并分别绘出两者的波形
MATLAB程序如下:
t=-5:0.01:5; %定义自变量取值范围及间隔,生成行向量t
f=sign(t); %定义符号信号表达式,生成行向量f
figure(1); %打开图形窗口1
plot(t,f), %绘制符号函数的波形
axis([-5,5,-1.5,1.5]) %定义坐标轴显示范围
s=1/2+1/2*f; %生成单位阶跃信号
figure(2); %打开图形窗口2
plot(t,s),
axis([-5,5,-0.5,1.5]) %定义坐标轴显示范围
运行结果如下:
2.离散时间信号
离散时间信号又叫离散时间序列,一般用 表示,其中变量k为整数,代表离散的采样时间点(采样次数)。
在MATLAB中,离散信号的表示方法与连续信号不同,它无法用符号运算法来表示,而只能采用数值计算法表示,由于MATLAB中元素的个数是有限的,因此,MATLAB无法表示无限序列;另外,在绘制离散信号时必须使用专门绘制离散数据的命令,即stem()函数,而不能用plot()函数。
下面通过一些常用离散信号来说明如何用MATLAB来实现离散信号的表示,以及可视化。
l 单位序列d (k)
单位序列d (k)的定义为
下面是用MATLAB绘制单位序列d (k) 的MATLAB程序:
k1=-5;k2=5; %定义自变量的取值范围
k=k1:k2; %定义自变量的取值范围及取样间隔(默认为1),并生成行向量
n=length(k); %取向量的维数
f=zeros(1,n); %生成与向量k的维数相同地零矩阵,给函数赋值
f(1,6)=1; %在k=0时刻,信号赋值为1
stem(k,f,'filled') %绘制波形
%'filled'定义点的形状,可通过help文件查询其它形状的描述
axis([k1,k2,0,1.5]) %定义坐标轴显示范围
运行结果如下:
如果要绘制移位的单位序列d (k+k0)的波形,只要将以上程序略加修改即可,例如要绘制信号d (k+2)的图形,可将以上程序改为:
k1=-5;k2=5; %定义自变量的取值范围
k0=3; %定义平移量
k=k1:k2; %定义自变量的取值范围及取样间隔(默认为1),并生成行向量
n=length(k); %取向量的维数
f=zeros(1,n); %生成与向量k的维数相同的零矩阵,给函数赋值
f(1, -k0-k1+1)=1; %在k=k0时刻,信号赋值为1
stem(k,f,'filled') %绘制波形
axis([k1,k2,0,1.5]) %定义坐标轴显示范围
l 单位阶跃序列e (k)
单位阶跃序列e(k)的定义为
下面是绘制单位阶跃序列e(k+k0) 的MATLAB程序:
k1=-3;k2=10; k0=0; %定义起止时刻和跃变时刻
k=k1:-k0-1; kk=-k0:k2;
n=length(k); %取k=k0点以前向量的维数
nn=length(kk); %取k=k0点以后(含k=k0点)向量的维数
u=zeros(1,n); %在k=k0以前,信号赋值为0
uu=ones(1,nn); %在k=k0以后,信号赋值为1
stem(k,u,'filled') %绘制k=k0以前信号的波形
hold on %保持图形窗口,以便在同一图形窗口绘制多个图形
stem(kk,uu,'filled') %绘制k=k0以后(含k=k0点)信号的波形
hold off %图形窗口解冻
axis([k1,k2,0,1.5]) %设置坐标轴显示范围
运行结果如下:
注意:以上介绍了几个常用的绘图命令:plot,ezplot,stairs,stem,其中,绘制连续信号得到光滑的曲线时用plot命令;显示连续信号中的不连续点时用stairs命令较好;绘制离散信号波形用stem命令;当绘制用MATLAB符号表达式表达的信号时要用ezplot命令。
3.卷积积分
信号的卷积是数学上的一种积分运算,两个信号的卷积定义为:
信号的卷积运算在系统分析中主要用于求解系统的零状态响应。一般情况,卷积积分的运算比较困难,但在MATLAB中则变得十分简单,MATLAB中是利用conv函数来实现卷积的。
功能:实现两个函数和的卷积。
格式:g=conv(f1,f2)
说明:f1=f1(t),f2=f2(t) 表示两个函数,g=g(t)表示两个函数的卷积结果。
例题:已知两信号, ,求卷积。
MATLAB程序如下:
t1=1:0.01:2; t2=2:0.01:3;
t3=3:0.01:5; %两信号卷积结果自变量t区间应为:[两信号起始时刻之%和~两信号终止时刻之和]请自行推导该结论
f1=ones(size(t1)); %高度为一的门函数,时间从t=1到t=2
f2=ones(size(t2)); %高度为一的门函数,时间从t=2到t=3
g=conv(f1,f2); %对f1和f2进行卷积
subplot(3,1,1),plot(t1,f1); %画f1的波形
subplot(3,1,2),plot(t2,f2); %画f2的波形
subplot(3,1,3),plot(t3,g); % grid on; 画g的波形
三、实验内容
1.分别用MATLAB的向量表示法和符号运算功能,表示并绘出下列连续时间信号的波形:
⑴ ⑵
⑶ ⑷
2.分别用MATLAB表示并绘出下列离散时间信号的波形:
⑴ ⑵
⑶ ⑷
3.已知信号f(t)的波形如下图所示,试用MATLAB绘出满足下列要求的信号波形。
⑴
⑵
⑶ (其中a的值分别为a=0.5和a=2)
⑷
4.已知两信号,,求卷积积分,并与例题比较。
5.已知两信号, ,求卷积积分。
6.已知,求两序列的卷积和 。
四、预习要求
1.熟悉常见信号的意义、特性及用MATLAB软件表示的方法
2.熟悉用MATLAB软件绘制信号波形的方法
3.编写MATLAB程序
五、实验报告要求
1.简述实验目的及实验原理
2.抄写实验内容,写出程序清单
3.记录信号波形
4.实验总结(收获及体会)
实验二 LTI系统的响应
一、 实验目的
1. 熟悉连续时间系统的单位冲激响应、阶跃响应的意义及求解方法
2. 熟悉连续(离散)时间系统在任意信号激励下响应的求解方法
3. 熟悉应用MATLAB实现求解系统响应的方法
二、 实验原理
1.连续时间系统
对于连续的LTI系统,当系统输入为f(t),输出为y(t),则输入与输出之间满足如下的线性常系数微分方程:,当系统输入为单位冲激信号δ(t)时产生的零状态响应称为系统的单位冲激响应,用h(t)表示。若输入为单位阶跃信号ε(t)时,系统产生的零状态响应则称为系统的单位阶跃响应,记为g(t),如下图所示。
系统的单位冲激响应h(t)包含了系统的固有特性,它是由系统本身的结构及参数所决定的,与系统的输入无关。我们只要知道了系统的冲激响应,即可求得系统在不同激励下产生的响应。因此,求解系统的冲激响应h(t)对我们进行连续系统的分析具有非常重要的意义。
在MATLAB中有专门用于求解连续系统冲激响应和阶跃响应, 并绘制其时域波形的函数impulse( ) 和step( )。如果系统输入为f(t),冲激响应为h(t),系统的零状态响应为y(t),则有:。
若已知系统的输入信号及初始状态,我们便可以用微分方程的经典时域求解方法,求出系统的响应。但是对于高阶系统,手工计算这一问题的过程非常困难和繁琐。
在MATLAB中,应用lsim( )函数很容易就能对上述微分方程所描述的系统的响应进行仿真,求出系统在任意激励信号作用下的响应。lsim( )函数不仅能够求出连续系统在指定的任意时间范围内系统响应的数值解,而且还能同时绘制出系统响应的时域波形图。
以上各函数的调用格式如下:
⑴ impulse( ) 函数
函数impulse( )将绘制出由向量a和b所表示的连续系统在指定时间范围内的单位冲激响应h(t)的时域波形图,并能求出指定时间范围内冲激响应的数值解。
l impulse(b,a) 以默认方式绘出由向量a和b所定义的连续系统的冲激响应的时域波形。
l impulse(b,a ,t0) 绘出由向量a和b所定义的连续系统在0 ~ t0时间范围内冲激响应的时域波形。
l impulse(b,a,t1:p:t2) 绘出由向量a和b所定义的连续系统在t1 ~ t2时间范围内,并且以时间间隔p均匀取样的冲激响应的时域波形。
l y=impulse(b,a,t1:p:t2) 只求出由向量a和b所定义的连续系统在t1 ~ t2时间范围内,并且以时间间隔p均匀取样的冲激响应的数值解,但不绘出其相应波形。
⑵ step( ) 函数
函数step( )将绘制出由向量a和b所表示的连续系统的阶跃响应,在指定的时间范围内的波形图,并且求出数值解。和impulse( )函数一样,step( )也有如下四种调用格式:
step( b,a)
step(b,a,t0)
step(b,a,t1:p:t2)
y=step(b,a,t1:p:t2)
上述调用格式的功能和impulse( )函数完全相同,所不同只是所绘制(求解)的是系统的阶跃响应g(t),而不是冲激响应h(t)。
⑶ lsim( )函数
根据系统有无初始状态,lsim( )函数有如下两种调用格式:
①系统无初态时,调用lsim( )函数可求出系统的零状态响应,其格式如下:
l lsim(b,a,x,t) 绘出由向量a和b所定义的连续系统在输入为x和t所定义的信号时,系统零状态响应的时域仿真波形,且时间范围与输入信号相同。其中x和t是表示输入信号的行向量,t为表示输入信号时间范围的向量,x则是输入信号对应于向量t所定义的时间点上的取样值。
l y=lsim(b,a,x,t) 与前面的impulse 和step函数类似,该调用格式并不绘制出系统的零状态响应曲线,而只是求出与向量t定义的时间范围相一致的系统零状态响应的数值解。
②系统有初始状态时,调用lsim( )函数可求出系统的全响应,格式如下:
l lsim(A,B,C,D,e,t,X0) 绘出由系数矩阵A,B,C,D所定义的连续时间系统在输入为e和t所定义的信号时,系统输出函数的全响应的时域仿真波形。t为表示输入信号时间范围的向量,e则是输入信号e(t)对应于向量t所定义的时间点上的取样值,X0表示系统状态变量X=[x1,x2,…..xn]'在t=0时刻的初值。
l [Y,X]= lsim(A,B,C,D,e,t,X0) 不绘出全响应波形,而只是求出与向量t定义的时间范围相一致的系统输出向量Y的全响应以及状态变量X的数值解。
显然,函数lsim( )对系统响应进行仿真的效果取决于向量t的时间间隔的密集程度,t的取样时间间隔越小则响应曲线越光滑,仿真效果也越好。
说明:
(1)当系统有初始状态时,若使用lsim( )函数求系统的全响应,就要使用系统的状态空间描述法,即首先要根据系统给定的方式,写出描述系统的状态方程和输出方程。假如系统原来给定的是微分方程或系统函数,则可用相变量法或对角线变量等方法写出系统的状态方程和输出方程。其转换原理如前面实验四所述。
(2)显然利用lsim( )函数不仅可以分析单输入单输出系统,还可以分析复杂的多输入多输出系统。
例题1: 若某连续系统的输入为e(t),输出为r(t),系统的微分方程为:
①求该系统的单位冲激响应h(t)及其单位阶跃响应g(t)。
②若 求出系统的零状态响应y(t)
分析: ① 求冲激响应及阶跃响应的MATLAB程序:
a=[1 5 6];b=[3 2];
subplot(2,1,1), impulse(b,a,4)
subplot(2,1,2), step(b,a,4)
运行结果如右:
② 求零状态响应的MATLAB程序:
a=[1 5 6];b=[3 2];
p1=0.01; %定义取样时间间隔为0.01
t1=0:p1:5; %定义时间范围
x1=exp(-2*t1); %定义输入信号
lsim(b,a,x1,t1), %对取样间隔为0.01时系统响应进行仿真
hold on; %保持图形窗口以便能在同一窗口中绘制多条曲线
p2=0.5; %定义取样间隔为0.5
t2=0:p2:5; %定义时间范围
x2=exp(-2*t2); %定义输入信号
lsim(b,a,x2,t2), hold off %对取样间隔为0.5时系统响应进行仿真并解除保持
运行结果如下:
例题2 已知一个过阻尼二阶系统的状态方程和输出方程分别为:
, r(t)=[0 1]X(t) 。
若系统初始状态为X(0)=[4 -5]T , 求系统在作用下的全响应。
求全响应程序如下:
A=[0 1 ; -2 -3] ;B=[0 2]';C=[0 1];D=[0];
X0=[4 -5]'; %定义系统初始状态
t=0: 0.01:10;
E=[3*exp(-4*t).*ones(size(t))]'; %定义系统激励信号
[r , x]=lsim(A,B,C,D,E,t,X0); %求出系统全响应的数值解
plot(t,r) %绘制系统全响应波形
运行结果如右。
2.离散时间系统
LTI离散系统中,其输入和输出的关系由差分方程描述:
(前向差分方程)
(后向差分方程)
当系统的输入为单位序列δ(k)时产生的零状态响应称为系统的单位函数响应,用h(k)表示。当输入为 ε(k)时产生的零状态响应称为系统的单位阶跃应,记为:g(k),如下图所示。
如果系统输入为e(k),冲激响应为h(k),系统的零状态响应为y(k),则有:。与连续系统的单位冲激响应h(t)相类似,离散系统的单位函数响应h(k)也包含了系统的固有特性,与输入序列无关。我们只要知道了系统的单位函数响应,即可求得系统在不同激励信号作用下产生的响应。因此,求解系统的单位函数响应h(k)对我们进行离散系统的分析也同样具有非常重要的意义。
MATLAB中为用户提供了专门用于求解离散系统单位函数响应, 并绘制其时域波形的函数impz( )。同样也提供了求离散系统响应的专用函数filter( ),该函数能求出由差分方程所描述的离散系统在指定时间范围内的输入序列作用时,产生的响应序列的数值解。当系统初值不为零时,可以使用dlsim( )函数求出离散系统的全响应,其调用方法与前面连续系统的lsim( )函数相似。另外,求解离散系统阶跃响应可以通过如下两种方法实现:一种是直接调用专用函数dstep( ),其调用方法与求解连续系统阶跃响应的专用函数step( )的调用方法相似;另一种方法是利用求解离散系统零状态响应的专用函数filter( ),只要将其中的激励信号看成是单位阶跃信号ε(k)即可。
函数的调用格式分别如下:
⑴ impz( )函数
l impz(b,a) 以默认方式绘出由向量a和b所定义的离散系统单位函数响应的时域波形。
l impz(b,a,n) 绘出由向量a和b所定义的离散系统在0 ~ n (n必须为整数)的离散时间范围内单位函数响应的时域波形。
l impz(b,a,n1:n2) 绘出由向量a和b所定义的离散系统在n1 ~ n2 (n1、n2必须为整数)的离散时间范围内单位函数响应的时域波形。
l y=impz(b,a,n1:n2) 求出由向量a和b所定义的离散系统在n1 ~ n2 (n1、n2必须为整数)的离散时间范围内单位函数响应的数值解,但不绘出波形。
⑵ filter( ) 函数
l filter(b,a,x) 其中a和b与前面相同,x是包含输入序列非零样值点的的行向量。此命令将求出系统在与x的取样时间点相同的输出序列样值。
例题:已知描述离散系统的差分方程为:,且已知系统输入序列为,
① 求出系统的单位函数响应h(k)在-3 ~10离散时间范围内响应波形。
② 求出系统零状态响应在0 ~15区间上的样值;并画出输入序列的时域波形以及系统零状态响应的波形
分析:①求系统的单位函数响应的MATLAB程序:
a=[1,-0.25,0.5]; b=[1,1,0];
impz(b,a,-3:10), title('单位响应') %绘出单位函数响应在-3 ~10区间上的波形
运行结果如图a。
②求零状态响应的MATLAB程序:
a=[1,-0.25,0.5];b=[1,1,0]
k=0:15; %定义输入序列取值范围
x=(1/2).^k; %定义输入序列表达式
y=filter(b,a,x) %求解零状态响应样值
subplot(2,1,1),stem(k,x) %绘制输入序列的波形
title('输入序列')
subplot(2,1,2),stem(k,y) %绘制零状态响应的波形
title('输出序列')
运行结果如下:
y =
Columns 1 through 10
1.0000 1.7500 0.6875 -0.3281 -0.2383 0.1982 0.2156 -0.0218 -0.1015 -0.0086
Columns 11 through 16
0.0515 0.0187 -0.0204 -0.0141 0.0069 0.0088
图a. ①运行结果 图b. ②运行结果
三、 实验内容
1. 已知描述系统的微分方程和激励信号e(t) 分别如下,试用解析方法求系统的单位冲激响应h(t)和零状态响应r(t),并用MATLAB绘出系统单位冲激响应和系统零状态响应的波形,验证结果是否相同。
①;
②;
③;
④如下图所示的电路中,已知,,且两电感上初始电流分别为,如果以电阻上电压作为系统输出,请求出系统在激励(v)作用下的全响应。
2. 请用MATLAB分别求出下列差分方程所描述的离散系统,在0~20时间范围内的单位函数响应、阶跃响应和系统零状态响应的数值解,并绘出其波形。另外,请将理论值与MATLAB仿真结果在对应点上的值作比较,并说出两者的区别和产生误差的原因。
① ;
② ;
③ ;
④一带通滤波器可由下列差分方程描述:, 其中为系统输入, 为系统输出。请求出当激励为(选取适当的n值)时滤波器的稳态输出。
四、 预习要求
1.熟悉系统响应的求解方法
2.了解MATLAB语言中关于系统分析的各个函数如:impulse、step、lsim、impz、filter等函数的调用方法:
五、实验报告要求
1.理论上计算出系统的单位冲激响应/单位函数响应、阶跃响应、零状态响应、全响应的表达式,并写出解题过程。
2.记录仿真结果(包括数据和波形)。
3.写出程序清单。
4.实验总结(收获及体会)
实验三 连续时间信号的频域分析
一、 实验目的
1.熟悉傅里叶变换的性质
2.熟悉常见信号的傅里叶变换
3.了解傅里叶变换的MATLAB实现方法
二、 实验原理
傅里叶变换是信号分析 的最重要的内容之一。从已知信号求出相应的频谱函数的数学表示为:
的傅里叶变换存在的充分条件是在无限区间内绝对可积,即满足下式:
但上式并非傅里叶变换存在的必要条件。在引入广义函数概念之后,使一些不满足绝对可积条件的函数也能进行傅里叶变换。
傅里叶反变换的定义为:。
在这一部分的学习中,大家都体会到了这种数学运算的麻烦。在MATLAB语言中有专门对信号进行正反傅里叶变换的语句,使得傅里叶变换很容易在MATLAB中实现。在MATLAB中实现傅里叶变换的方法有两种,一种是利用MATLAB中的Symbolic Math Toolbox提供的专用函数直接求解函数的傅里叶变换和傅里叶反变换,另一种是傅里叶变换的数值计算实现法。下面分别介绍这两种实现方法的原理。
1.直接调用专用函数法
①在MATLAB中实现傅里叶变换的函数为:
l F=fourier( f ) 对f(t)进行傅里叶变换,其结果为F(w)
l F=fourier(f,v) 对f(t)进行傅里叶变换,其结果为F(v)
l F=fourier( f,u,v ) 对f(u)进行傅里叶变换,其结果为F(v)
②傅里叶反变换
l f=ifourier( F ) 对F(w)进行傅里叶反变换,其结果为f(x)
l f=ifourier(F,U) 对F(w)进行傅里叶反变换,其结果为f(u)
l f=ifou
展开阅读全文