信号系统实验(MATLAB版)(1)
《信号与系统MATLAB实现》实验指导书
电⽓信息⼯程学院
2014年2⽉
长期以来,《信号与系统》课程⼀直采⽤单⼀理论教学⽅式,同学们依靠做习题来巩固和理解教学内容,虽然⼿⼯演算训练了计算能⼒和思维⽅法,但是由于本课程数学公式推导较多,概念抽象,常需画各种波形,作题时难免花费很多时间,现在,我们给同学们介绍⼀种国际上公认的优秀科技应⽤软件MA TLAB,借助它我们可以在电脑上轻松地完成许多习题的演算和波形的绘制。
MATLAB的功能⾮常强⼤,我们此处仅⽤到它的⼀部分,在后续课程中我们还会⽤到它,在未来地科学研究和⼯程设计中有可能继续⽤它,所以有兴趣的同学,可以对MATLAB 再多了解⼀些。
MATLAB究竟有那些特点呢?
1.⾼效的数值计算和符号计算功能,使我们从繁杂的数学运算分析中解脱出来;
2.完备的图形处理功能,实现计算结果和编程的可视化;
3.友好的⽤户界⾯及接近数学表达式的⾃然化语⾔,易于学习和掌握;
4.功能丰富的应⽤⼯具箱,为我们提供了⼤量⽅便实⽤的处理⼯具;
MATLAB的这些特点,深受⼤家欢迎,由于个⼈电脑地普及,⽬前许多学校已将它做为本科⽣必须掌握的⼀种软件。正是基于这些背景,我们编写了这本《信号与系统及MATLAB实现》指导书,内容包括信号的MA TLAB表⽰、基本运算、系统的时域分析、频域分析、S域分析、状态变量分析等。通过这些练习,同学们在学习《信号与系统》的同时,掌握MATLAB的基本应⽤,学会应⽤MATLAB的数值计算和符号计算功能,摆脱烦琐的数学运算,从⽽更注重于信号与系统的基本分析⽅法和应⽤的理解与思考,将课程的重点、难点及部分习题⽤MATLAB进⾏形象、直观的可视化计算机模拟与仿真实现,加深对信号与系统的基本原理、⽅法及应⽤的理解,为学习后续课程打好基础。另外同学们在进⾏实验时,最好事先预习⼀些MATLAB 的有关知识,以便更好地完成实验,同时实验中也可利⽤MATLAB的help命令了解具体语句以及指令的使⽤⽅法。
实验⼀:基本信号在MATLAB中的表⽰和运算(综合) 实验⼆:连续时间LTI系统的时域分析(设计)
实验三:傅⾥叶变换、系统的频域分析(设计)
实验四:信号抽样与恢复(设计)
实验五:信号与系统复频域(S域和Z域)分析(设计)
实验⼀基本信号在MATLAB 中的表⽰和运算
(综合型)⼀、实验⽬的
1.学会⽤MA TLAB 表⽰常⽤连续信号的⽅法; 2.学会⽤MA TLAB 进⾏信号基本运算的⽅法;⼆、实验原理
1.连续信号的MATLAB 表⽰
MATLAB 提供了⼤量的⽣成基本信号的函数,例如指数信号、正余弦信号。
表⽰连续时间信号有两种⽅法,⼀是数值法,⼆是符号法。数值法是定义某⼀时间范围和取样时间间隔,然后调⽤该函数计算这些点的函数值,得到两组数值⽮量,可⽤绘图语句画出其波形;符号法是利⽤MA TLAB 的符号运算功能,需定义符号变量和符号函数,运算结果是符号表达的解析式,也可⽤绘图语句画出其波形图。
例1-1指数信号指数信号在MATLAB 中⽤exp 函数表⽰。
如at Ae t f =)(,调⽤格式为 ft=A*exp(a*t) 程序是
A=1; a=-0.4;
t=0:0.01:10; %定义时间点
ft=A*exp(a*t); %计算这些点的函数值
plot(t,ft); %画图命令,⽤直线段连接函数值表⽰曲线 grid on; %在图上画⽅格
例1-2 正弦信号正弦信号在MATLAB 中⽤ sin 函数表⽰。
调⽤格式为 ft=A*sin(w*t+phi) A=1; w=2*pi; phi=pi/6;
t=0:0.01:8; %定义时间点
ft=A*sin(w*t+phi); %计算这些点的函数值 plot(t,ft); %画图命令 grid on; %在图上画⽅格
例1-3 抽样信号抽样信号Sa(t)=sin(t)/t 在MA TLAB 中⽤ sinc 函数表⽰。
定义为 )/(sin )(πt c t Sa =
t=-3*pi:pi/100:3*pi; ft=sinc(t/pi); plot(t,ft); grid on;
axis([-10,10,-0.5,1.2]); %定义画图范围,横轴,纵轴
title('抽样信号') %定义图的标题名字
例1-4 三⾓信号三⾓信号在MATLAB中⽤tripuls 函数表⽰。
调⽤格式为ft=tripuls(t,width,skew),产⽣幅度为1,宽度为width,且以0为中⼼左右各展开width/2⼤⼩,斜度为skew的三⾓波。width的默认值是1,skew的取值范围是-1~+1之间。⼀般最⼤幅度1出现在t=(width/2)*skew的横坐标位置。
t=-3:0.01:3;
ft=tripuls(t,4,0.5);
plot(t,ft); grid on;
axis([-3,3,-0.5,1.5]);
例1-5虚指数信号调⽤格式是f=exp((j*w)*t)
t=0:0.01:15;
w=pi/4;
X=exp(j*w*t);
Xr=real(X); %取实部
Xi=imag(X); %取虚部
Xa=abs(X); %取模
Xn=angle(X); %取相位
subplot(2,2,1),plot(t,Xr),axis([0,15,-(max(Xa)+0.5),max(Xa)+0.5]),
title('实部');
subplot(2,2,3),plot(t,Xi),axis([0,15,-(max(Xa)+0.5),max(Xa)+0.5]),
title('虚部');
subplot(2,2,2), plot(t,Xa),axis([0,15,0,max(Xa)+1]),title('模');
subplot(2,2,4),plot(t,Xn),axis([0,15,-(max(Xn)+1),max(Xn)+1]),title('相⾓');
%subplot(m,n,i) 命令是建⽴m⾏n列画图窗⼝,并指定画图位置i
例1-6复指数信号调⽤格式是f=exp((a+j*b)*t)
t=0:0.01:3;
a=-1;b=10;
f=exp((a+j*b)*t);
subplot(2,2,1),plot(t,real(f)),title('实部')
subplot(2,2,3),plot(t,imag(f)),title('虚部')
subplot(2,2,2),plot(t,abs(f)),title('模')
subplot(2,2,4),plot(t,angle(f)),title('相⾓')
例1-7 矩形脉冲信号矩形脉冲信号可⽤rectpuls函数产⽣,
调⽤格式为y=rectpuls(t,width),幅度是1,宽度是width,以t=0为对称中⼼。
t=-2:0.01:2;
width=1;
ft=2*rectpuls(t,width);
plot(t,ft)
grid on;
例1-8 单位阶跃信号单位阶跃信号u(t)⽤“t>=0”产⽣,调⽤格式为ft=(t>=0)
t=-1:0.01:5;
ft=(t>=0);
plot(t,ft); grid on;
axis([-1,5,-0.5,1.5]);
例1-9 正弦信号符号算法
syms t %定义符号变量t
y=sin(pi/4*t) %符号函数表达式
ezplot(y,[-16,16]) %符号函数画图命令
或者
f=sym('sin(pi/4*t)') %定义符号函数表达式
ezplot(f,[-16,16])
例1-10单位阶跃信号MA TTLAB符号数学函数Heaviside表⽰阶跃信号,但要画图需在⼯作⽬录创建Heaviside的M⽂件function f=Heaviside(t)
f=(t>0);
保存,⽂件名是Heaviside ,调⽤该函数即可画图,例
t=-1:0.01:3;
f=heaviside(t);
plot(t,f)
axis([-1,3,-0.2,1.2])
或者
y=sym('Heaviside(t)');
ezplot(y,[-1,5]);grid on
2.信号基本运算的MATLAB实现
信号基本运算是乘法、加法、尺度、反转、平移、微分、积分,实现⽅法有数值法和符号法
例1-11 以f(t)为三⾓信号为例,求f(2t) , f(2-2t)
t=-3:0.001:3;
ft=tripuls(t,4,0.5);
subplot(3,1,1);
plot(t,ft); grid on;
title ('f(t)');
ft1= tripuls(2*t,4,0.5);
subplot(3,1,2);
plot(t,ft1); grid on;
title ('f(2t)');
ft2= tripuls(2-2*t,4,0.5);
subplot(3,1,3);
plot(t,ft2); grid on;
title ('f(2-2t)');
例1-12 已知f1(t)=sinwt , f2(t)=sin8wt , w=2pi , 求f1(t)+f2(t)和f1(t)f2(t) 的波形图 w=2*pi;
t=0:0.01:3; f1=sin(w*t); f2=sin(8*w*t); subplot(211)
matlab求导
plot(t,f1+1,':',t,f1-1,':',t,f1+f2) grid on,title('f1(t)+f2(t))') subplot(212)
plot(t,f1,':',t,-f1,':',t,f1.*f2) grid on,title('f1(t)*f2(t)')
符号算法也可实现上述运算,以信号的微积分运算为例说明符号算法应⽤微分的调⽤格式为 diff(function,’variable’,n) 积分的调⽤格式为 int(function,’variable’,a,b)
式中function 表⽰要微分或积分的函数,variable 表⽰运算变量,n 表⽰求导阶数,默认值是求⼀阶导数,a 是积分下限,b 是积分上限,a b 默认是求不定积分。例1-13 求⼀阶导数的例题,已知)sin(21ax y =,x x x y ln sin 2= clear
syms a x y1 y2 %定义符号变量a , x ,y1, y2 y1=sin(a*x^2); %符号函数y1 y2=x*sin(x)*log(x); %符号函数y2
dy1=diff(y1,’x’) %⽆分号直接显⽰结果 dy2=diff(y2) %⽆分号直接显⽰结果
例1-14 求积分的例题,dx x ax x )2
(5
+-?,?+102)1(dx x xe x
clear
syms a x y3 y4
y3=x^5-a*x^2+sqrt(x)/2; y4=(x*exp(x))/(1+x)^2; iy3=int(y3,'x') iy4=int(y4,0,1) 三、上机实验内容
1.调试实验原理中的程序。 2.画出信号波形
(1))()2()(2t u e t f t
--= (2))]2()()[cos 1()(--+=t u t u t t f π
3.信号)()2()(2t u e
t f t
--=,求)2(t f 、)2(t f -波形
实验⼆连续时间LTI 系统的时域分析
(设计型)
⼀、实验⽬的
1.学会⽤MA TLAB 求解连续系统的零状态响应; 2. 学会⽤MATLAB 求解冲激响应及阶跃响应; 3.学会⽤MA TLAB 实现连续信号卷积的⽅法;⼆、实验原理
1.连续时间系统零状态响应的数值计算
我们知道,LTI 连续系统可⽤如下所⽰的线性常系数微分⽅程来描述,
()
()0
()()N
M
i j i j i j a y
t b f t ===∑∑
在MA TLAB 中,控制系统⼯具箱提供了⼀个⽤于求解零初始条件微分⽅程数值解的函数lsim 。其调⽤格式
y=lsim(sys,f,t)
式中,t 表⽰计算系统响应的抽样点向量,f 是系统输⼊信号向量,sys 是LTI 系统模型,⽤来表⽰微分⽅程,差分⽅程或状态⽅程。其调⽤格式
sys=tf(b,a)
式中,b 和a 分别是微分⽅程的右端和左端系数向量。例如,对于以下⽅程:
''''''''''''32103210()()()()()()()()a y t a y t a y t a y t b f t b f t b f t b f t +++=+++
可⽤32103210[,,,];[,,,];a a a a a b b b b b == (,)sys tf b a = 获得其LTI 模型。
注意,如果微分⽅程的左端或右端表达式中有缺项,则其向量a 或b 中的对应元素应为零,不能省略不写,否则出错。
例3-1 已知某LTI 系统的微分⽅程为 y’’(t)+ 2y’(t)+100y(t)=f(t)
其中,'
(0)(0)0,()10sin(2)y y f t t π===,求系统的输出y(t).
解:显然,这是⼀个求系统零状态响应的问题。其MATLAB 计算程序如下: ts=0;te=5;dt=0.01; sys=tf([1],[1,2,100]); t=ts:dt:te;
f=10*sin(2*pi*t); y=lsim(sys,f,t); plot(t,y);
xlabel('Time(sec)'); ylabel('y(t)');
2.连续时间系统冲激响应和阶跃响应的求解
在MATLAB 中,对于连续LTI 系统的冲激响应和阶跃响应,可分别⽤控制系统⼯具箱提供的函数impluse 和step 来求解。其调⽤格式为 y=impluse(sys,t) y=step(sys,t)
式中,t 表⽰计算系统响应的抽样点向量,sys 是LTI 系统模型。例3-2已知某LTI 系统的微分⽅程为 y’’(t)+ 2y’(t)+100y(t)=10f(t)
求系统的冲激响应和阶跃响应的波形. 解:ts=0;te=5;dt=0.01; sys=tf([10],[1,2,100]);
t=ts:dt:te;
h=impulse(sys,t); figure; plot(t,h);
xlabel('Time(sec)'); ylabel('h(t)');
g=step(sys,t); figure; plot(t,g);