信号与系统SignalsandSystems普通高等教育“十一五”国家级规划教材《信号与系统》陈后金,胡健,薛健高等教育出版社,2007年利用MATLAB进行信号与系统分析MATLAB简介信号的MATLAB表示利用MATLAB进行系统的时域分析利用MATLAB进行信号的频域分析利用MATLAB分析系统的频率特性利用MATLAB进行连续系统的s域分析利用MATLAB进行离散系统的z域分析利用MATLAB进行系统的状态变量分析MATLAB简介(MatrixLaboratory)MATLAB的工作方式如何获取帮助表达式——变量、数值、算数运算符、关系运算符、逻辑运算符、冒号运算符数组及其运算函数文件循环(FOR、WHILE循环)基本绘图语句一、MATLAB的工作方式(1)窗口命令方式(2)运行以.M为扩展名磁盘文件工作方式举例%用plot函数画一个方波t=[-100113];x=[001100];plot(t,x);xlabel('t');ylabel('x(t)');axis([-1302]);tx(t)011直接在命令窗口输入以上命令建一个名字为my_file.M的文件,然后在命令窗口输入文件名及回车。二、获取帮助命令窗口输入:help+函数名例如helpplot三、表达式不需要变量的类型说明变量名的第一个字符必须是字母变量名长度:不超过31个字符大写和小写的字母视为不同的字符例如:num_students=25特殊变量:pi表示圆周率,inf表示无穷大,NaN(NotaNumber)表示不定量,如0/0。变量三、表达式数值MATLAB用常规的十进制表示数值用i或j作为后缀来表示复数的虚部例1.235e5表示1.235105,x=2+3jabs(x)求复数x的模angle(x)求复数x的相角(弧度)real(x)求复数x的实部imag(x)求复数x的虚部conj(x)求复数x的共轭三、表达式运算符号算术运算符+加-减*乘/除^乘方‘矩阵的复共轭转置三、表达式运算符号逻辑运算符A&B逻辑与(and)A|B逻辑或(or)~A逻辑非(not)值为0时表示逻辑假(F),其它任何非零值表示逻辑真。三、表达式运算符号关系运算符AB小于AB大于A=B小于等于A=B大于等于A==B等于A~=B不等于三、表达式运算符号冒号运算符表达式1:10表示产生一个行向量,它的值为12345678910表达式10:-2:1表示产生一个递减的行向量,它的值为108642四、数组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产生数组四、数组1.数组的构造MATLAB提供了一些产生基本矩阵的函数zeros产生矩阵元素全为0的矩阵ones产生矩阵元素全为1的矩阵rand产生(0,1)均匀分布随机数矩阵randn产生正态分布随机数矩阵四、数组2.数组的运算数组和一个标量相加或相乘例y=x-1z=3*x2个数组的对应元素相乘除.*./例z=x.*y确定数组大小的函数size(A)返回值数组A的行数和列数(二维)length(B)确定数组B的元素个数(一维)五、函数文件M文件的第一行包含function功能:建立一个函数,可以同MATLAB的库函数一样使用。五、函数文件例:编一个绘制图示波形的函数。functiony=tri(t)y=[abs(t)=1].*(1-abs(t));调用函数tri,并画出它的波形t=-2:0.05:2;plot(t,tri(t));tx(t)011-1六、For循环例:编写计算s=1+2+3+…+100的MATLAB程序s=0;forn=1:100s=s+n;end七、While循环s=0;n=1;eps=1e-6;while1/(n*n)epss=s+1/(n*n);n=n+1;end+++222312111s例:计算的值,且误差小于10-6fprintf('s=%.5f\n',s)八、plot函数——绘图函数(continuous)t=linspace(0,4*pi,512);plot(t,sin(t),t,cos(t),'-.');title('myfigure');xlabel('t');legend('sin(t)','cos(t)');八、plot函数——绘图函数(continuous)九、stem函数——绘图函数(discrete)k=0:39;stem(k,cos(0.9*pi*k));title('cos(0.9\pik)');九、stem函数——绘图函数(discrete)0510152025303540-1-0.8-0.6-0.4-0.200.20.40.60.81cos(0.9k)cos(0.9k)波形信号的MATLAB表示基本信号的MATLAB表示指数信号Aeat、指数序列ak、抽样函数Sa(t)、正弦型信号、矩形脉冲信号、三角脉冲信号信号基本运算的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)一、基本信号的MATLAB表示%decayingexponentialt=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一、基本信号的MATLAB表示%rectpulst=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一、基本信号的MATLAB表示%tripulst=-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一、基本信号的MATLAB表示%unitimpulssequencek=-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一、基本信号的MATLAB表示%unitstepsequencek=-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(‘x(2t)')ft2=tripuls((2-2*t),4,0.5);subplot(2,1,2)plot(t,ft2)title(‘x(2-2t)')1.信号的尺度变换、翻转、时移(平移)已知三角波x(t),用MATLAB画出的x(2t)和x(2-2t)波形-3-2-1012300.20.40.60.81x(2t)-3-2-1012300.20.40.60.81x(2-2t)-3-2-1012300.10.20.30.40.50.60.70.80.91二、信号基本运算的MATLAB实现2.信号的相加与相乘相加用算术运算符“+”实现相乘用数组运算符“.*”实现例:画信号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二、信号基本运算的MATLAB实现3.离散序列的差分与求和连续信号的微分与积分差分y=diff(f);求和y=sum(f(k1:k2));微分y=diff(f)/h;h为数值计算所取时间间隔定积分quad(‘function_name’,a,b);function_name为被积函数名,a和b指定积分区间。二、信号基本运算的MATLAB实现3.离散序列的差分与求和连续信号的微分与积分例:已知三角波x(t),画出其微分与积分的波形%differentiationh=0.001;t=-3:h:3;y1=diff(f2_2(t))*1/h;plot(t(1:length(t)-1),y1)%integrationt=-3:0.1:3;forx=1:length(t)y2(x)=quad('f2_2',-3,t(x));endplot(t,y2)三角波x(t)微分与积分的波形-3-2-1012300.10.20.30.40.50.60.70.80.91-3-2-10123-1.5-1-0.500.5dx(t)/dt-3-2-1012300.511.522.5integralofx(t)利用MATLAB进行系统的时域分析连续时间系统零状态响应的求解连续时间系统冲激响应和阶跃响应的求解离散时间系统零状态响应的求解离散时间系统单位脉冲响应的求解离散卷积的计算一、连续时间系统零状态响应的求解t表示计算系统响应的抽样点向量)()(')('')(''')()(')('')('''01230123txbtxbtxbtxbtyatyatyatya++++++a=[a3,a2,a1,a0];b=[b3,b2,b1,b0];sys=tf(b,a)y=lsim(sys,x,t)sys=tf(b,a)b和a分别为微分方程右端和左端各项的系数向量x是系统输入信号向量,sys是LTI系统模型,借助tf函数获得二、连续系统冲激响应和阶跃响应求解连续时间系统冲激响应可用impulse函数直接求出,其调用形式为y=impulse(sys,t)连续时间系统阶跃响应可用step函数直接求出,其调用形式为y=step(sys,t)t表示计算系统响应的抽样点向量sys是LTI系统模型三、离散时间系统零状态响应的求解b,a分别是差分方程左、右端的系数向量][][00jkxbikyajmjini--b=[b0,b1,b2,,bM];a=[a0,a1,a2,,aN];可用MATLAB表示为y=filter(b,a,x)x表示输入序列,y表示输出序列四、离散时间系统单位脉冲响应的求解b,