——连续时间信号与系统MATLAB基础2课程安排MATLAB简介连续时间信号与系统离散时间信号与系统MATLAB实验内容连续时间系统的时域分析傅里叶变换拉普拉斯变换、s域分析4内容连续时间系统的时域分析1零输入响应与零状态响应微分方程式的建立与求解冲激响应与阶跃响应微分方程式的建立与求解•连续时间系统的研究方法包括输入-输出法(端口描述法)系统状态变量分析法•输入-输出法LTI系统可以用一元高阶微分方程描述a=[1,7,0,12];b=1;%定义微分方程的行矢量sys=tf(b,a)%生成系统描述sys(tf=transferfunction)6微分方程式的建立与求解•状态变量描述法一个一元高阶微分方程,必然可以化成两个多元一阶微分方程组,即状态方程和输出方程(观测方程)sys=ss(A,B,C,D)%ss=statespace,ABCD为状态方程和输出方程的矩阵7微分方程式的建立与求解•微分方程的解包括齐次解和特解两部分•齐次解即系统特征方程的根,用roots函数计算p=[171612];%定义多项式pa=roots(p);%求解多项式p=0的根aa%打印显示a=-3.0000-2.0000+0.0000i-2.0000-0.0000i8微分方程式的建立与求解•特解即系统(采用微分方程表示)在给定信号激励下的输出•用lsim函数进行仿真a=[1,2,3];%定义多项式pb=[1,1];%求解多项式p=0的根asys=tf(b,a);%建立系统描述syst=[0:0.1:10]’;%定义仿真时间为0s到10s,抽样间隔为0.1se1=t.^2’;%定义激励信号e1r1=lsim(sys,e1,t);%用e1激励sys,输出为r1e2=exp(t);…9微分方程式的建立与求解10微分方程式的建立与求解•Helppolyfunroots-Findpolynomialroots.poly-Convertrootstopolynomial.polyval-Evaluatepolynomial.polyvalm-Evaluatepolynomialwithmatrixargument.residue-Partial-fractionexpansion(residues).polyfit-Fitpolynomialtodata.polyder-Differentiatepolynomial.polyint-Integratepolynomialanalytically.conv-Multiplypolynomials.deconv-Dividepolynomials.11零输入响应和零状态响应•lsim函数还可以对带有非零起始状态的LTI系统进行仿真y=lsim(sys,u,t,x0)•注意:若用lsim函数仿真非零起始状态响应,则该系统必须用状态方程描述(对传递函数描述的LTI系统,lsim函数无法仿真非零起始状态响应)12零输入响应和零状态响应13零输入响应和零状态响应•解:采用两种方法•第一种:首先仿真2V电压en作用足够长时间(10秒)后系统进入稳态,从而得到稳态的状态变量值x0,再以其作为起始值仿真4V电压e作用下的输出rf,即是系统的完全响应•这种方法还可以得到零状态响应rzs和零输入响应rzi•第二种:构造一个激励信号,先保持2V足够长时间再跳变为4V,然后即可以零初始状态一次仿真得到系统的完全响应r114零输入响应和零状态响应•C=1;L=1/4;R1=1;R2=3/2;%定义器件参数•a=[-1/R1/C,-1/C;1/L,-R2/L];%定义A,B,C,D四个矩阵•b=[1/R1/C;0];•c=[-1/R1,0];•d=[1/R1];•sys=ss(a,b,c,d);%建立LTI系统sys•tn=[-10:0.01:-0.01]‘;%生成-10s到-0.01s的抽样时间,间隔为0.01s•en=2*(tn0);%生成激励信号的抽样值,e(t)=2•[rntnxn]=lsim(sys,en,tn);%仿真t0时的输出信号•x0=xn(length(tn),:);%x0记录了起始状态,即0-状态的值•t=[0:0.01:10]‘;%生成从0s到10s的抽样时间,间隔为0.01s•e=4*(t=0);%生成激励信号的抽样值,e(t)=4•ezi=0*(t=0);%生成零输入信号的抽样值,e(t)=0•rzs=lsim(sys,e,t);%仿真零状态响应•rzi=lsim(sys,ezi,t,x0);%仿真零输入响应•rf=lsim(sys,e,t,x0);%仿真完全响应•r1=lsim(sys,[en;e],[tn;t]);%用另一种方法仿真完全响应15零输入响应和零状态响应16冲激响应和阶跃响应•如果分别用冲激信号和阶跃信号作激励,lsim函数可仿真出冲激响应和阶跃响应•MATLAB专门提供了impulse(sys)和step(sys)两个函数直接产生冲激响应和阶跃响应17冲激响应和阶跃响应•a=[1,7,10];•b=[1,6,4];•sys=tf(b,a);%定义LTI系统模型•t=[0:0.01:3]‘;%生成0到3s,间隔0.01s的抽样时间•h1=step(sys);%用step函数仿真sys的阶跃响应•x_step=zeros(size(t));%另一种方法:根据定义构造阶跃信号x_step•x_step(t0)=1;•x_step(t==0)=1/2;%lsim函数不支持输入NaN,所以x_step(0)=1/2•lsim(sys,x_step,t);%仿真x_step激励sys的响应•[h2,t2]=impulse(sys,t);%用impulse函数仿真sys的冲激响应并保存在h2中•x_delta=zeros(size(t));%另一种方法:根据定义构造冲激响应x_delta•x_delta(t==0)=100;%lsim函数不支持输入Inf,所以令x_delta(0)=100,因为抽样间隔是%0.01,选择100可保证数值积分为1•[y1,t]=lsim(sys,x_delta,t);%仿真x_delta激励sys的响应并保存在y1中•y2=y1-x_delta;%从响应中减去一个冲激信号得到y218冲激响应和阶跃响应冲激响应和阶跃响应求系统的响应:卷积•卷积运算的数值近似•MATLAB提供了w=conv(u,v)函数实现卷积和21求系统的响应:卷积•t=[-1:0.01:4]‘;%生成从-1s到4s,间隔0.01s的抽样时间t•e=(t-1/2&t1);%定义激励信号e•h=(t0&t2).*t/2;%定义冲激响应h•[r1,t1]=conv1(e,t,h,t);%用卷积计算系统输出r1,相应的抽样时间为t1•tr=t1(t1=-1&t1=4);%从t1中选择和t相同起止时刻的抽样时间tr•r=r1(t1=-1&t1=4);%用类似方法选择tr对应的输出r•function[w,tw]=conv1(u,tu,v,tv)•%输入参数:u和v表示两个序列,tu和tv分别表示它们的抽样时间•%返回值:w和wt分别表示卷积结果及其抽样时间•T=tu(2)-tu(1);•w=T*conv(u,v);•tw=tu(1)+tv(1)+T*[0:length(u)+length(v)-2]';22求系统的响应:卷积求系统的响应:连续时间信号的数值计算•自然界中绝大部分物理量是连续的,数字计算机处理连续信号必须做近似,计算精度取决于算法和数字表示的位数•例如积分运算的简单数值计算方法是分段求和•复杂数值计算方法包括插值、拟合等等•helpinterp,resample,polyfit,…24连续时间系统的时域分析傅里叶变换拉普拉斯变换、s域分析内容25内容傅里叶变换2周期信号的傅里叶级数分析傅里叶变换卷积特性(卷积定理)傅里叶变换•符号方法MATLAB提供符号函数fourier和ifourier实现傅里叶变换和逆变换symst%定义符号tF1=fourier(t*heavisde(t))%计算tu(t)的傅里叶变换F1输出:F1=i*(pi*dirac(1,w)*w^2+i)/w^2%dirac(1,w)表示δ’(ω)F2=fourier(sin(t))输出:F2=i*pi*(dirac(w+1)-dirac(w-1))%dirac(w+1)表示δ(ω+1)工程应用中经常需要对抽样数据做傅里叶分析,这种情况下往往无法得到信号的解析表达式,因而数值计算方法是应用傅里叶变换的主要途径27傅里叶变换•将傅里叶变换写成离散表示形式Ω=ω2-ω1Δω=Ω/K•同理写出逆变换28傅里叶变换•三种方法二重循环循环+矢量相乘矩阵相乘29傅里叶变换•二重循环T=2;%定义时域抽样区间长度N=200;%定义时域抽样点数t=linspace(-T/2,T/2-T/N,N)‘;%定义时域抽样点f=(t-1/2&t1/2);%初始化时域信号OMG=16*pi;%定义频域抽样区间长度K=100;%定义频域抽样点数omg=linspace(-OMG/2,OMG/2-OMG/K,K)‘;%定义频域抽样点F=zeros(size(omg));%初始化频谱fork=1:K%循环计算每个频谱抽样点的频谱forn=1:N%用循环实现公式F(k)=F(k)+T/N*f(n)*exp(-j*omg(k)*t(n));endendfs=zeros(size(t));%初始化合成信号forn=1:N%循环计算每个时域抽样点的合成信号fork=1:K%用循环实现公式fs(n)=fs(n)+OMG/2/pi/K*F(k)*exp(j*omg(k)*t(n));endend30傅里叶变换傅里叶变换•矢量计算法32傅里叶变换•矩阵相乘法33傅里叶变换:程序优化技巧•程序优化技巧用矩阵运算代替循环变量预定义•举例:计算sin(n),n=1,2,…,10^6forn=1:1e6x(n)=sin(n);endx=zeros(1e6,1);x=sin([1:1e6]);•时间函数helptimefun34周期信号的傅里叶级数分析•和傅里叶变换的数值计算方法相似35周期信号的傅里叶级数分析36卷积特性(卷积定理)•验证卷积定理:时域卷积对应于频域相乘•可用两种方法计算三角脉冲的频谱一是直接对三角脉冲做傅里叶变换二是利用卷积定理,矩形脉冲的卷积是三角脉冲,所以可以先计算矩形脉冲的频谱,再取其平方将两种计算结果绘制在一起,验证卷积定理的正确性37卷积特性(卷积定理)38卷积特性:提高函数的稳定性•考察MATLAB库函数openconvopenpolyfitfunctionc=conv(a,b)na=length(a);nb=length(b);ifna~=numel(a)||nb~=numel(b)error('MATLAB:conv:AorBNotVector','AandBmustbevectors.');endifnanb[c,zf]=filter(b,1,a);ifnb1c(na+1:na+nb-1)=zf;endelse[c,zf]=filter(a,1,b);ifna1c(nb+1:na+nb-1)=zf;endend39内容连续时间系统的时域分析傅里叶变换拉普拉斯变换、s域分析40内容拉普拉斯变换、s域分析3系统函数H(s)拉普拉斯变换和逆变换由系统函数分析时频特性拉普拉斯变换和逆变换•用符号函数laplace和ilaplace实现(单边)拉氏变换和逆变换symstw%定义符号symss;F1=laplace(t^3)%计算拉氏变换F1f=ilaplace(10*(s+2)*(s+5)/s输出:F1=6/s^4/(s+1)/(s+3))F2=laplace(sin(w*t))%计算拉氏变换F2输出:f=