信号与系统实验12.docx
- 文档编号:23599637
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:24
- 大小:162.04KB
信号与系统实验12.docx
《信号与系统实验12.docx》由会员分享,可在线阅读,更多相关《信号与系统实验12.docx(24页珍藏版)》请在冰豆网上搜索。
信号与系统实验12
信号与系统仿真实验
实验1.基本信号的时域表示及分析
1.实验目的
(1)掌握利用MATLAB表示基本连续信号与离散信号的方法。
(2)掌握利用MATLAB对信号进行时域分析的方法。
(3)熟悉常用的MATLAB指令使用方法。
2.实验原理
1)常用的生成基本信号的MATLAB函数
[1]符号函数
符号函数用sign()函数产生,调用格式为sign(x)的信号表示,当x>0时,返回1;当x=0时,返回0;当x<0时,返回-1;因此sign(x)=x./abs(x)。
[2]阶跃函数
阶跃函数用heaviside()产生,调用格式为heaciside(x)信号表示,当x<0时,返回0;当x=0时,返回NaN(Not–a-Number,非数);当x>0时,返回1,严格来说,heaviside()不能算是函数。
[3]指数函数
自然指数信号用exp()函数产生,调用格式为exp(x)的信号表示ex。
[4]正(余)弦函数
正(余)弦函数用sin()(cos())表示,如形式sin(x)表示正弦函数sinx。
[5]抽样函数
常用的抽样函数定义为
,但在MATLAB中用sin(x)表示的抽样函数为sinc(x)
。
[6]矩形脉冲函数
矩形脉冲信号用rectpuls()函数产生,调用格式为rectpuls(x,wideth)的信号可以产生以x=0为对称轴、宽为width的矩形脉冲信号。
周期性矩形脉冲信号用square()函数产生,调用格式为square(t,duty)的信号可以产生一个周期为2π、幅度为±1、占空比为duty%(duty为0-100的值)的周期性方波信号。
[7]三角波脉冲信号
三角波脉冲信号用tripuls()函数产生,调用格式tripuls(x,width,rake)的信号可产生一个幅度为1,宽度为width/2的范围,斜度为rake(
)的三角波。
2)离散时间信号与连续时间信号的MATLAB表示
在对信号进行二维可视化绘图时,对于连续信号一般用plot()进行绘图。
离散信号的表示与连续信号类似。
如正(余)弦信号,其表示方法也采用sin()(cos())函数,只不过用stem()代替plot()绘制离散序列波形;指数信号ak可以用数组幂运算a.^k表示;冲激序列和阶跃序列则可以用一些自带的特殊阵zeros(m,n)、ones(m,n)及关系运算符等表示。
3)信号基本运算的MATLAB实现
[1]平移、翻转和尺度变换
信号的尺度变化、翻转、平移运算,实际上是函数自变量的运算。
在信号的尺度变化x(at)和x[Mk]中,函数的自变量乘以一个常数,在MATLAB中可用算术运算符“*”来实现。
在信号翻转x(-t)和x[-k]运算中,函数的自变量乘以一个负号,在MATLAB中可以直接写出。
在信号平移运算中,函数的自变量加减一个常数,在MATLAB中可用运算符“+”或“-”来实现。
[2]微分与积分
连续时间信号的微分可以用diff()函数近似计算。
连续信号的定积分可由quad()函数来计算,调用格式为quad('function_name',a,b)其中function_name为被积函数名,a和b为积分区间。
[3]差分与累加
正如积分与微分是连续时间函数的重要变换一样,差分和累加是离散时间函数的重要变换。
差分可以用diff()函数计算,累加可以用cumsum()函数计算。
4)用MATLAB实现连续时间信号的卷积
通过值计算的方法可以调用MATLAB中的conv()函数,来近似求解连续信号的卷积积分。
连续时间信号的卷积积分定义如下:
如果我们只求当
(n为整数)是x(t)的值
,则由上式得
其中
实际上是
,
,经等时间间隔
。
抽样间隔
。
3.程序示例
(1)生成正弦信号
离散正弦序列的表示与连续正弦序列的表示类似,只不过用stem()函数代替plot()函数进行绘图。
程序如下:
shiyan6_1_eg1.M
clearall;%清除所有工作空间中的变量
closeall;%关闭所有程序运行产生的窗口@
clc;%清除命令窗口的记录
A=1;w0=1;phi=pi/4;
t=0:
0.01:
10;%定义取样区间,并采用较小的取样间隔
xt=A*sin(w0*t+phi);%定义xt表达式
subplot(2,1,1);plot(t,xt);%绘出连续信号xt的图
title('连续时间信号');%添加标题
xlabel('t');%添加x轴坐标名称
ylabel('xt');%添加y轴坐标名称
n=0:
10;
xn=A*sin(w0*n+phi);%定义xn表达式
subplot(2,1,2);stem(n,xn);%绘出离散信号xn的图
title('离散时间信号');%添加标题
xlabel('n');%添加x轴坐标名称
ylabel('xn');%添加y轴坐标名称
生成的图形
(2)在同一个图框里产生两个不同的抽样信号波形,并添加图例进行说明。
抽样信号产生的示例如下
shiyan6_1_eg2.m
clearall;closeall;clc;
t=-10:
0.01:
10;
A1=pi;A2=1;
y1=sinc(t/A1);
y2=sinc(t/A2);
plot(t,y1,'r',t,y2,'b--');%用红色实线绘制y1,用蓝色虚线绘制y2
axis([-10,10,-0.8,1.2]);%规定坐标轴的范围
legend('y1','y2');%添加图例说明
title('抽样信号');%添加标题
生成的图形如图
(3)用已有函数编写斜坡函数和三角波函数。
[1]斜坡函数
当输人参数小于0时,函数返回值为0;当输入参数大于等于0时,函数返回值等于输入参数。
程序如下:
ramp.m
functiony=ramp(t)
y=t.*(t>=O);
[2]三角波函数
用斜坡函数ramp()来实现。
程序如下
tri.m
functiony=tri(t)
y=ramp(t+1)-2ramp(t)+ramp(t-1);
(4)生成单位冲激序列与单位阶跃序列。
[1]单位冲激序列
程序如下:
shiyan6_1_eg4_1.M
clearall;closeall;clc;
k=-30:
30
xk=[zeros(1,30),1,zeros(1,30)];
stem(k,xk);
生成的图形如图所示
[2]单位阶跃序列
shiyan6_1_eg4_2.M
clearall;closeall;clc;
k=-30:
30;
xk=[zeros(1,30),ones(1,31)];
stem(k,xk)
如图所示
(5)进行平移、翻转和尺度变换。
[1]对于如x(t)=tripuls(t,4,0.5)所示的三角波,则x(t)、x(2t)和x(1-t)的程序可以表示如下
shiyan6_1_eg5_1.M
clearall;closeall;clc;
t=-3:
0.001:
3;
xt=tripuls(t,4,0.5);%定义x(t)
subplot(3,1,1);
plot(t,xt);
gridon;%开启网格
title('x(t)');
xt1=tripuls(2*t,4,0.5);%定义x(2t)
subplot(3,1,2);
plot(t,xt1);
gridon;
title('x(2t)');
xt2=tripuls(1-t,4,0.5);%定义x(1-t)
subplot(3,1,3);
plot(t,xt2);
gridon;
title('x(1-t)');
生成的图形如图
[2]对于离散指数序列x[k]=Aak及x[
k],其程序表示如下
shiyan6_1_eg5_2.M
clearall;closeall;clc;
A=1;a=-0.5;k=0:
10;
xk=A*a.^k;%x[k]表达式
subplot(2,1,1);
stem(k,xk);
gridon;
title('x[k]')
xk2=A*a.^(0.5*k);%对0.5k]表达式
subplot(2,1,2);
stem(k,xk2);
gridon;
title('x[0.5k]');
生成的图形如图
(6)求微分和积分。
[1]求y=tripuls(t,4,0.5)的微分,程序如下
shiyan6_1_eg61.M
clearall;closeall;clc;
h=0.001;
t=-3:
h:
3;
y=tripuls(t,4,0.5)%定义y的波形
y1=diff(y)/h;%对y进行微分
subplot(2,1,1);
plot(t,y);
gridon;
title('y(t)');%绘出y一tripuls{t,4,0.5)的波形
subplot(2,1,2);
plot(t(1:
length(t)-1),y1);%绘出对y一tripuls(t,4,0.5)进行微分后的波形
gridon;
title('dy(t)/dt');
生成的图形如图
[2]求y=tripuls(t,4,0.5)在(-3,3)之间的积分,为方便编程,定义fun1.m
functionyt=fun1(t);
yt=tripuls(t,4,0.5);
具体程序如下:
shiyan6_1_eg6_2.M
clearall;clc;
h=0.001;
t=-3:
h:
3;
y=tripuls(t,4,0.5);
forx=1:
length(t)
y2(x)=quad('fun1',-3,t(x));%计算fun1在积分限(-3,t(x))上的积分
end
subplot(2,1,1);
plot(t,y);
gridon;
title('x(t)');%绘出y一tripuls(t,4,0.5)的波形
subplot(2,1,2);
plot(t,y2);%绘出对y一tripuls(t,4,0.5)进行积分后的波形
gridon;
title('integralofx(t)');
生成的图形如图
(7)累加
求,x[k]=sin(
)的累加值,为了绘出一个完整的周期设k为0~16,程序如下:
shiyan6_1_eg7.M
clearall;closeall;clc;
k=0:
16;
xk=cos(pi*k/8);%x[k]表达式
subplot(2,1,1);
stem(k,xk,'filled');
gridon;
title('x[k]');
xk2=cumsum(xk);%对x[k]进行累加计
subplot(2,1,2);
stem(k,xk2,'filled');gridon;
title('accumalationofx[k]');
生成的图形如图
(8)求卷积
求信号、x1(t)=u(t),x2(t)=e-3tu(t)之司的卷积。
因为x2(t)=e-3tu(t)是一个持续时间无限长的信号,而计算机的数值计算不可能计算真正无限长的时间信号,所以在进行x2(t)=e-3tu(t)的抽样离散化时,所取得时间范围让x2(t)=e-3tu(t)衰减到足够小就可以了,本例可取t=2.1,程序如下:
shiyeur6_1_eg8.m
clearall;closeall;clc;
fs=1000;
t=-1.1:
1/fs:
2.1;
x11=(t>=0);%定义阶跃函数,当t>=0时,x11=1,否则为0
x12=exp(-3*t).*(t>=0);
y1=conv(x11,x12)/fs;
n=length(y1);
tt=(0:
n-1)/fs-2.2;%定义新序列的时间范围
subplot(2,2,1);plot(t,x11);gridon;title('x1')
subplot(2,2,2);plot(t,x12);gridon;title('x2')
subplot(2,1,2);plot(tt,y1);gridon;title('conv(x1,x2)')
4.实验内容与步骤
(1)验证程序示例中的有关程序。
(2)编写相关程序,利用实验原理中给出的调用格式,绘出指数信号和矩形脉冲信号的波形。
(3)如果x(t)=e-2t-1,编写相关程序,绘出x(-t-2)、
和5x(3t+2)的波形。
(4)设
,编写程序,绘图表示x[-k]、x[2k+2]、x[
]。
(5)编写相关程序,绘出下列信号的卷积x1(t)*x2(t)的时域波形。
[1]
[2]
5.预习内容
(1)通过MATLAB帮助系统,了解实验原理中涉及的函数的用法。
(2)用一些自带的特殊阵zeros(m,n)、ones(m,n)或关系运算符表示单位冲激序列和单位阶跃序列。
6.实验报告要求
(1)整理并给出实验内容与步骤中的程序代码与产生的图形。
(2)在实验内容与步骤的(5)中,时间范围是如何选取的?
实验2.线性时不变系统的时域分析
1.实验目的
1)加深对线性时不变系统中零状态响应概念的理解,掌握其求解方法
2)掌握连续时间系统与离散时间系统的冲激响应和阶跃响应的求解方法。
3)深刻理解巻积运算,掌握离散线性卷积、连续线性卷积的计算方法。
2.实验原理
1)线性时不变(LTI)系统的零状态响应
[1]连续时间系统用常系数线性微分方程进行描述,系统的零状态响应就是在系统初状态为零条件下微分方程的解。
MATLAB控制系统工具箱提供了的lsim()函数来求解连续时间系统的零状态响应。
设系统方程为
方程左边、右边系数向量分别为a=[an,an-1,…,a1,a0],b=[bm,bm-1,…,b1,b0],f为输入信号向量,y为输出信号向量,所对应的系统模型sys可借助MATLAB中的tf()函数得到:
sys=tf(b,a)
系统的零状态响应,通过MATLAB提供的lsim()函数进行求解,其形式为y=lsim(sys,x,t)
[2]离散时间系统可用常系数线性差分方程描述如下
方程左边、右边系数向量分别为A=[a0,a1,…,an-1,an],B=[b0,b1,…,bm-1,bm],x是输入信号向量,y是输出信号向量。
注意输出序列的长度与输入序列的长度相同。
离散时间系统的零状态响应与连续时间系统类似,可以通过MATLAB提供的filter()函数进行求解,其形式
Y=filter(B,A,x)
2)冲激响应与阶跃响应
[1]连续时间系统的冲激响应、阶跃响应分别是输入信号为冲激信号子(t)和阶跃信号u(t)所对应的零状态响应。
MATLAB控制系统工具箱专门提供了两个函数求解连续系统的冲激响应和阶跃响应。
对于[1]中定义的系统、sys,t的含义同上,则其冲激响应为
h=impulse(sys,t)阶跃响应为g=step(sys,t)
[2]离散时间系统的冲激响应、阶跃响应分别是输入信号为单位冲激序列
和单位阶跃序
因所对应的零状态响应。
MATLAB也有两个专门的函数求解离散时间系统的冲激响应与阶跃响应,需要注意的是MATLAB6.x以下的版本未提供阶跃响应的求解函数,需要调用川filter()函数进行求解。
对于上述[2]中定义的系统B和A的定义同上,k为输出序列的取值范围(可省略),则其冲激响应为
h=impz(B,A,k)
阶跃响应为
g=stepz(B,A,k)
如果没有输出参数,则直接调用impz(B,A,k)或stepz(B,A,k),MATLAB会在当前绘图窗口中自动画出系统冲激响应或阶跃响应的图形。
3)离散卷积
卷积是信号与系统中一个最基本,也是最重要的概念之一。
在时域中,对于LTI连续时间系统,其零状态响应等于输入信号与系统冲激响应的卷积而利用卷积定理,这种关系又对应频域中的乘积。
第6.1节介绍了可以用离散卷积来代替连续卷积,只要取样时间间隔足够小,就可得到满意的效果。
我们知道卷积求和公式定义为
是为系统的冲激响应,
为输入,则
就为系统的输出。
两个序列卷积以后,一般而言所得的新序列的时间范围、序列长度都会发生变化。
都是有限长序列,区间分别为
,那么y[n]区间一定为
。
例如设f1(n)长度为5,
;f2(n)长度为7,
;则卷积后得到的新序列长度为11,
。
MATLAB提供了一个计算两个离散序列卷积和的函数conv()。
设向量a和b代表待卷积的两个序列,则c=conv(a,b)就是a与b卷积后得到的新序列。
但是用conv()函数求出卷积后没有给出新序列所对应的时间变量,而这个时间变量是有意义的,因此我们需要求出这个时间变量。
在下面的程序示例(3)中我们将给出一种计算新序列对应时间变量长方法。
4)连续卷积
对于连续卷积
令t=n
(n为整数),则
(6-7)
由此可见,连续卷积积分可由离散卷积和近似代替,只要取样时间间隔
足够小,就可以得到高精度卷积积分的数值计算。
在下面的程序示例(4)中给出了一个函数文件convCT来完成该功能。
3.程序示例
(1)求连续时间系统的零状态响应。
已知系统的微分方程为y
(2)(t)+4y
(1)(t)+4y(t)=x
(1)(t)+3x(t),x(t)=e-tu(t)。
求零状态响应yx(t)。
shiyan6_2_eg1.M
clearallcloseallclc
a=[144];
b=[13];
sys=tf(b,a);
td=0.01;
t=0:
td:
10;
x=exp(-t);
y=lsim(sys,x,t);
plot(t,y);
xlabe1('t(sec)');
ylabe1('y(t)');
gridon;
生成的图形如图
(2)求离散时间系统的冲激响应。
已知一个离散时间系统的差分方程为y[k]+3y[k-1]+3y[k-2]=x[k],求冲激响应。
程序如下
shiyan6_2_eg2.M
clearall;closeall;clc
k=0:
10;
a=[133];
b=[1];
h=impz(b,a,k);
stem(k,h);
title('离散时间系统冲激响应');gridon;
生成的图形如图
(3)利用conv()函数,编制一个函数文件convCT,其输出为两个序列卷积后得到的新序列以及与该新序列对应的时间变量。
程序如下:
function[y,n]=convDT(x1,n1,x2,n2)
%求卷积function[y,n]=conv_1(x1,n1,x2,n2)
%y=x1*x2
%n1,n2分别是x1,x2的向量
n=[(min(n1)+min(n2)):
1:
((min(n1)+min(n2))+1ength(n2)+1ength(n1)-2)];
y=conv(x1,x2);
subplot(1,1,1);
stem(n,y);
end
(4)在conv()函数和式(6-7)的基础上,编制一个函数文件convCT,利用离散卷积和来近似计算连续卷积积分,程序如下:
convCT.m
function[w,tw]=convCT(u,tu,v,tv)
%输人参数:
u和v表示两个序列,tu和tv分别表示它们的抽样时间
%返回值w和tw分别表示卷积结果及其抽样时间
T=tu
(2)+tu
(1);
W=T*conv(u,v);
tw=tu
(1)+tv
(1)+T*[0:
length(u)+length(v)-2]
4.实验内容与步骤
(1)验证程序示例中的有关程序
(2)已知系统的微分方程为y
(2)(t)+2y
(1)(t)+2y(t)=x
(1)(t),x(t)=u(t)。
计算机系统的零状态响应y(t)、冲激响应h(t)和阶跃响应g(t),并画出相应的图形。
(3)利用函数impz()和stepz()求下列离散系统的单位冲激响应h(k)和单位阶跃响g(k)并与其理论值比较y[k]+3y[k-1]+2y[k-2]=x[k]。
(4)用MATLA8计算如下两序列的卷积和,绘出它们的时域波形。
(5)编程实现如图所示波形,并利用convCT()函数计算这两个信号的卷积,画出卷积后的波形。
5.预习内容
(1)MATLAB中的连续时间系统和离散时间系统的描述方法是什么?
(2)零状态响应、零输入响应与完全响应之间的关系是什么?
6.实验报告要求
(1)整理并给出实验内容与步骤中的程序代码与产生的图形。
(2)在实验内容与步骤的
(2)中,零状态响应y(t)和阶跃响应g(t)是否相同?
为什么?
(3)两序列进行卷积后得到新的序列,说明新序列在时域长度、时域区间上与原来两序列的关系。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信号 系统 实验 12