利用MATLAB进行信号与系统分析•MATLAB简介•信号的MATLAB表示•利用MATLAB进行系统的时域分析•利用MATLAB进行信号的频域分析•利用MATLAB分析系统的频率特性•利用MATLAB进行连续系统的S域分析•利用MATLAB进行离散系统的Z域分析•利用MATLAB进行系统的状态变量分析MATLAB简介(MatrixLaboratory)•MATLAB的工作方式•如何获取帮助•表达式——变量、数值、算数运算符、关系运算符、逻辑运算符、冒号运算符•数组及其运算•函数文件•循环(FOR、WHILE循环)•基本绘图语句MATLAB简介•1.MATLAB的工作方式•(1)窗口命令方式•(2)运行以.M为扩展名磁盘文件•2.获取帮助•命令窗口输入:help+函数名•例如helpplot工作方式举例•%用plot函数画一个方波•t=[-100113];•f=[001100];•plot(t,f);•xlabel('t');ylabel('f(t)');•axis([-1302]);tf(t)011直接输入以上命令建一个名字为my_file.M的文件,然后在命令窗口输入文件名及回车。3.表达式——变量•不需要变量的类型说明•变量名的第一个字符必须是字母•变量名长度:不超过31个字符•大写和小写的字母视为不同的字符•例如:num_students=25•特殊变量:•pi表示圆周率,inf表示无穷大,NaN(NotaNumber)表示不定量,如0/0。3.表达式——数值•MATLAB用常规的十进制表示数值•用i或j作为后缀来表示复数的虚部•例1.235e5表示1.235105,x=2+3j•abs(x)求复数x的模•angle(x)求复数x的相角(弧度)•real(x)求复数x的实部•imag(x)求复数x的虚部•conj(x)求复数x的共轭3.表达式——运算符号算数运算符•+加•-减•*乘•/除•^乘方•‘矩阵的复共轭转置3.表达式——运算符号逻辑运算符•A&B逻辑与(and)•A|B逻辑或(or)•~A逻辑非(not)值为0时表示逻辑假(F),其它任何非零值表示逻辑真。3.表达式——运算符号关系运算符•AB小于•AB大于•A=B小于等于•A=B大于等于•A==B等于•A~=B不等于3.表达式——运算符号冒号运算符•表达式1:10表示产生一个行向量,它的值为•12345678910•表达式10:-2:1表示产生一个递减的行向量,它的值为•1086424.数组•(1)数组的构造用冒号:产生数组例x=2:5产生一个数组,它的值为x(1)=2,x(2)=3,x(3)=4,x(4)=5x=linspace(0,2,11)将区间[0,2]均匀抽样11点作为数组x给2维数组赋值时,用分号表示一行的结束,如:z=[12;34]。用linspace产生数组4.数组•MATLAB提供了一些产生基本矩阵的函数•zeros产生矩阵元素全为0的矩阵•ones产生矩阵元素全为1的矩阵•rand产生(0,1)均匀分布随机数矩阵•randn产生正态分布随机数矩阵4.数组——数组的运算•数组和一个标量相加或相乘•例y=x-1z=3*x•2个数组的对应元素相乘除.*./•例z=x.*y•确定数组大小的函数•size(A)返回值数组A的行数和列数(二维)•length(B)确定数组B的元素个数(一维)5.函数文件•M文件的第一行包含function•功能:建立一个函数,可以同MATLAB的库函数一样使用.例:编一个绘制图示波形的函数。functiony=tri(t)y=[abs(t)=1].*(1-abs(t));调用函数tri,并画出它的波形t=-2:0.05:2;plot(t,tri(t));tf(t)011-16.For循环•例:编写计算s=1+2+3+...+100的MATLAB程序•s=0;forn=1:100s=s+n;end7.While循环•s=0;•n=1;•eps=1e-6;222312111swhile1/(n*n)epss=s+1/(n*n);n=n+1;end例:计算的值,且误差小于10-6fprintf('s=%.5f\n',s)8.plot函数--绘图函数(continuous)•t=linspace(0,4*pi,512);•plot(t,sin(t),t,cos(t),'-.');•title('myfigure');•xlabel('t');•legend('sin(t)','cos(t)');9.stem函数--绘图函数(discrete)•k=0:39;•stem(k,cos(0.9*pi*k));•title('cos(0.9\pik)');Cos(0.9k)波形0510152025303540-1-0.8-0.6-0.4-0.200.20.40.60.81cos(0.9k)•基本信号的MATLAB表示•(指数信号Aeat,指数序列ak,抽样函数Sa(t),正弦型信号,矩形脉冲信号,三角脉冲信号••信号基本运算的MATLAB实现•(尺度变换、翻转、时移、相加、相乘、差分与求和、微分与积分)信号的MATLAB表示基本信号的MATLAB表示•指数信号Aeaty=A*exp(a*t);•指数序列ak幂运算a.^k实现•正弦型信号内部函数cos()和sin()•抽样函数Sa(t)sinc(t)•矩形脉冲信号y=rectpuls(t,width)•三角波脉冲信号y=tripuls(t,width,skew)%decayingexponential•t=0:001:10;•A=1;•a=-0.4;•ft=A*exp(a*t);•plot(t,ft)01234567891000.10.20.30.40.50.60.70.80.91t=0:0.1:10;A=1;a=-0.4;ft=A*exp(a*t);stem(t,ft)01234567891000.10.20.30.40.50.60.70.80.91%rectpuls•t=0:0.001:4;•T=1;•ft=rectpuls(t-2*T,T);•plot(t,ft)•axis([0,4,-0.5,1.5])00.511.522.533.54-0.500.511.5%tripuls•t=-3:0.001:3;•ft=tripuls(t,4,0.5);•plot(t,ft)-3-2-1012300.10.20.30.40.50.60.70.80.91ft=tripuls(t,4,1);-3-2-1012300.10.20.30.40.50.60.70.80.91%unitimpulssequence•k=-50:50;•delta=[zeros(1,50),1,zeros(1,50)];•stem(k,delta)function[f,k]=impseq(k0,k1,k2)%产生f[k]=delta(k-k0);k1=k=k2k=[k1:k2];f=[(k-k0)==0];k0=0;k1=-50;k2=50;[f,k]=impseq(k0,k1,k2);stem(k,f)-50-40-30-20-100102030405000.10.20.30.40.50.60.70.80.91%unitstepsequence•k=-50:50;•uk=[zeros(1,50),ones(1,51)];•stem(k,uk)function[f,k]=stepseq(k0,k1,k2)%产生f[k]=u(k-k0);k1=k=k2k=[k1:k2];f=[(k-k0)=0];k0=0;k1=-50;k2=50;[f,k]=stepseq(k0,k1,k2);stem(k,f)-50-40-30-20-100102030405000.10.20.30.40.50.60.70.80.91信号基本运算的MATLAB实现•t=-3:0.001:3;•ft1=tripuls(2*t,4,0.5);•subplot(2,1,1)•plot(t,ft1)•title('f(2t)')•ft2=tripuls((2-2*t),4,0.5);•subplot(2,1,2)•plot(t,ft2)•title('f(2-2t)')信号的尺度变换、翻转、时移(平移)已知三角波f(t),用MATLAB画出的f(2t)和f(2-2t)波形-3-2-1012300.20.40.60.81f(2t)-3-2-1012300.20.40.60.81f(2-2t)-3-2-1012300.10.20.30.40.50.60.70.80.91信号的相加与相乘•相加用算术运算符“+”实现•相乘用数组运算符“.*”实现••例画信号Aeatcos(w0t+f)的波形•t=0:0.001:8;•A=1;a=-0.4;•w0=2*pi;phi=0;•ft1=A*exp(a*t).*sin(w0*t+phi);•plot(t,ft1)012345678-0.8-0.6-0.4-0.200.20.40.60.81离散序列的差分与求和•差分y=diff(f);•求和y=sum(f(k1:k2));连续信号的微分与积分•微分y=diff(f)/h;h为数值计算所取时间间隔•定积分quad(‘function_name’,a,b);function_name为被积函数名,a和b指定积分区间。[例]已知三角波f(t),画出其微分与积分的波形•%differentiation•h=0.001;t=-3:h:3;•y1=diff(f2_2(t))*1/h;•plot(t(1:length(t)-1),y1)•%integration•t=-3:0.1:3;•forx=1:length(t)•y2(x)=quad('f2_2',-3,t(x));•end•plot(t,y2)functionyt=f2_2(t)yt=tripuls(t,4,0.5);三角波f(t)微分与积分的波形-3-2-1012300.10.20.30.40.50.60.70.80.91-3-2-10123-1.5-1-0.500.5df(t)/dt-3-2-1012300.511.522.5integraloff(t)利用MATLAB进行系统的时域分析•连续时间系统零状态响应的求解•连续时间系统冲激响应和阶跃响应的求解•离散时间系统零状态响应的求解•离散时间系统单位脉冲响应的求解•离散卷积的计算•t表示计算系统响应的抽样点向量)()(')('')(''')()(')('')('''01230123tfbtfbtfbtfbtyatyatyatyaa=[a3,a2,a1,a0];b=[b3,b2,b1,b0];sys=tf(b,a)1.连续时间系统零状态响应的求解y=lsim(sys,f,t)sys=tf(b,a)b和a分别为微分方程右端和左端各项的系数向量f是系统输入信号向量,sys是LTI系统模型,借助tf函数获得•连续时间系统冲激响应可用impulse函数直接求出,其调用形式为2.连续时间系统冲激响应和阶跃响应的求解y=impulse(sys,t)连续时间系统阶跃响应可用step函数直接求出,其调用形式为y=step(sys,t)t表示计算系统响应的抽样点向量sys是LTI系统模型3.离散时间系统零状态响应的求解•b,a分别是差分方程左、右端的系数向量][][00jkfbikyajmjini--b=[b0,b1,b2,,bM];a=[a0,a1,a2,,aN];可用MATLAB表示为y=filter(b,a,f)f表示输入序列,y表示输出序列4.离散时间系统单位脉冲响应的求解•b,a分别是差分方程左、右端的系数向量•k表示输出序列的取值范围•h就是单位脉冲响应h=impz(b,a,k)5.离散卷积的计算•例如:(s3+2s+3)(s2+3s+2)•可用下面MATLAB语句求出•a=[1,0,2,3];•