1、第八章第八章 MATLAB在信号与系统中的在信号与系统中的应用应用8.1 信号8.2 线性系统的时域分析8.3 傅立叶分析8.4 离散系统的响应8.1 信号信号8.1.1 各种信号的各种信号的MATLAB实现实现1.门函数门函数又称为矩形信号,采用recpuls函数表示,其语法格式为:y=recpuls(t,width)说明:产生幅值为1,宽度为width的矩形波,t为行向量,当width省略则默认以t=0为中心width为1。【例8_1】产生宽度为1的矩形波和宽度为2的矩形信号,在如图8_1中,左子图显示的是宽度为1的矩形信号,右子图显示的是宽度为2。t=-2:0.01:2;y1=rectp
2、uls(t);%产生矩形信号,省略宽度默认为1 subplot(1,2,1)%一行两列子图的左图 plot(t,y1)axis(-2,2,0,4)%修改坐标轴范围 t=-5:0.01:5;T=2*pi;y2=rectpuls(t,T);%产生宽度为2的矩形信号 subplot(1,2,2)plot(t,y2)axis(-5,5,0,4)5.方波函数方波函数square的功能是产生方波,其语法格式为:y=square(t)说明:产生-1,1的方波,根据行向量t,产生以2为周期的方波。【例8_3】分别产生符号函数、三角波函数和方波函数波形曲线,曲线如图8_3所示。t=-10:0.001:10;y1
3、=sign(t);%产生符号函数 subplot(1,3,1)plot(t,y1)y2=tripuls(t,6);%产生三角波函数 subplot(1,3,2)plot(t,y2)subplot(1,3,3)y3=square(t);%产生方波 plot(t,y3)8.1.2 信号的基本运算信号的基本运算1.信号的相加和相乘【例8_5】用波形显示两个信号的加法sin(2t)+sin(8t)和乘法sin(2t)sin(8t),波形图如图8_6所示。t=0:0.01:1;y=sin(2*pi*t)+sin(2*pi*8*t);subplot(2,1,1)plot(t,y,t,sin(2*pi*t)
4、,t,sin(2*pi*8*t)%画三条曲线 hold on plot(t,sin(2*pi*t)+1,b:)%画上包络线 plot(t,sin(2*pi*t)-1,b:)%画下包络线 subplot(2,1,2)plot(t,-sin(2*pi*t),b:)%画下包络线 y1=sin(2*pi*t).*sin(2*pi*8*t);hold on plot(t,y1,t,sin(2*pi*t),t,sin(2*pi*8*t)%画三条曲线2.信号的反褶、尺度变换和平移【例8_6】将三角波信号f(t)进行运算,变换成f1(t)=f(3t-2),曲线转换过程如图8_7所示。t=-3:0.001:3;
5、f=tripuls(t,4,0.5);%产生三角波f(t)hold on subplot(3,1,1)plot(t,f);subplot(3,1,2)f0=tripuls(3*t,4,0.5);%产生尺度变换三角波f(3t)plot(t,f0)subplot(3,1,3)f1=tripuls(3*t-2,4,0.5);%产生尺度变换三角波f(3t-2)plot(t,f1)8.2线性系统的时域分析8.2.1 线性时不变系统的线性时不变系统的零输入响应零输入响应线性时不变系统的零输入响应计算步骤:(1)根据特征方程解方程的齐次解;(2)计算待定系数AMATLAB提供了vander函数,用来产生范德
6、孟德矩阵,其语法格式为:A=vander(v)说明:产生范德孟德矩阵,每列按v的升幂排列,v是列向量,A矩阵的元素为A(i,j)=v(i)(n-j)。【例8_7】已知y(0)=2,y(0)=-1,描述某线性系统的微分方程为:,求解零输入响应。a=input(Input coefficient=);%输入系统参数Input denominator coefficient=1 5 6 n=length(a)-1;y0=input(Input Initial State=);%输入初始状态Input Initial State=2-1 p=roots(a)%求特征根 v=rot90(vander(p
7、);%得出范德孟德矩阵v=1 1 -3 -2 A=vy0%计算待定系数A=-3.000 5000 y=0;t=0:0.2:10;for k=1:n%绘制零输入响应曲线 y=A(k)*exp(p(k)*t)+y end0)(6)(5)(tytyty8.2.2 线性时不变系统的全线性时不变系统的全响应响应1.齐次解齐次解与特解与特解按照线性定常系统微分方程的解法可以得出:全响应=齐次解(自由响应)+特解(强迫响应)2.零输入响应零输入响应和零状态响应和零状态响应根据激励信号和系统初始状态可以得出:全响应=零输入响应+零状态响应。零输入响应是没有外加激励信号,只由起始状态(起始时刻系统储能)所产生的
8、响应,运用MATLAB求解初始值为零的微分方程;零状态响应是不考虑起始时刻系统储能的作用(起始状态等于零),由系统外加激励信号所产生的响应,运用MATLAB求解为零的微分方程。【例8_8】已知y(0)=2,y(0)=-1,f(t)=e-t,描述某线性系统的微分方程为:。求该系统的零输入响应、零状态响应、自由响应、强迫响应和全响应。yt=dsolve(D2y+5*Dy+6*y=2*exp(-t)%非齐次方程通解yt=exp(-t)+C2*exp(-2*t)+C3*exp(-3*t)C2=0;C3=0;ypt=subs(yt)%特解即强迫响应yt=exp(-t)y=dsolve(D2y+5*Dy+
9、6*y=2*exp(-t),y(0)=2,Dy(0)=-1)%系统的全响应y=exp(-t)+3*exp(-2*t)-2*exp(-3*t)yht=y-yptyht=3*exp(-2*t)-2*exp(-3*t)(2)(6)(5)(tftytyty yzi=dsolve(D2y+5*Dy+6*y=0,y(0)=2,Dy(0)=-1)%系统的零输入响应yzi=5*exp(-2*t)-3*exp(-3*t)yzs=dsolve(D2y+5*Dy+6*y=2*exp(-t),y(0)=0,Dy(0)=0)%系统的零状态响应yzs=exp(-t)-2*exp(-2*t)+exp(-3*t)y=yzi+
10、yzs%零状态响应+零输入响应y=1/exp(t)+3/exp(2*t)-2/exp(3*t)8.2.3 线性时不变系统的冲激响应线性时不变系统的冲激响应8.2.4用卷积计算线性时不变系统的用卷积计算线性时不变系统的时域响应时域响应【例8_10】计算两个函数f1(t)和f2(t)的卷积,其中f1(t)和f2(t)的波形图如图所示。cleardt=0.01;t=-1:dt:5;%横坐标t范围L=length(t);f1=2*rectpuls(t-0.25,3/2);%产生矩形波f1(t)subplot(3,1,1)plot(t,f1)axis(-1 5 0 3)subplot(3,1,2)f2=
11、t.*rectpuls(t-0.5,2).*(t0&tplot(t,f2)f=conv(f1,f2);%计算卷积subplot(3,1,3)tf=2*t(1):dt:2*t(L)%横坐标范围扩大一倍plot(tf,f)8.3 傅立叶分析傅立叶分析8.3.1 信号的合成信号的合成周期函数都是由三角函数的线性组合来表示,周期信号可以表示为:偶函数的傅立叶级数中不会含有正弦项b_n sin(n_1 t),只有直流项a_0和余弦项a_n cos(n_1 t)。奇函数的傅立叶级数中不会含有余弦项a_n cos(n_1 t),只可能包含正弦项b_n sin(n_1 t)。奇谐函数的傅立叶级数中只会含有基波
12、和奇次谐波的正弦项、余弦项,而不会含有偶次谐波项。方波信号可以分解成奇次正弦信号之和,方波信号如图8_13所示,可以表示为:【例例8_12】根据各次谐波合成方波信号,观察不同信号合成的结果,并使用三维曲面绘制合成的信号,各谐波叠加波形图如图所示。t=0:0.01:3*pi;subplot(2,3,1)y1=sin(t);y3=sin(3*t);plot(t,y1+1/3*y3)%1,3次谐波叠加subplot(2,3,2)y5=sin(5*t);plot(t,y1+1/3*y3+1/5*y5)%1,3,5次谐波叠加subplot(2,3,3)y7=sin(7*t);plot(t,y1+1/3*
13、y3+1/5*y5+1/7*y7)%1,3,5,7次谐波叠加subplot(2,3,4)plot(t,y1+1/5*y5+1/7*y7)%1,5,7次谐波叠加subplot(2,3,5)plot(t,y1-1/3*y3+1/5*y5+1/7*y7)%1,5,7次谐波与反相的3次谐波叠加subplot(2,3,6)mesh(t,1:4,y1;y1+1/3*y3;y1+1/3*y3+1/5*y5;y1+1/3*y3+1/5*y5+1/7*y7)8.2.2 信号的傅立叶信号的傅立叶变换变换【例8_13】矩形信号的傅立叶变换是抽样函数,矩形信号为:y(t)=Eu(t+/2)-u(t+/2)其傅立叶表达
14、式为F()=ESa(/2),矩形信号与抽样函数的波形如图8_15(a)和(b)所示。Sa(/2)=(sin(/2)/(/2)=(2sin(/2)/syms t tao y Ey=E*(heaviside(t+tao/2)-heaviside(t-tao/2);%矩形信号F=fourier(y)%傅立叶变换F=E*(cos(tao*w)/2)*i+sin(tao*w)/2)/w-(cos(tao*w)/2)*i-sin(tao*w)/2)/w)F=simple(F)%简化表达式F=(2*E*sin(tao*w)/2)/wF=subs(F,tao,2);%将tao用2代替F=subs(F,E,1)
15、%将E用1代替F=(2*sin(w)/w8.2.3 周期信号的傅立叶级数周期信号的傅立叶级数周期信号的傅立叶级数可以用指数形式来表示,其幅度谱和相位谱是相对于纵轴左右对称的。【例例8_14】绘制一个对称方波的三角函数频谱,已知其周期T=1,幅值E=1,方波信号的时域图如图8_17(a)所示。T=1;E=1;w1=2*pi/T;N=1000;t=linspace(-T/2,T/2-T/N,N);f=-E/2*ones(1,N);f(t-T/4&t n=10;k=-n:n;%取21个点 F=1/N*exp(-j*kron(k*w1,t.)*f;%计算F stem(k,F)%绘制离散火柴杆图8.4
16、离散系统的离散系统的响应响应1.求解求解差分方程差分方程MATLAB中解差分方程使用filter函数。filter函数用来求解由差分方程表示的离散系统的响应,在信号处理工具箱中,可以对实数输入和复数输入计算。其语法格式为:Y,Zf=filter(B,A,X,Zi)%对输入X进行滤波得出Y说明:B和A分别是系统的参数,X是输入信号,Zi表示输入的初始和终止条件,Zf表示滤波器延时的终止条件。如果X是向量,则Zf是长度为max(length(A),length(B)-1的列向量。2.求离散系统的响应离散系统的单位脉冲响应使用impz函数,单位阶跃响应使用stepz函数。由系统的差分方程来求解离散系
17、统的单位脉冲响应,在MATLAB中可以由信号处理工具箱提供的impz函数直接计算。其语法格式为:H,T=impz(B,A,N)说明:H是脉冲输出响应,T是相关的时间点,B和A是差分方程的参数,N是采样点;当N是向量时,在采样点计算输出值。MATLAB中求离散系统的单位阶跃响应采用函数stepz,语法格式如下:H,T=stepz(B,A,N)【例8_16】求离散系统的单位脉冲响应和单位阶跃响应,输出响应如图8_21所示,离散系统的差分方程如下:y(k)+2y(k-1)-y(k-2)=f(k)a=1 2-1;%等式左边的参数降幂排列 b=1;%等式右边的参数降幂排列 k=0:10;%采样点10个
18、h=impz(b,a,k)%脉冲输出响应h=1 -2 5 -12 29 -70 169 -408 985 -2378 5741 stem(k,h)figure(2)stepz(b,a)%绘制单位阶跃响应4.计算离散卷积离散卷积可以用来计算系统的零状态响应。在MATLAB中,连续和离散的卷积运算都是conv函数。【例8_17】已知序列x(k)=1,2,3,4;k=0,1,2,3,y(k)=1,1,1,1,1;k=0,1,2,3,4,计算x(k)*y(k)并画出卷积结果,其卷积运算结果如图8-22所示。x=1,2,3,4;y=1,1,1,1,1;z=conv(x,y)%求卷积 n=length(z);stem(1:n,z)%画出火柴杆图