实验二、信号与系统时域分析的MATLAB 实现一、实验目的掌握利用Matlab 求解LTI 系统的冲激响应、阶跃响应和零状态响应,理解卷积概念。
二、实验内容1、 卷积运算的MA TLAB 实现:(1) 计算连续信号卷积用MATLAB 中的函数conv ,可编写连续时间信号卷积通用函数sconv ,function [f,n]=sconv(f1,f2,n1,n2,p) f=conv(f1,f2);f=f*p; n3=n1(1)+n2(1); n4=n1(end)+n2(end); n=n3:p:n4;例2.1 )()()(21t f t f t f *=p=0.01; n1=-1:p:1;f1=ones(1,length(n1)); n2=0:p:1; f2=2*n2;[f,n]=sconv(f1,f2,n1,n2,p);subplot(3,1,1),plot(n1,f1), axis([-1.5,1.5,0,2]),grid on subplot(3,1,2),plot(n2,f2), axis([-0.1,1.2,0,3]),grid on subplot(3,1,3),plot(n,f),axis([-1.5,5,0,2]),grid on利用此例验证两个相同的门函数相卷积其结果为一个等腰三角形,两个不同的门函数相卷积其结果为一个等腰梯形:<1>相同:p=0.01;n1=-1:p:1;f1=ones(1,length(n1));n2=-1:p:1;f2=ones(1,length(n2));[f,n]=sconv(f1,f2,n1,n2,p);subplot(3,1,1),plot(n1,f1), axis([-1.5,1.5,0,2]),grid onsubplot(3,1,2),plot(n2,f2), axis([-0.1,1.2,0,3]),grid onsubplot(3,1,3),plot(n,f),axis([-5,5,0,2]),grid on<2>、不同:p=0.01;n1=-1:p:1;f1=ones(1,length(n1));n2=-3:p:1;f2=ones(1,length(n2));[f,n]=sconv(f1,f2,n1,n2,p);subplot(3,1,1),plot(n1,f1), axis([-1.5,1.5,0,2]),grid onsubplot(3,1,2),plot(n2,f2), axis([-4,1.2,0,3]),grid onsubplot(3,1,3),plot(n,f),axis([-5,5,0,5]),grid on(2)计算离散信号卷积用MA TLAB 中的函数conv ,其调用格式为:),(b a conv c =式中,a 、b 为待卷积两序列的向量表示。
向量c 的长度为a 、b 长度之和减1。
例2.2 已知序列{}{}3,2,1,0;1,1,1,1][,3,2,1,0;4,3,2,1][====k k y k k x ,计算][][k y k x *x=[1,2,3,4];y=[1,1,1,1]; k1=0:3; k2=0:3 z=conv(x,y)kz=k1(1)+k2(1):k1(end)+k2(end); stem(kz,z,'fill')z = 1 3 6 10 9 7 42、 连续时间系统零状态响应的求解:LTI 连续时间系统的零状态响应可通过求解初始状态为零的常系数微分方程得到。
在MA TLAB 中控制系统工具箱中提供了一个用于求解零初始条件微分方程数值解的函数lsim 。
其调用方式为:),,(t f s y s l s i my = 式中,sys 表示LTI 系统模型,用来表示微分方程、差分方程、状态方程,t 表示计算系统响应的抽样点向量,f 是系统输入信号向量。
在求解微分方程时,微分方程的LTI 系统模型sys 借助于tf 函数获得,其调用方式为:),(a b tf sys =式中,b 和a 分别为微分方程右端和左端各项的系数向量。
例如:对2阶微分方程:)(2)()(5)(2)(3'''''t f t f t y t y t y +-=-+ 可用a=[3 2 -5],b=[-1 0 2],sys=tf(b,a)获得LTI 模型。
例2.3 系统的微分方程为)()(100)(2)('''t f t y t y t y =++,输入信号为t t f π2sin 10)(=,求系统的零状态响应y(t)。
解: sys=tf([0 0 1],[1 2 100]);t=0:0.01:5; f=10*sin(2*pi*t); y=lsim(sys,f,t); plot(t,y)3、 连续时间系统冲激响应和阶跃响应的求解系统的冲激响应和阶跃响应在MATLAB 中控制系统工具箱中提供函数impulse 和step 分别表示。
其调用方式为:),(),(t sys step y t sys impulse y ==求例2.3所示系统的冲激响应sys=tf([0 0 1],[1 2 100]); t=0:0.01:5; y=impulse(sys,t); plot(t,y)title('连续系统冲激响应') xlabel('time(sec)') ylabel('y(t)')4、 离散时间系统零状态响应的求解LTI 离散系统一般用线性常系数差分方程描述:][][0j k f bi k y a mj jn i i -=-∑∑==f[k]、y[k]分别表示系统的输入和输出,n 是差分方程的阶数。
已知差分方程的n 个初始状态和输入f[k],就可以通过编程由下式迭代计算出系统的输出。
在零初始状态下,MA TLAB 信号处理工具中提供了一个filter 函数,计算差分方程描述的系统的响应。
其调用方式为:),,(f a b filter y =式中,b=[b0,b1,---,bn],a=[a0,a1,---an]分别是差分方程左、右端的系数向量,f 表示输入序列,y 表示输出序列,它们长度要相同。
5、 离散时间系统单位脉冲响应的求解离散系统的单位脉冲响应在MATLAB 中控制系统工具箱中提供函数impz 表示。
其调用方式为:),,(k a b impz h =k 表示输出序列的取值范围,h 是系统的单位脉冲响应。
例2.4 求离散时间系统:][]2[2]1[3][k f k y k y k y =-+-+ 的单位脉冲h[k]。
k=0:10;a=[1 3 2];b=[1 0 0]; h=impz(b,a,k); stem(k,h)title('单位脉冲响应')练习:1、 一系统满足微分方程为t t f t f t y t y t y ⋅==-+πcos 2)(),()()(5)(''',求出系统的零状态响应。
sys=tf([1],[1,5,-1]);t=0:0.01:5; f=2*cos(pi*t); y=lsim(sys,f,t); plot(t,y)2、 求下列各系统的单位冲激响应和单位阶跃响应。
(1))()()(2)('''t f t y t y t y =++sys=tf([1],[1 sqrt(2) 1]); t=0:0.01:5; y=impulse(sys,t); y1=step(sys,t); subplot(2,1,1); plot(t,y)title('连续系统的冲激响应') xlabel('time(sec)') ylabel('y(t)') subplot(2,1,2); plot(t,y1)title('连续系统的阶跃响应') xlabel('time(sec)') ylabel('y(t)')(2))()()()()(''''t f t f t y t y t y +=++sys=tf([0 1 1],[1 1 1]); t=0:0.01:5; y=impulse(sys,t); y1=step(sys,t); subplot(2,1,1); plot(t,y)title('连系统的冲激响应') xlabel('time(sec)') ylabel('y(t)') subplot(2,1,2); plot(t,y1)title('连续系统的阶跃响应') xlabel('time(sec)') ylabel('y(t)3、已知f(k)如下式所示,用conv 函数计算][][],[][k f k h k h k f **,并就它们的对称关系作总结。
↑=--=]5,4,3,2,1[)(],8.2,5.6,3.2,2.1,5.3[)(k h k fx=[3.5,-1.2,2.3,6.5,-2.8]; y=[1,2,3,4,5]; z1=conv(x,y); z2=conv(y,x); N1=length(z1); N2=length(z2); subplot(2,1,1); stem(-2:N1-1-2,z1); title('f[k]*h[k]') subplot(2,1,2); stem(-2:N2-1-2,z2); title('h[k]*f[k]')。