信号与系统实验指导书.docx
《信号与系统实验指导书.docx》由会员分享,可在线阅读,更多相关《信号与系统实验指导书.docx(31页珍藏版)》请在冰点文库上搜索。
![信号与系统实验指导书.docx](https://file1.bingdoc.com/fileroot1/2023-6/8/f7a8439b-9050-485b-bbc3-f13e903fa039/f7a8439b-9050-485b-bbc3-f13e903fa0391.gif)
信号与系统实验指导书
《信号与系统》实验指导书
科技学院电气与信息工程学院
2014年3月
实验一连续时间信号的MATLAB表示
实验二连续时间LTI系统的时域分析
实验三连续时间LTI系统的频率特性及频域分析
实验四连续时间LTI系统的零极点分析
实验五典型离散信号及其MATLAB实现
实验一连时间信号的MATLAB表示
实验目的
1.掌握MATLAB语言的基本操作,学习基本的编程功能;
2.掌握MATLAB产生常用连续时间信号的编程方法;
3.观察并熟悉常用连续时间信号的波形和特性。
实验原理
1.连续信号MATLAB实现原理
从严格意义上讲,MATLAB数值计算的方法并不能处理连续时间信号。
然而,可用连续信号在等时间间隔点的取样值来近似表示连续信号,即当取样时间间隔足够小时,这些离散样值能够被MATLAB处理,并且能较好地近似表示连续信号。
MATLAB提供了大量生成基本信号的函数。
比如常用的指数信号、正余弦信号等都是MATLAB的部函数。
为了表示连续时间信号,需定义某一时间或自变量的围和取样时间间隔,然后调用该函数计算这些点的函数值,最后画出其波形图。
2.典型信号的MATLAB表示
(1)实指数信号:
,式中K,a为实数。
在MATLAB中可以利用exp()函数实现,其语句格式为:
y=K*exp(a*t)。
(2)正弦信号:
或
,其中K为振幅,ω是角频率;φ是初相位。
在MATLAB中可以利用sin()或cos()函数实现,其语句格式为K*sin(ω*t+phi),K*cos(ω*t+phi)。
(3)单位阶跃信号:
单位阶跃信号定义为
,单位阶跃信号在MATLAB中用“(t>=0)”产生。
MATLAB表达式“y=(t>=0)”的含义就是t≥0时y=1,而当t<0时y=0。
此外,也可在MATLAB的work目录下创建uCT的M文件,其MATLAB源程序为
functionf=uCT(t)
f=(t>=0);
保存为uCT.m后,就可以调用该函数。
自定义函数
注意,在此定义的uCT函数是阶跃信号数值表示方法,因此在数值计算中我们将调用uCT函数。
而在MATLAB的MAPLE核中,将Heaviside函数定义为阶跃信号符号表达式,在符号运算过程中,若要调用它必须用sym定义后,才能实现。
(4)复指数信号:
,其中,s=σ+jω是复变量;σ、ω为实数。
在MATLAB中可以利用exp()函数表示复指数信号,MATLAB中默认变量i为虚部单位,求取实部用real()函数,求取虚部用imag()函数,求取模用abs()函数,求取相角用angle()函数。
(5)抽样信号:
,在MATLAB中用与Sa(t)类似的sinc(t)函数表示,定义为
。
(6)矩形脉冲信号:
在MATLAB中可用rectpuls()函数产生,其语句格式为y=rectpuls(t,width),该函数用于产生一个幅度为1、宽度为width,且以t=0为对称轴的矩形脉冲信号,width的默认值为1。
周期性矩形波信号或方波在MATLAB中可用square函数产生,其语句格式为square(t,DUTY)。
该函数用于产生一个周期为
、幅值为
的周期性方波信号,其中,DUTY参数用来表示信号的占空比DUTY%,即在一个周期脉冲宽度(正值部分)与脉冲周期的比值。
占空比默认值为0.5。
(7)三角波脉冲信号:
在MATLAB中可用tripuls()函数产生,其语句格式为y=tripuls(t,width,skew),该函数用于产生一个幅度为1、宽度为width,且以t=0为中心左右各展开width/2大小、斜度为skew的三角波。
width的默认值为1,skew的取值围在-1~+1之间。
一般最大幅度1出现在t=(width/2)×skew的横坐标位置,默认时skew=0,此时产生对称三角波。
(8)下面的函数也可以产生特定的信号
y=fliplr(t)——信号的翻转;
y=sawtooth(t,width)——产生锯齿波信号。
实验容
1.实例分析与验证
根据以上典型信号的MATLAB函数,分析与验证下列典型信号MATLAB程序,并实现各信号波形图的显示,连续信号的图形显示使用连续二维图函数plot()。
(1)正弦信号:
用MATLAB命令产生正弦信号
,并会出时间0≤t≤3的波形图。
程序如下:
K=2;w=2*pi ;phi=pi/4;
t=0:
0.01:
3;
ft=K*sin(w*t+phi);
plot(t,ft),gridon;
axis([0,3,-2.2,2.2])
title('正弦信号')
(2)抽样信号:
用MATLAB中的sinc(t)函数命令产生抽样信号Sa(t),并会出时间为
的波形图。
程序如下:
t=-6*pi:
pi/100:
6*pi;
ft=sinc(t/pi);
plot(t,ft),gridon;
axis([-20,20,-0.5,1.2])
title('抽样信号')
(3)矩形脉冲信号:
用MATLAB中y=rectpuls(t,width)函数命令画出下列矩形脉冲信号的波形图
程序如下:
t=-0.5:
0.01:
3;
t0=0.5;width=1;
ft=2*rectpuls(t-t0,width);
plot(t,ft),gridon;
axis([-0.5,3,-0.2,2.2])
title('矩形脉冲信号')
(4)单位阶跃信号:
用MATLAB命令“y=(t>=0)”绘出-1≤t≤5单位阶跃信号ε(t)。
程序如下:
t=-1:
0.01:
5;
ft=(t>=0);
plot(t,ft),gridon;
axis([-1,5,-0.5,1.5]);
title('单位阶跃信号')
也可通过定义阶跃函数来实现,
functionf=uCT(t);
f=(t>=0);
保存为uCT.m文件,上面实现阶跃信号的程序变为
t=-1:
0.01:
5;
ft=uCT(t);
plot(t,ft),gridon;
axis([-1,5,-0.5,1.5]);
title('单位阶跃信号')
2.实践编程
(1)复指数信号:
用MATLAB命令画出0≤t≤3复指数信号
的实部、虚部、模及相角随时间变化的曲线,并观察其时域特性。
程序如下:
t=0:
0.01:
3;
k=2;a=-1.5;b=10;
ft=k*exp((a+i*b)*t);
subplot(2,2,1);plot(t,real(ft));title('实部');axis([0,3,-2,2]);gridon;
subplot(2,2,2);plot(t,imag(ft));title('虚部');axis([0,3,-2,2]);gridon;
subplot(2,2,3);plot(t,abs(ft));title('模');axis([0,3,0,2]);gridon;
subplot(2,2,4);plot(t,angle(ft));title('相角');axis([0,3,-4,4]);gridon;
(2)用MATLAB中y=square(t,DUTY)产生频率为10Hz、占空比为30%的周期方波信号。
程序如下:
t=0:
0.001:
3;
y=square(2*pi*10*t,30);
plot(t,y);gridon;
axis([0,0.3,-1.2,1.2]);
title('周期方波信号')
(3)用上面定义的uCT阶跃函数实现幅度为1、宽度为1的门函数
。
程序如下:
t=-1:
0.01:
1;
ft=uCT(t+0.5)-uCT(t-0.5);
plot(t,ft);gridon;
axis([-1,1,-0.2,1.2])
title('门函数')
实验分析
观察实验结果,掌握、分析典型的连续时间信号波形特点。
实验总结
总结实验认识、过程、效果、问题、收获、体会、意见和建议。
实验二连续时间LTI系统的时域分析
实验目的
1.运用MATLAB符号求解连续系统的零输入响应和零状态响应;
2.运用MATLAB数值求解连续系统的零状态响应;
3.运用MATLAB求解连续系统的冲激响应和阶跃响应;
4.运用MATLAB卷积积分法求解系统的零状态响应。
实验原理
1.连续时间系统零输入响应和零状态响应的符号求解
LTI连续系统可用线性常系数微分方程描述,即
MATLAB符号工具箱提供了dsolve函数,可实现常系数微分方程的符号求解,其调用格式为
dsolve(‘eq1,eq2,…’,’cond1,cond2,…’,’v’)
其中,参数eq1,eq2、…表示各微分方程,它与MATLAB符号表达式的输入基本相同,微分或导数的输入是用Dy、D2y、D3y、…来表示y的一阶导数
、二阶导数
、三阶导数
、…;参数cond1、cond2、…表示各初始条件或起始条件;参数v表示自变量,默认为是变量t。
可利用dsolve函数来求解系统微分方程的零输入响应和零状态响应,进而求出完全响应。
2.连续时间系统零状态响应的数值求解
实际工程中用的较多求解微分方程的方法是数值求解。
零输入响应的求解可通过函数initial来实现,initial函数中的参量必须是状态变量所描述的系统模型。
对于零状态响应,MATLAB控制系统工具箱提供了对LTI系统的零状态响应进行数值仿真的函数lsim,该函数可求解零初始条件下微分方程的数值解,语句格式为
y=lsim(sys,f,t)
其中,t表示计算系统响应的时间抽样点向量;f是系统的输入信号向量;sys表示LTI系统模型,用来表示微分方程、差分方程或状态方程。
在求解微分方程时,sys是由MATLAB的tf函数根据微分方程系数生成的系统函数对象,其语句格式为
sys=tf(b,a)
其中,b和a分别为微分方程右端和左端的系数向量。
注意,如果微分方程的左端或右端表达式中有缺项,则其向量a或b中的对应元素应为0,不能省略不写,否则会出错。
3.连续时间系统冲激响应和阶跃响应的求解
在MATLAB中,对于连续LTI系统的冲激响应和阶跃响应的数值解,可分别用控制系统工具箱提供的函数impulse和step来求解。
其语句格式为
y=impulse(sys,t)
y=step(sys,t)
其中,t表示计算系统响应的时间抽样点向量,sys表示LTI系统模型。
4.利用卷积积分法求系统的零状态响应
由卷积积分公式可以得到,LTI系统对于任意输入信号的零状态响应,可由系统的单位冲激响应与输入信号的卷积积分得到。
预先建立连续时间信号卷积运算的函数ctsconv.m,其MATLAB源程序为
function[f,t]=ctsconv(f1,f2,t1,t2,dt)%f1和f2分别是参与计算的两个时间信号
f=conv(f1,f2);%t1,t2是两信号时间变量,dt为时间采样间隔
f=f*dt;
ts=min(t1)+min(t2);
te=max(t1)+max(t2);
t=ts:
dt:
te;
subplot(221)
plot(t1,f1);gridon;
axis([min(t1),max(t1),min(f1)-abs(min(f1)*0.2),max(f1)+abs(max(f1)*0.2)])
title('f1(t)');xlabel('t')
subplot(222)
plot(t2,f2);gridon;
axis([min(t2),max(t2),min(f2)-abs(min(f2)*0.2),max(f2)+abs(max(f2)*0.2)])
title('f2(t)');xlabel('t')
subplot(212)
plot(t,f);gridon;
axis([min(t),max(t),min(f)-abs(min(f)*0.2),max(f)+abs(max(f)*0.2)])
title('f(t)=f1(t)*f2(t)');xlabel('t')
在实际计算中,调入即可应用。
实验容
1.实例分析与验证
(1)连续时间系统零输入响应和零状态响应的符号求解
试用MATLAB命令求解微分方程
,当输入
,起始条件为
、
时系统的零输入响应、零状态响应及完全响应。
源程序为:
eq='D2y+3*Dy+2*y=0';
cond='y(0)=1,Dy(0)=2';
yzi=dsolve(eq,cond);yzi=simplify(yzi)
运行结果:
yzi=
-3*exp(-2*t)+4*exp(-t)
eq1='D2y+3*Dy+2*y=Dx+3*x';
eq2='x=exp(-3*t)*Heaviside(t)';
cond='y(-0.001)=0,Dy(-0.001)=0';
yzs=dsolve(eq1,eq2,cond);yzs=simplify(yzs.y)
运行结果:
yzs=
heaviside(t)*(-exp(-2*t)+exp(-t))
yt=simplify(yzi+yzs)
运行结果:
yt=
-3*exp(-2*t)+4*exp(-t)-exp(-2*t)*heaviside(t)+exp(-t)*heaviside(t)
subplot(311)
ezplot(yzi,[0,8]);gridon;
xlabel('t')
title('零输入响应')
subplot(312)
ezplot(yzs,[0,8]);gridon
xlabel('t')
title('零状态响应')
subplot(313)
ezplot(yt,[0,8]);gridon
xlabel('t')
title('完全响应')
(2)连续时间系统零状态响应的数值求解
试用MATLAB数值求解微分方程
,当输入
时系统的零状态响应。
源程序为:
ts=0;te=8;dt=0.01;
sys=tf([1,3],[1,3,2]);
t=ts:
dt:
te;
f=exp(-3*t).*uCT(t);
y=lsim(sys,f,t);
plot(t,y),gridon;
axis([08-0.020.27])
xlabel('t(s)'),ylabel('y(t)')
title('零状态响应')
(3)连续时间系统冲激响应和阶跃响应的求解
已知某LTI系统的微分方程
,试用MATLAB命令绘出
围系统的冲激响应h(t)和阶跃响应s(t)。
源程序为:
t=0:
0.001:
4;
sys=tf([1,16],[1,2,32]);
h=impulse(sys,t);
s=step(sys,t);
subplot(211);plot(t,h),gridon
xlabel('t(s)'),ylabel('h(t)')
title('冲激响应')
subplot(212);plot(t,s),gridon
xlabel('t(s)'),ylabel('s(t)')
title('阶跃响应')
(4)利用卷积积分法求系统的零状态响应
已知某LTI系统的微分方程
,其中,
。
试用MATLAB卷积积分方法绘出系统零状态响应y(t)的波形图。
程序如下:
dt=0.01;t1=0:
dt:
4;
f1=exp(-2*t1);
t2=t1;
sys=tf([1,16],[1,2,32]);
f2=impulse(sys,t2);
[t,f]=ctsconv(f1,f2,t1,t2,dt);
2.实践编程
(1)已知系统的微分方程和激励信号为
,
,试用MATLAB命令绘出系统零状态响应的时域仿真波形图。
源程序为:
ts=0;te=8;dt=0.01;
sys=tf([1,3],[1,4,4]);
t=ts:
dt:
te;
f=exp(-t).*uCT(t);
y=lsim(sys,f,t);
plot(t,y),gridon;
xlabel('t(s)'),ylabel('y(t)')
title('零状态响应')
(2)已知系统的微分方程为
,试用MATLAB命令求系统冲激响应和阶跃响应的数值解,并绘出冲激响应和阶跃响应的时域仿真波形图。
源程序为:
t=0:
0.001:
4;
sys=tf([1],[1,3,2]);
h=impulse(sys,t);
s=step(sys,t);
subplot(211)
plot(t,h),gridon
xlabel('t(s)'),ylabel('h(t)')
title('冲激响应')
subplot(212)
plot(t,s),gridon
xlabel('t(s)'),ylabel('s(t)')
title('阶跃响应')
实验分析
观察实验结果,掌握、分析连续时间系统零状态响应和零输入响应的求解方法。
实验总结
总结实验认识、过程、效果、问题、收获、体会、意见和建议。
实验三连续时间LTI系统的频率特性及频域分析
实验目的
1.运用MATLAB分析连续系统的频率特性;
2.运用MATLAB进行连续系统的频域分析。
实验原理
1.连续时间LTI系统的频率特性
一个连续时间LTI系统的数学模型通常用常系数线性微分方程来描述,即
对上式两边取傅里叶变换,并根据傅里叶变换的时域微分特性,得到系统的频率响应为
MATLAB信号处理工具箱提供的freqs函数可直接计算系统的频率响应的数值解,其语句格式为
H=freqs(b,a,w)
其中,b和a分别表示H(w)的分子和分母多项式的系数向量;w为系统频率响应的频率围,其一般形式为w1:
p:
w2,w1为频率起始值,w2为频率终止值,p为频率取样间隔。
H返回w所定义的频率点上系统响应频率响应的样值。
注意,H返回的样值可能为包含实部和虚部的复数。
因此,如果想得到系统的幅频特性或相频特性,还需利用abs和angle函数来分别求得。
2.连续时间LTI系统的频域分析
连续LTI系统的频域分析法,也称为傅里叶变换分析法。
该方法是基于信号频谱分析的概念,讨论信号作用于线性系统时在频域中求解响应的方法。
傅里叶分析法的关键是求系统的频率响应。
傅里叶分析法主要用来分析系统的频率响应特性,或分析输出信号的频谱,也可用来求解正弦信号作用下的稳态响应。
对于周期信号激励而言,可首先将周期信号进行傅里叶级数展开,然后求系统在各傅里叶级数分解的频率分量作用下系统的稳态响应分量,再由系统的线性性质将这些稳态响应分量叠加,从而得出系统总的响应。
该方法的理论基础是基于正弦信号作用下系统的正弦稳态响应。
对于正弦激励信号
,当经过系统
,其稳态响应为
实验容
1.实例分析与验证
(1)已知一个连续时间LTI系统的微分方程为
求系统的频率响应,并用MATLAB绘出其幅频特性和相频特性图。
解:
对微分方程取傅里叶变换,得
因此,频率响应为
MATLAB源程序:
w=-3*pi:
0.01:
3*pi;
b=[13,7];a=[1,10,8,5];
H=freqs(b,a,w);
subplot(211)
plot(w,abs(H)),gridon
xlabel('\omega(rad/s)'),ylabel('|H(\omega)|')
title('H(w)的频率特性')
subplot(212)
plot(w,angle(H)),gridon
xlabel('\omega(rad/s)'),ylabel('\phi(\omega)|')
title('H(w)的相频特性')
(2)如图为RC低通滤波器电路,在输入端加入矩形脉冲u1(t)。
利用傅里叶分析法求输出端电压u2(t)。
R
u
2
(
t
)
u
1
(
t
)
t
t
(
2
)
1
20kΩ
R
u
(
C
10μF
u
)
解:
RC低通滤波器的频率响应为
其中
激励信号的傅里叶变换为
因此,响应的傅里叶变换为
MATLAB源程序:
w=-6*pi:
0.01:
6*pi;
b=[5];a=[1,5];
H1=freqs(b,a,w);
plot(w,abs(H1)),gridon
xlabel('\omega(rad/s)'),ylabel('|H(\omega)|')
title('RC低通滤波电路的幅频特性')
u1t=sym('Heaviside(t)-Heaviside(t-1)');
U1w=simplify(fourier(u1t));
figure
subplot(221),ezplot(u1t,[-0.2,2]),gridon
title('矩形脉冲信号')
xlabel('Time(sec)'),ylabel('u1(t)')
subplot(222),ezplot(abs(U1w),[-6*pi6*pi]),gridon
title('矩形脉冲的频谱')
xlabel('\omega(rad/s)'),ylabel('X(\omega)')
U2w=sym('5*(1-exp(-i*w))/(5*i*w-w^2)');
u2t=simplify(ifourier(U2w));
subplot(223),ezplot(u2t,[-0.22]),gridon
title('响应的时域波形')
xlabel('Time(sec)'),ylabel('u2(t)')
subplot(224),ezplot(abs(U2w),[-6*pi6*pi]),gridon
title('响应的频谱')
xlabel('\omega(rad/s)'),ylabel('U2(\omega)')
2.实践编程
设系统的频率响应为
,若外加激励
,用MATLAB求其稳态响应。
解:
MATLAB源程序:
t=0:
0.1:
20;
w1=1;w2=10;
H1=1/(-w1^2+j*3*w1+2);
H2=1/(-w2^2+j*3*w2+2);
f=5*cos(w1*t)+2*cos(w2*t);
y=5*abs(H1)*cos(w1*t+angle(H1))+2*abs(H2)*cos(w2*t+angle(H2));
subplot(211);
plot(t,f);gridon
ylabel('f(t)'),xlabel('Time(sec)')
title('输入信号的波形')
subplot(212);
plot(t,y);gridon
ylabel('y(t)'),xlabel('Time(sec)')
title('稳态响应的波形')
或者用freqs函数,程序如下:
t=0:
0.01:
20;
w1=1;w2=10;
eps=1.0e-03;
w=-6*pi:
0.01:
6*pi;
b=[1];a=[1,3,2];
H=freqs(b,a,w);
N=length(w);
fori=1:
N
if(