第四章信号与系统的MATLAB仿真信号与系统的MATLAB仿真•4.1信号时域分析•4.2线性系统时域分析•4.3信号与系统的频域分析4.1信号时域分析•4.1.1常用信号的MATLAB表示•4.1.2信号运算•连续信号是指自变量的取值范围是连续的,且对于一切自变量的取值,除了有若干个不连续点之外,信号都有确定的值与之对应。严格来说,MATLAB并不能处理连续信号,而是用等时间间隔点的样值来近似表示连续信号。当取样时间间隔足够小时,这些离散的样值就能较好地近似连续信号。•因此,在MATLAB中,无论是连续时间信号还是离散时间信号,MATLAB都是用一个数字序列来表示信号,这个数字序列在MATLAB中叫做向量(vector)。通常的情况下,需要与时间变量相对应。•在MATLAB可视化绘图中,对于以t为自变量的连续信号,在绘图时统一用plot函数;而对n为自变量的离散序列,在绘图时统一用stem函数。一、几种常用信号的表示1.单位冲击函数、序列 0100)(nnn 其它1dt)(0)(00tt单位冲激函数、单位冲激序列•t=-5:0.01:5;y=(t==0);subplot(1,2,1);plot(t,y,'r');n=-5:5;x=(n==0);subplot(1,2,2);stem(n,x);2.单位阶跃函数、序列10()00nunn(一)几种常用信号的表示10()00ttt单位阶跃函数、单位阶跃序列•t=-5:0.01:5;•y=(t=0);•subplot(1,2,1);•plot(t,y,'r')•n=-5:5;x=(n=0);subplot(1,2,2);stem(n,x);3.实指数序列nanx)(nRa直接实现:n=[ns:nf];x=a.^n;4.复指数序列njenx)()(直接实现:n=[ns:nf];x=exp((sigema+jw)*n);5.正(余)弦序列)cos()(nnx直接实现:n=[ns:nf];x=cos(w*n+sita);生成上述三种信号•t=-5:0.01:5;•subplot(2,2,1);•a=2•y1=2.^t•plot(t,y1,'r')•subplot(2,2,2);•a=2;•theat=pi/3;•y2=sin(2*pi*t+theat)•plot(t,y2)•subplot(2,1,2);•w=4;•y3=exp((a+j*w)*t);•plot(t,y3,‘y')工具箱中的信号产生函数函数名功能函数名功能sawtooth产生锯齿波或三角波信号pulstran产生冲激串square产生方波信号rectpule产生非周期的方波信号sinc产生sinc函数波形tripuls产生非周期的三角波信号chirp产生调频余弦信号diric产生Dirichlet或周期sinc函数gauspuls产生高斯正弦脉冲信号gmonopuls产生高斯单脉冲信号vco电压控制振荡器1、sawtooth函数产生锯齿波或三角波例:产生f=50Hz的锯齿波、三角波Fs=10000;%采样频率t=0:1/Fs:0.1;%采样间隔1/Fsf=50;%50Hzx1=sawtooth(2*pi*50*t,0);x2=sawtooth(2*pi*50*t,1);x3=sawtooth(2*pi*50*t,0.5);subplot(311);plot(t,x1);subplot(312);plot(t,x2);subplot(313);plot(t,x3);2、square函数产生矩形波例:产生50Hz占空比分别为20%和50%的矩形波。Fs=10000;%采样频率t=0:1/Fs:0.1;%采样间隔1/Fsf=50;%50Hzx1=square(2*pi*50*t,20);x2=square(2*pi*50*t,50);subplot(211);plot(t,x1);subplot(212);plot(t,x2);3、sinc函数产生sinc波形或sin(πt)/(πt)波形例:t=linspace(-10,+10,200);x=sinc(t);plot(t,x);10sinc()sin()0ttttt4.1.2信号运算1信号的相加与相乘y(n)=x1(n)+x2(n)MATLAB实现:y=x1+x2y(n)=x1(n)×x2(n)MATLAB实现:y=x1+x2;y=x1.*x2•function[f,k]=sigadd(f1,k1,f2,k2)•%实现序列f1,f2的相加,相减,相乘,可据实际需要作选择•%f1,k1;f2,k2是参加运算的序列向量及其时间向量•%f,k作为返回的和(差,积)序列及其时间向量•%将f1,f2转换成等长序列s1,s2•k=min(min(k1),min(k2)):max(max(k1),max(k2));•s1=zeros(1,length(k));s2=s1;%初始化序列•s1(find((k=min(k1))&(k=max(k1))==1))=f1;•s2(find((k=min(k2))&(k=max(k2))==1))=f2;•f=s1+s2;%序列相加•%f=s1-s2;%序列相减•%f=s1.*s2;%序列相乘•stem(k,f,'fill');•axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)])2序列移位与周期延拓运算序列移位:y(n)=x(n-m)。MATLAB实现:y=x;ny=nx+m序列圆周移位:y(n)=x((n))M,MATLAB实现:ny=nxs:nxf;y=x(mod(ny,M)+1)3序列翻褶序列翻褶:y(n)=x(-n)。MATLAB可实现:y=fliplr(x)f(t+2),f(-t)、f((n-2))8f1=f;t1=t-2;subplot(2,2,2);plot(t1,f1)axis([-5502]);f2=fliplr(f);subplot(2,2,3);plot(t,f2).4两序列的卷积运算两序列卷积运算:mmnxmxnxnxny)()()()()(2121MATLAB实现:y=conv(x1,x2)。序列x1(n)和x2(n)必须长度有限。连续卷积和离散卷积的关系:•所以,可以用离散卷积和CONV()求连续卷积,只需足够小以及在卷积和的基础上乘以])[()()()()(2121kkknfkfknfkfnf两序列的相关运算两序列相关运算:nmnxnxmy)()()(21MATLAB实现:y=xcorr(x1,x2)。序列累加的数学描述为:nnisixny)()(MATLAB实现:y=cumsum(x)序列累加运算信号的能量和功率NnnxnxE0][*][102][1NnnxNP1.信号能量数字定义:MATLAB实现:E=sum(x.*conj(x));或E=sum(abs(x).^2);数字定义:2.信号功率MATLAB实现:P=sum(x.*conj(x))/N;或E=sum(abs(x).^2)/N;4.2线性系统时域分析•4.2.1线性时(移)不变系统特性•4.2.2线性时(移)不变系统表示方法•4.2.3线性时(移)不变系统的时域响应4.2.1线性时(移)不变系统特性•假设系统在输入信号x1(t)作用时的响应信号为y1(t),在输入信号x2(t)作用时的响应信号为y2(t),给定两个常数a和b,如果当输入信号为x(t)时系统的响应信号为y(t),且满足•x(t)=x1(t)+x2(t)(4-15)•y(t)=y1(t)+y2(t)(4-16)•则该系统具有叠加性(Additivity)。如果满足•x(t)=ax1(t)(4-17)•y(t)=ay1(t)(4-18)•则该系统具有齐次性(Homogeneity)。一个系统如果是线性系统的话,那么这个系统必须同时具有叠加性和齐次性。4.2.2线性时(移)不变系统表示方法1.常系数线性微分/差分方程1()()()00()()()NMNiiiiiiytaytbxt2.系统传递函数:tf11101110()()()MMMMNNNbsbsbsbYsHsXssasasaNMMMzazaazbzbbzXzYzH110110)()()(3.零-极点增益模型zpk连续系统:连续系统:1212()()()()()()()MNsqsqsqHskspspsp离散系统:1212()()()()()()()MNzqzqzqHzkzpzpzp离散系统:4.极点留数模型离散系统:连续系统:NNpsrpsrpsrsH2211)(1122111111)(zprzprzprzHNN5.二次分式模型sos20122112()1LkkkkkkbbsbsHsgasas连续系统:离散系统:1201212112()1LkkkkkkbbzbzHzgazaz6.状态空间模型ssDuCxyBuAxx'[1][][][][][]xnAxnBunynCxnDun连续系统:离散系统:系统模型的转换函数在MATLAB中,用sos、ss、tf、zp分别表示二次分式模型、状态空间模型、传递函数模型和零-极点增益模型。其中sos表示二次分式,g为比例系数,sos为L×6的矩阵,即01112111210121211LLLLLbbbaasosbbbaa(4-15)1.ss2tf函数格式:[num,den]=ss2tf(A,B,C,D,iu)功能:将指定输入量iu的线性系统(A,B,C,D)转换为传递函数模型[num,den]。2.zp2tf函数格式:[num,den]=zp2tf(z,p,k)功能:将给定系统的零-极点增益模型转换为传递函数模型,z、p、k分别为零点列向量、极点列向量和增益系数。线性系统模型的变换函数函数名功能说明函数名功能说明ss2tf状态空间模型转换为传递函数模型zp2tf零-极点增益模型转换为传递函数模型ss2zp状态空间模型转换为零-极点增益模型zp2ss零-极点增益模型转换为状态空间模型ss2sos状态空间模型转换为二次分式模型zp2sos零-极点增益模型转换为二次分式模型tf2ss传递函数模型转换为状态空间模型sos2tf二次分式模型转换为传递函数模型tf2zp传递函数模型转换为零-极点增益模型sos2zp二次分式模型转换为零-极点增益模型tf2sos传递函数模型转换为二次分式模型sos2ss二次分式模型转换为状态空间模型•一、连续系统的时域响应及MATLAB实现•二、离散时间系统的时域响应及MATLAB实现4.2.3线性时(移)不变系统的时域响应连续系统的时域响应及MATLAB实现1、impulse函数•功能:求连续系统的单位冲激响应。•impulse()函数有如下几种调用格式:•impulse(b,a):该调用格式以默认方式由向量a和b表示的连续系统在指定时间范围内的冲激响应h(t)的时域波形图,并能求出指定时间范围内冲激响应的数值解。•impulse(b,a,t):绘出系统在0~t时间范围内冲激响应的时域波形。•impulse(b,a,t1:p:t2):绘出在t1~t2时间范围内,且以时间间隔p均匀取样的冲激响应波形。•y=impulse(b,a,t1:p:t2):不绘出波形,而是求出系统冲激响应的数值解:连续系统的时域响应2、step函数功能:求连续系统的单位阶跃响应,与impulse()函数一样,也有四种调用格式。3、initial函数