(基础型实验)
一.实验目的
1.掌握利用MATLAB对系统进行时域分析的方法。
2.掌握连续时间系统零状态响应、冲击响应和阶跃响应的求解方法。
3.掌握求解离散时间系统响应、单位抽样响应的方法。
4.加深对卷积积分和卷积和的理解。掌握利用计算机进行卷积积分和卷积和计算的方法。
二.实验原理与方法
1.连续时间系统时域分析的MATLAB实现
1)连续时间系统的MATLAB表示
LTI连续系统通常可以由系统微分方程描述,设描述系统的微分方程为:
则在MATLAB中可以建立系统模型如下:
其中,tf是用于创建系统模型的函数,向量a和b的元素是以微分方程求导的降幂次序来排列的,如果有缺项,应用0补齐,例如由微分方程
描述的系统可以表示为:
>> b=[1];
>> a=[2 1 3];
>> sys=tf(b,a);
而微分方程由
描述的系统则要表示成
>> b=[1 0 -1];
>> a=[1 1 1];
>> sys=tf(b,a);
2)连续时间系统的零状态响应
零状态响应指系统的初始状态为零,仅由初始信号所引起的响应。MATLAB提供了一个用于求解零状态响应的函数lism,其调用格式如下:
lism(sys,x,t)绘出输入信号及响应的波形,x和t表示输入信号数值向量及其时间向量。
y= lism(sys,x,t)这种调用格式不绘出波形,而是返回响应的数值向量。
3)连续时间系统的冲激响应与阶跃响应
MATLAB提供了函数impulse来求指定时间范围内,由模型sys描述的连续时间系统的单位冲激响应impulse函数基本调用格式如下:
impulse(sys)在默认时间范围内绘出系统冲激响应
impulse(sys,T)绘出系统在0-T范围内冲激响应的时域波形。
Impulse(sys,ts:tp:te)绘出系统在ts-te范围内以tp为时间间隔取样的冲激响应波形。
[y,t]=impulse(...)该调用格式不绘出冲激响应波形,而是返回冲激响应的数值向量及其对应的时间向量。
求解单位阶跃响应用到函数step,几种调用格式如下:
step(sys)
step(sys,T)
step(sys,ts:tp:te)
[y,t]=step(...)
2.离散时间系统时域分析的MATLAB实现
1)离散时间系统的MATLAB表示
LTI离散系统通常可以由系统差分方程描述,设描述系统的差分方程为:
则在MATLAB里,我们可以用如下两个向量来表示这个系统:
2)离散时间系统对任意输入的响应
MATLAB提供了求LTI离散系统响应的专用函数filter,该函数用于求取由差分方程所描述的离散时间系统在指定时间范围内对输入序列所产生的响应,该函数的基本调用格式为
y=filter(b,a,x)
其中x为输入序列,y为输出序列,输出序列y对应的时间区间与x对应的时间区间相同。
3)离散时间系统的单位抽样响应
MATLAB提供了函数impz来求指定时间范围内,由向量b和a描述的离散时间系统的单位抽样响应,具体调用格式如下:
impz(b,a)在默认的时间范围内绘出系统抽样响应的时域波形。
impz(b,a,N)绘出系统在0~N范围内单位抽样响应的时域波形。
impz(b,a,ns:ne)绘出系统在ns~ne范围内的单位抽样响应波形。
[y,t]=impz(...)该调用格式不绘出单位抽样响应波形,而是返回单位抽样响应的数值向量及其对应的时间向量。
3.卷积和与卷积积分
1)离散时间序列的卷积和
卷积和是离散系统时域分析的基本方法之一,离散时间序列和的卷积和定义如下:
对已离散LTI系统,设其输入信号为,单位抽样响应为h(n),则其零状态响应为
即离散LTI系统的零状态响应可以表示成输入信号x(n)和单位抽样响应h(n)的卷积。
MATLAB中conv函数可以用来求两个离散序列的卷积和,调用格式为conv(x1,x2)。例如:
>> x1=ones(1,3);
>> x2=[1 2 3 4];
>> x=conv(x1,x2)
x =
1 3 6 9 7 4
此例中x1、x2、x中都没有时间信息,实际上要考察的信号中还需要知道各时刻对应的时间序列,所以还需要根据序列x1、x2对应的时间序列确定卷积结果x对应的时间序列。设x1、x2为两个在有限时间区间内非零的离散时间序列,即序列x1在区间n1~n2内非零,序列x2在区间m1~m2内非零,则序列x1的时域宽度为L1=n2-n1+1,序列x2的时域宽度为L2=m2-m1+1。由卷积和的定义可知,卷积和序列序列x的时域宽度为L=L1+L2-1,且只在区间(n1+m1)~(n1+m1)+(L1+L2-2)非零。
2)连续时间信号的卷积积分
对连续LTI系统,输入x(t),单位冲击响应为h(t),零状态响应y(t),则有
利用MATLAB可以采用数值计算的方法近似计算卷积积分,卷积积分可以用求和运算来实现
现在考虑只求时的值,则由上式可得
当足够小,就是的数值近似。可以利用计算离散序列卷积和的conv来计算卷积积分,具体步骤如下:
1)将连续时间信号和以时间间隔进行取样,得到离散序列和;
2)构造离散序列和对应的时间向量和;
3)调用该函数conv计算卷积积分在时的近似采样值;
4)构造离散序列对应的时间向量n.。
三.实验内容
(1)已知描述模拟低通、高通、带通和带阻滤波器的微分方程如下,试采用MATLAB绘制出各系统的单位冲激响应和单位阶跃响应的波形。
1)
>> b=[0 0 1];
>> a=[1 sqrt(2) 1]
>> sys=tf(b,a);
>> subplot(121)
>> impulse(sys)
>> subplot(122)
>> step(sys)
2).
>> b=[2 0 0];
>> a=[1 sqrt(2) 1];
>> sys=tf(b,a);
>> subplot(121)
>> impulse(sys)
>> subplot(122)
>>step(sys)
3)
>> b=[0 1 0];
>> a=[1 1 1];
>> sys=tf(b,a);
>> subplot(121)
>> impulse(sys)
>> subplot(122)
>> step(sys)
4)
>> b=[1 1 0];
>> a=[1 1 1];
>> sys=tf(b,a);
>> subplot(121)
>> impulse(sys)
>> subplot(122)
>> step(sys)
(2)已知某系统可以由如下微分方程描述
1)利用MATLAB绘制出该系统冲激响应和阶跃响应的时域波形。
>> b=[0 0 1];
>> a=[1 1 6];
>> sys=tf(b,a);
>> subplot(121)
>> impulse(sys)
>> subplot(122)
>> step(sys)
2)根据冲激响应的时域波分析系统的稳定性。
在0~的范围内,冲激响应的积分为有限值,故该系统是稳定的。
3)如果系统的输入为,求系统的零状态响应。
>> b=[0 0 1];
>> a=[1 1 6];
>> sys=tf(b,a);
>> t=0:0.01:10;
>> x=exp(-t);
>> lsim(sys,x,t)
(3)已知描述离散系统的微分方程如下,试采用MATLAB绘出各系统的单位抽样响应,并根据单位抽样响应的时域波形分析系统的稳定性。
1)
>> b=[1 0 0];
>> a=[1 3 2];
>> impz(b,a)
随着n增大,输出逐渐增大,各点的值之和是无限的,是不稳定系统
2.
>> b=[1 -3 0];
>> a=[1 -0.5 0.8];
>> impz(b,a)
随着n增大,输出逐渐趋于0,各点的值之和有限,是稳定系统
(4)已知系统可以由如下差分方程描述
试采用MATLAB绘出该系统的单位抽样响应波形和单位阶跃形影波形。
>> b=[1 0 0];
>> a=[1 1 0.25];
>> subplot(121)
>> impz(b,a,0:10);
>> subplot(122)
>>stepz(b,a,0:10)
(5)采用MATLAB计算如下两个序列的卷积并绘出图形。
(其中),
>> x1=[1 2 1 1];
>> x2=ones(1,5);
>> x=conv(x1,x2);
>> n=-3:4;
>> stem(n,x,'filled')
>> xlabel('n')
>> title('x(n)=x1(n)*x2(n)')
(6)已知某LTI离散系统,其单位抽样响应h(n)=sin(0.5n),n>=0,系统的输入为x(n)=sin(0.2n),n>=0,计算当n=0,1,2,...,40时系统的零状态响应y(n),绘出x(n),h(n)和y(n)时域波形。
>> n=0:40;
>> x=sin(0.2*n);
>> h=sin(0.5*n);
>> subplot(311)
>> stem(n,x,'filled')
>> xlabel('n')
>> title('x(n)')
>> subplot(312)
>> stem(n,h,'filled')
>> xlabel('n')
>> title('h(n)')
>> n1=0:80;
>> y=conv(h,x);
>> subplot(313)
>> stem(n1,y,'filled')
>> xlabel('n')
>>title('y(n)=x(n)*h(n)')
(7)已知两个连续时间信号如下图所示,试采用MATLAB求这两个信号的卷积。
先编写一个求连续信号求卷积的函数sconv
function [x,t]=sconv(x1,x2,t1,t2,dt)
x=conv(x1,x2);
x=x*dt;
t0=t1(1)+t2(1);
l=length(x1)+length(x2)-2;
t=t0:dt:(t0+l*dt)
命令窗口:
>> t1=-1:0.001:1;
>> x1=2*ones(1,2001);
>> t2=-2:0.001:2;
>> x2=ones(1,4001);
>> [x,t]=sconv(x1,x2,t1,t2,0.001);
>> plot(t,x)
>> xlabel('n')
>> title('x1(t)*x2(t)')
四.实验心得
通过这次实验,我掌握了利用MATLAB求解并绘制连续时间系统零状态响应、冲激响应和阶跃响应以及离散时间系统响应、单位抽样响应的求法,并进一步巩固了卷积积分及卷积和的知识。