北京理工大学信号与系统实验实验报告.doc
. 实验1 信号的时域描述与运算一、实验目的 1. 掌握信号的MATLAB表示及其可视化方法。 2. 掌握信号基本时域运算的MATLAB实现方法。 3. 利用MATLAB分析常用信号,加深对信号时域特性的理解。二、实验原理与方法 1. 连续时间信号的MATLAB表示连续时间信号指的是在连续时间范围内有定义的信号,即除了若干个不连续点外,在任何时刻信号都有定义。在MATLAB中连续时间信号可以用两种方法来表示,即向量表示法和符号对象表示法。从严格意义上来说,MATLAB并不能处理连续时间信号,在MATLAB中连续时间信号是用等时间间隔采样后的采样值来近似表示的,当采样间隔足够小时,这些采样值就可以很好地近似表示出连续时间信号,这种表示方法称为向量表示法。表示一个连续时间信号需要使用两个向量,其中一个向量用于表示信号的时间范围,另一个向量表示连续时间信号在该时间范围内的采样值。例如一个正弦信号可以表示如下: t=0:0.01:10; x=sin(t);利用plot(t,x)命令可以绘制上述信号的时域波形,如图1所示。如果连续时间信号可以用表达式来描述,则还可以采用符号表达式來表示信号。例如对于上述正弦信号,可以用符号对象表示如下: x=sin(t); ezplot(X);利用ezplot(x)命令可以绘制上述信号的时域波形 常用的信号产生函数 函数名 功能 函数名 功能heaviside单位阶跃函数rectpuls门函数sin正弦函数tripuls三角脉冲函数cos余弦函数square周期方波sincsinc函数sawtooth周期锯齿波或三角波exp指数函数 2.连续时间信号的时域运算 对连续时间信号的运算包括两信号相加、相乘、微分、积分,以及位移、反转、尺度变换(尺度伸缩)等。 1)相加和相乘 信号相加和相乘指两信号对应时刻的值相加和相乘,对于两个采用向量表示的可以直接使用算术运算的运算符“+”和“*”来计算,此时要求表示两信号的向量时间范围和采样间隔相同。采用符号对象表示的两个信号,可以直接根据符号对象的运算规则运算。 2)微分和积分 对于向量表示法表示的连续时间信号,可以通过数值计算的方法计算信号的微分和积分。这里微分使用差分来近似求取的,由时间向量和采样值向量表示的连续时间信号,其微分可以通过下式求得 其中表示采样间隔。MATLAB中用diff函数来计算差分。 连续时间信号的定积分可以由MATLAB的qud函数实现,调用格式为 quad (function_name,a,b)其中,function_name为被积函数名,a、b为积分区间。 对于符号对象表示的连续时间信号,MATLAB提供了diff函数和quad函数分别用于求微分和积分。 3.离散时间信号的MATLAB表示离散时间信号仅在一些离散时刻有定义。在MATLAB中离散时间信号需要使用两个向量来表示,其中一个向量用于表示离散的时间点,另一个向量表示在这些时间点上的值。例如对于如下时间信号 采用MATLAB可以表示如下: n=-3:4; x=-3 2 -1 2 1 -1 2 3; stem(n,x,filled); xlabel(n); title(x(n);Stem函数用于绘制离散时间信号波形,为了与我们表示离散时间信号的习惯相同,在绘图时一般需要添加filled选项,以绘制实心的杆状图形。上述命令绘制的信号时域波形如图3所示。 4.离散时间信号的时域运算 离散时间信号的相加相乘是将两个信号对应的时间点上的值相加或相乘,可以直接使用算术运算的运算符“+”和“*”来计算。离散时间信号的位移,则可看作是将表示时间的向量平移,而表示对应时间点上的值的向量不变。离散时间信号的反转,则可以看作是将表示时间的向量和表示对应时间点上的值的向量以零点为基准点,一纵轴为对称轴反折,向量的反折可以利用MATLAB的fliplr函数实现。三、实验内容(1) 利用MATLAB绘制下列连续时间信号波形。 MATLAB 程序如下:clear, close all, dt = 0.01; t = -2:dt:2; x = (1-exp(-0.5*t).*heaviside(t); plot(t,x) title(x(t)xlabel(t)波形图如下:MATLAB 程序如下:clear, close all, dt = 0.01; t = -4:dt:4; x = (cos(pi*t).*(heaviside(t)-heaviside(t-2); plot(t,x) title(x(t)xlabel(t)波形图如下: MATLAB 程序如下:clear, close all, dt = 0.01; t = -2:dt:2; x = (abs(t)/2).*(cos(pi*t).*(heaviside(t+2)-heaviside(t-2); plot(t,x) title(x(t)xlabel(t)波形图如下:MATLAB 程序如下:clear, close all, dt = 0.01; t = -6:dt:6; x = (exp(-1*t).*(sin(2*pi*t).*(heaviside(t)-heaviside(t-3); plot(t,x) title(x(t)xlabel(t )波形图如下:(2) 利用MATLAB绘制下列离散时间信号波形 MATLAB 程序如下:clear, close all, n = -10.9999:10.9999; x = heaviside(n-3); stem (n,x) title (xn)xlabel (n)波形图如下:MATLAB 程序如下:clear, close all, n = -10.9999:10.9999; x = (-0.5).n).*heaviside(n); stem (n,x) title (xn)xlabel (n)波形图如下:MATLAB 程序如下:clear, close all, n = -10.9999:10.9999; x = n.*(heaviside(n)-heaviside(n-5); stem (n,x) title (xn)xlabel (n)波形图如下:MATLAB 程序如下:clear, close all, n = -10.9999:10.9999; x = (sin(n*pi/2).*heaviside(n); stem (n,x) title (xn)xlabel (n)波形图如下:()利用MATLAB生成并绘制连续周期矩形波信号,要求周期为,峰值为,显示三个周期的波形。利用MATLAB 提供的square 函数来生成方波信号MATLAB 程序如下:clear, close all, t=0:0.01:6;x=square(pi*t).*3; plot(t,x);title (x(t)xlabel (t)波形图如下:(4) 已知信号,及信号,用MATLAB绘出下列信号的波形。由教材上的波形可知为一个三角波的右半部分。MATLAB 程序如下:clear, close all, t=-10:0.01:10;x1= 4.*tripuls(t,8).*heaviside(t);x2=sin(2*pi*t);x3=x1+x2;plot(t,x3);xlabel(t);title(x(t);波形图如下:MATLAB 程序如下:clear, close all, t=-10:0.01:10;x1=4.*tripuls(t,8).*heaviside(t);x2=sin(2*pi*t);x3=x1.*(x2);plot(t,x3);xlabel(t);title(x(t);波形图如下:MATLAB 程序如下:clear, close all, t=-10:0.01:10;x1=4.*tripuls(t,8).*heaviside(t);x2=4.*tripuls(t,8).*heaviside(-t);x3=x1+x2;plot(t,x3);xlabel(t);title(x(t);波形图如下:MATLAB 程序如下:clear, close all, t=-10:0.01:10;x1=4.*tripuls(t-1,8).*heaviside(t-1);x2=sin(2*pi*t);x3=x1+sin(2*pi.*(t-1);x6=x2.*(x3);plot(t,x6);xlabel(t);title(x(t);波形图如下:(5) 已知离散时间信号,用MATLAB绘出的波形。 由教材上的波形可知MATLAB 程序如下:clear, close all, n=-10.9999:10.9999;x=heaviside(n+2)+heaviside(n+1)+heaviside(n);stem(n,x);xlabel(n);title(xn);波形图如下:MATLAB 程序如下:clear, close all, n=-10.9999:10.9999;x=heaviside(-n+2)+heaviside(-n+1)+heaviside(-n);stem(n,x);xlabel(n);title(xn);波形图如下:MATLAB 程序如下:clear, close all, n=-10.9999:10.9999;x=heaviside(n+4)+heaviside(n+3)+heaviside(n+2);stem(n,x);xlabel(n);title(xn);波形图如下:MATLAB 程序如下:clear, close all, n=-10.9999:10.9999;x=heaviside(n)+heaviside(n-1)+heaviside(n-2);stem(n,x);xlabel(n);title(xn);波形图如下:(6) 用MATLAB编程绘制下列信号的时域波形,观察信号是否为周期信号?若是周期信号,周期是多少?若不是周期信号,请说明原因。MATLAB 程序如下:clear, close all, t=-10:0.01:10;x=1+cos(0.25*pi*t-pi/3)+2.*cos(0.5*pi*t-0.25*pi)+cos(2*pi*t);plot(t,x);xlabel(t);title(x(t);波形图如下:该信号是周期信号,周期为8MATLAB 程序如下: clear, close all, t=-10:0.01:10;x=sin(t)+2.*sin(pi*t);plot(t,x);xlabel(t);title(x(t);波形图如下:不是周期信号,此函数由一个周期为2和一个周期为2的函数组成,2和2没有最小公倍数,所以没有周期。MATLAB 程序如下:clear, close all, n=-10:10;x=2+3.*sin(2*n*pi/3-pi/8)stem(n,x);xlabel(n);title(xn);波形图如下: 该信号是周期信号,周期为3MATLAB 程序如下:clear, close all, n=-10:10;x=cos(n*pi/6)+sin(n*pi/3)+cos(n*pi/2)stem(n,x);xlabel(n);title(xn);波形图如下:该信号是周期信号,周期为124、 实验心得体会 此次实验让我对于MATLAB这个软件有了一定的了解,并且实实在在的体会到了MATLAB强大的功能,对于它在信号与系统方面的应用,让我对于抽象的信号有了更加直接的、直观的了解,总之,对于这个课程有点相见恨晚的感觉。实验2 LTI系统的时域分析一、实验目的掌握利用MATLAB对系统进行时域分析的方法。掌握连续时间系统零状态响应、冲激响应和阶跃响应的求解方法。掌握求解离散时间系统响应、单位抽样响应的方法。加深对卷积积分和卷积和的理解。掌握利用计算机进行卷积积分和卷积和计算的方法。二、实验原理1、连续时间系统时域分析的MATLAB实现1)连续时间系统的MATLAB表示设LTI因果系统的微分方程一般式为:则在MATLAB里,可以建立系统模型如下:b=;a=;sys=tf(b,a);2)连续时间系统的零状态响应用lsim(sys,x,t)表示求解零状态响应。3)连续时间系统的冲激响应与阶跃响应。用impulse函数来调用。2、离散时间系统时域分析的MATLAB实现1)离散时间系统的MATLAB表示。LTI离散系统通常可以由系统差分方程描述;则在MATLAB里,可以建立系统模型如下:b=;a=;2)离散时间系统对任意输入的响应。用filter(b,a,x)函数调用。3)离散时间系统的单位抽样响应。用impz函数来调用。3、卷积和与卷积积分1)离散时间序列的卷积和:调用格式为x=conv(x1,x2);2)连续时间信号的卷积积分连续时间信号x1(t)和x2(t)的卷积积分x(t)定义如下三、实验内容1. 采用MATLAB绘出各系统的单位冲激响应和单位阶跃响应波形。(3)程序如下:clear,close all,num=1;den=1 20.5 1;t=0:0.01:10;sys=tf(1,1 20.5 1);x0=0 0;subplot(211);impulse(sys);subplot(212);step(sys);程序运行结果如下:(4)程序如下:clear,close all,num=1 0 0;den=1 20.5 1;t=0:0.01:10;sys=tf(1 0 0,1 20.5 1);x0=0 0;subplot(211);impulse(sys);subplot(212);step(sys);程序运行结果如下:(5)程序如下:clear,close all,num=1 0;den=1 1 1;t=0:0.01:10;sys=tf(1 0,1 1 1);x0=0 0;subplot(211);impulse(sys);subplot(212);step(sys);程序运行结果如下:(6)程序如下:clear,close all,num=1 0 1;den=1 1 1;t=0:0.01:10;sys=tf(1 0 1,1 1 1);x0=0 0;subplot(211);impulse(sys);subplot(212);step(sys);程序运行结果如下:(5) 已知某系统可以由如下微分方程描述(1) 利用MATLAB绘出该系统冲激响应和阶跃响应的时域波形。程序如下:clear,close all,num=1;den=1 1 6;t=0:0.01:10;sys=tf(1,1 1 6);x0=0 0;subplot(211);impulse(sys);subplot(212);step(sys);程序运行结果如下:(2) 根据冲激响应的时域波形分析系统的稳定性观察输出的波形,当t 趋向于无穷大时,y(t)趋于0,所以该系统是稳定的(7) 如果系统的输入为,求系统的零状态响应。程序如下:clear,close all,num=1;den=1 1 6;t=0:0.01:10;u=exp(-t);x=u;sys=tf(1,1 1 6);%x0=0 0;y,t,x=lsim(sys,u,t,x0)plot(t,y,t,u);title(y(t);程序运行结果如下:) 已知描述离散系统的微分方程如下,用MATLAB绘出各系统的单位抽样响应,根据单位抽样响应的时域波形分析系统的稳定性。(1)程序如下:clear,close all,num=1;den=1 3 2;impz(num, den, 0:12);程序运行结果如下:系统的稳定性观察输出的波形,当n 趋向于无穷大时,y(n)越来越大,所以该系统是不稳定的(2)程序如下:clear,close all,num=1 -3;den=1 -0.5 0.8;impz(num, den, 0:12);程序运行结果如下:系统的稳定性观察输出的波形,当n 趋向于无穷大时,y(n)越来越小,所以该系统是稳定的4.已知系统可以由如下差分方程描述程序如下:clear,close all,num=1;den=1 1 0.25;subplot(211);impz(num, den, 0:12);subplot(212);stepz(num, den, 0:12);程序运行结果如下:5. 用MATLAB计算如下两个序列的卷积,并绘出图形。程序如下:clear,close all,n=-3:4;x1=1 2 1 1;x2=1 1 1 1 1;x=conv(x1,x2);stem(n,x);title (xn)xlabel (Time index n)程序运行结果如下:6. 已知某LTI离散系统,其单位抽样响应,系统的输入为,计算当n=0,1,2,40时系统的零状态响应y(n),绘出x(n),h(n)和y(n)时域波形。程序如下:clear,close all,n=0:40;x=sin(0.2*n);h=sin(0.5*n);y=conv(x,h);subplot(311);stem(n,x);xlabel(n);title(xn);subplot(312);stem(n,h);xlabel(n)title(hn)subplot(313);n=0:80;stem(n,y);xlabel(n);title(yn);程序运行结果如下:7. 已知两个连续时间信号,求两个信号的卷积。程序如下:自定义阶跃函数:function y = u(t)y = (t=0);主函数:clear;close all;t0 = -3;t1 = 3;dt = 0.01;t = t0:dt:t1;x1 = 2*u(t+1)-2*u(t-1);x2 = u(t+2)-u(t-2);y = dt*conv(x1,x2);subplot(221);plot(t,x1), grid on, title(Signal x1(t)subplot(222);plot(t,x2), grid on, title(Signal x2(t)subplot(212);t = 2*t0:dt:2*t1;plot(t,y), grid on, title(The convolution of x1(t) and x2(t);xlabel(Time t sec);程序运行结果如下:四体会和建议LTI系统零状态响应、冲激响应和阶跃响应在之前信号与系统课程的学习中,需要比较麻烦的计算才能得到,但是,对于MATLAB来说真可谓小菜一碟,挺简单的几行代码就可以轻松地求出响应的的图像,非常直观。对于卷积积分和卷积和,在上信号与系统课的时候,感觉十分头疼,繁琐的计算不仅费时间,一不小心就有可能出错,MATLAB在这方面的应用既准确又方便。此次实验中MATLAB的强大功能可谓是惊艳,让我对于这个软件和信号与系统课程有了极大的兴趣。 实验3 信号频域分析1、 实验目的 1.深入理解信号频谱的概念,掌握信号的频域分析方法。 2.观察典型周期信号和非周期信号的频谱,掌握其频谱特性。2、 实验原理与方法 1.连续周期信号的频谱分析如果周期信号满足狄里赫利条件,就可以展开为傅里叶级数形式,即 式中,表示基波周期,为基波频率,表示任一个基波周期内的积分。式(1)和式(2)定义为周期信号复指数形式的傅里叶级数,系数称为的傅里叶系数。周期信号的傅里叶级数还可以由三角函数的线性组合来表示,即 式(3)中同频率的正弦项和余弦项可以合并,从而得到三角函数形式的傅里叶级数,即 可见,任何满足狄里赫利条件的周期信号都可以表示成一组谐波关系的复指数函数或三角函数的叠加。一般来说周期信号表示为傅里叶级数时需要无限多项才能完全逼近原信号,但在实际应用中经常采用有限项级数来替代,所选项数越多就越逼近原信号。2.连续非周期信号的频谱分析对于非周期连续时间信号,吸纳后的傅里叶变换和傅里叶逆变换定义为 式(7)和式(8)把信号的时域特性和频域特性联系起来,确立了非周期信号和频谱之间的关系。采用MATLAB可以方便地求取非周期连续时间信号的傅里叶变换,这里我们介绍常用的集中方法。1) 符号运算法MATLAB的符号数学工具箱提供了直接求解傅里叶变换和反变换的函数,fourier函数和ifourier函数,基本调用格式为 X=fourier(x) X=ifourier(X)默认的时域变量为t,频域变量为w。2) 数值积分法除了采用符号运算的方法外,我们还可以利用MATLAB的quad函数,采用数值积分的方法来进行连续信号的频谱分析,quad函数是一个用来计算数值积分的函数。利用quad函数可以计算非周期连续时间信号的频谱。Quad函数的一般调用格式为:y=quad(fun,a,b)y=quad(fun,a,b,TOL,TRACE,p1,p2,)其中fun指定被积函数,可以采用inline命令来创建,也可以通过传递函数句柄的形式来指定,a、b表示定积分的下限和上限,TOL表示允许的相对或绝对积分误差,TRACE表示以被积函数的点绘图形式来跟踪该函数的返回值,如果TOL和TRACE为空矩阵,则使用缺省值,“p1,p2,”表示被积函数出时间t之外所需的其他额外输入参数。3)数值近似法我们还可以利用MATLAB的数值计算的方法近似计算连续时间傅里叶变换。傅里叶变换可以由式(9)近似计算 当为时限信号,且足够小,式(9)可以演变为 而式(10)中求和部分又可以表示成一个行向量和一个列向量的乘积式(11)可以很方便地利用MATLAB实现。3.离散周期时间信号的频域分析基波周期为N的周期序列可以用N个成谐波关系的复指数序列的加权和表示,即 这里k=表示求和仅需包括一个周期内的N项,周期序列在一个周期内的求和与起点无关。将周期序列表示成式(12)的形式,成为离散傅里叶级数,而系数则称为离散傅里叶系数。离散傅里叶系数可以由式(13)确定。 傅里叶系数也称为的频谱系数,而且可以证明是以N为周期的离散频率序列。这说明了周期的离散时间函数对应于频域为周期的离散频率。这里,我们用周期N与傅里叶系数的乘积来表示周期离散时间信号的频谱,即 可以利用MATLAB提供的函数fft用来计算,调用格式为 该函数返回一个周期内的值,其中x表示一个周期内的样本值。4.离散非周期时间信号的频域分析非周期序列可以表示成一组复指数序列的连续和 其中 式(16)称为的离散时间傅里叶变换,式(15)和式(16)确立了非周期离散时间信号及其离散时间傅里叶变换之间的关系。是连续频率的函数,称为频谱函数,且是周期的连续频率函数,其周期为。可见,非周期离散时间函数对应于频域中是一个连续的周期的频率函数。对于有限长的时间序列,式(16)可以表示为式(17)可以方便地利用MATLAB实现。三、实验内容(1)已知周期矩形脉冲信号。教材上的波形可知信号由式(3)和式(4)计算得 故的傅里叶级数为 利用MATLAB绘出由前N次谐波合成的信号波形,观察随着N的变化合成信号波形的变化规律;MATLAB程序如下: N_start = input(Please input start of the number N:n); N_end = input(Please input end of the number N:n);step = input(Please input step of the number N:n);N = N_start:step:N_end;A = 1;T = 2*pi;ta = T/2;syms x t;for i = 1:(length(N)x = A*ta/T;for k = 1:N(i)x = x + 2/(k*pi)*sin(k*pi*ta/T)*cos(2*pi*k*t/T); endif mod(i,4) = 1figure; flag = 1;endsubplot(2,2,flag);ezplot(x);str_title = N = ,sprintf(%d,N(i); %Just a titletitle(str_title);grid on;flag = flag + 1;end程序执行结果: 由述4个波形图可知,随着N的增大即选取的傅里叶级数的项数增加,合成波形越来越接近原来的矩形脉冲信号。利用MATLAB绘出周期矩形脉冲信号的频谱,观察参数T和变化时对频谱波形的影响。由式(1)和式(2)计算得 MATLAB程序如下:clear,close all,N=input(N=);A=input(A=);T=input(T=);i=input(c=);n1=-N:-1;c1=A./n1./pi.*sin(n1.*pi.*i./T);c0=A.*i./T;n2=1:N;c2=A./n2./pi.*sin(n2.*pi.*i./T);cn=c1 c0 c2;n=-N:N;subplot(211);stem(n,abs(cn),filled);xlabel(w/w0);title(Magnitude);subplot(212);stem(n,angle(cn),filled);xlabel(w/w0);title(Phase);程序执行结果:输入:N=18,A=3,T=3,c=1输入:N=18,A=3,T=3,c=0.1输入:N=18,A=3,T=3,c=0.5输入:N=18,A=3,T=5,c=1输入:N=18,A=3,T=10,c=1由程序执行结果可知,频谱波形与的值有关,对于不同的T和,当比值相同时频谱波形图相同;当比值不同时,比值越小,频谱包络形状趋于收敛,过零点越少,谱线越密。思考题:1)将具有不连续点的周期函数(如矩形脉冲)进行傅立叶级数展开后,选取有限项进行合成。当选取的项数越多,在所合成的波形中出现的峰起越靠近原信号的不连续点。当选取的项数很大时,该峰起值趋于一个常数,大约等于总跳变值的9%。这种现象称为吉伯斯现象。原因:当一个信号通过某一系统时,如果这个信号不是连续时间函数,则由于一般物理系统对信号高频分量都有衰减作用,从而产生吉伯斯现象。2)周期信号的频谱是具有周期性的一系列的脉冲信号,谱线间隔为 ,谱线的长度随着谐波次数的增高趋于收敛。3)有效频宽与信号的时域宽度成反比4) 比值越小,频谱包络形状趋于收敛,过零点越少,谱线越密。(2)已知矩形脉冲信号。求该信号的傅里叶变换由教材上的波形可知用MATLAB函数库里的fourier函数来求的傅里叶变换MATLAB程序如下:syms t;A=input(A=);c=input(c=);x=A*heaviside(t+c/2)-heaviside(t-c/2); %x(t)X=fourier(x) collect(X) 当A=1;=1;ans = (2*sin(w/2)/w=Asinc(/2)所以的傅里叶变换为利用MATLAB绘出矩形脉冲信号的频谱,观察矩形脉冲宽度变化时对频谱波形的影响。MATLAB程序如下:clear,close all,syms t wm = input(=);X = int(exp(-j*w*t),t,-m/2,m/2);ezplot(X,-6*pi,6*pi);xlabel(w);ylabel(Magnitude);title(X(w) = num2str(m);当=1,当=4当=6当=10由以上4个频谱波形图可知,当矩形脉冲宽度增大时,信号占有频带减小,即信号的占有频带与脉冲宽度成反比。让矩形脉冲的面积始终等于1,改变矩形脉冲宽度,观察矩形脉冲信号时域波形和频谱随矩形脉冲宽度的变化趋势。MATLAB程序如下:syms wB=input(B=);A=1;x=(2*A/w)*sin(w*(B/2);ezplot(abs(x),-6*pi,6*pi);grid on;xlabel(omega);ylabel(Magnitude);title(|x(omega)|);波形图如下:
收藏
- 资源描述:
-
.\
实验1 信号的时域描述与运算
一、实验目的
1. 掌握信号的MATLAB表示及其可视化方法。
2. 掌握信号基本时域运算的MATLAB实现方法。
3. 利用MATLAB分析常用信号,加深对信号时域特性的理解。
二、实验原理与方法
1. 连续时间信号的MATLAB表示
连续时间信号指的是在连续时间范围内有定义的信号,即除了若干个不连续点外,在任何时刻信号都有定义。在MATLAB中连续时间信号可以用两种方法来表示,即向量表示法和符号对象表示法。
从严格意义上来说,MATLAB并不能处理连续时间信号,在MATLAB中连续时间信号是用等时间间隔采样后的采样值来近似表示的,当采样间隔足够小时,这些采样值就可以很好地近似表示出连续时间信号,这种表示方法称为向量表示法。表示一个连续时间信号需要使用两个向量,其中一个向量用于表示信号的时间范围,另一个向量表示连续时间信号在该时间范围内的采样值。例如一个正弦信号可以表示如下:
>> t=0:0.01:10;
>> x=sin(t);
利用plot(t,x)命令可以绘制上述信号的时域波形,如图1所示。
如果连续时间信号可以用表达式来描述,则还可以采用符号表达式來表示信号。例如对于上述正弦信号,可以用符号对象表示如下:
>> x=sin(t);
>> ezplot(X);
利用ezplot(x)命令可以绘制上述信号的时域波形
常用的信号产生函数
函数名
功能
函数名
功能
heaviside
单位阶跃函数
rectpuls
门函数
sin
正弦函数
tripuls
三角脉冲函数
cos
余弦函数
square
周期方波
sinc
sinc函数
sawtooth
周期锯齿波或三角波
exp
指数函数
2.连续时间信号的时域运算
对连续时间信号的运算包括两信号相加、相乘、微分、积分,以及位移、反转、尺度变换(尺度伸缩)等。
1)相加和相乘
信号相加和相乘指两信号对应时刻的值相加和相乘,对于两个采用向量表示的可以直接使用算术运算的运算符“+”和“*”来计算,此时要求表示两信号的向量时间范围和采样间隔相同。采用符号对象表示的两个信号,可以直接根据符号对象的运算规则运算。
2)微分和积分
对于向量表示法表示的连续时间信号,可以通过数值计算的方法计算信号的微分和积分。这里微分使用差分来近似求取的,由时间向量[]和采样值向量[]表示的连续时间信号,其微分可以通过下式求得
其中表示采样间隔。MATLAB中用diff函数来计算差分。
连续时间信号的定积分可以由MATLAB的qud函数实现,调用格式为
quad (function_name,a,b)
其中,function_name为被积函数名,a、b为积分区间。
对于符号对象表示的连续时间信号,MATLAB提供了diff函数和quad函数分别用于求微分和积分。
3.离散时间信号的MATLAB表示
离散时间信号仅在一些离散时刻有定义。在MATLAB中离散时间信号需要使用两个向量来表示,其中一个向量用于表示离散的时间点,另一个向量表示在这些时间点上的值。例如对于如下时间信号
采用MATLAB可以表示如下:
>> n=-3:4;
>> x=[-3 2 -1 2 1 -1 2 3];
>> stem(n,x,filled);
>> xlabel(n);
>> title(x(n));
Stem函数用于绘制离散时间信号波形,为了与我们表示离散时间信号的习惯相同,在绘图时一般需要添加‘filled’选项,以绘制实心的杆状图形。上述命令绘制的信号时域波形如图3所示。
4.离散时间信号的时域运算
离散时间信号的相加相乘是将两个信号对应的时间点上的值相加或相乘,可以直接使用算术运算的运算符“+”和“*”来计算。
离散时间信号的位移,则可看作是将表示时间的向量平移,而表示对应时间点上的值的向量不变。
离散时间信号的反转,则可以看作是将表示时间的向量和表示对应时间点上的值的向量以零点为基准点,一纵轴为对称轴反折,向量的反折可以利用MATLAB的fliplr函数实现。
三、实验内容
(1) 利用MATLAB绘制下列连续时间信号波形。
MATLAB 程序如下:
clear,
close all,
dt = 0.01;
t = -2:dt:2;
x = (1-exp(-0.5*t)).*heaviside(t);
plot(t,x)
title(x(t))
xlabel(t)
波形图如下:
MATLAB 程序如下:
clear,
close all,
dt = 0.01;
t = -4:dt:4;
x = (cos(pi*t)).*(heaviside(t)-heaviside(t-2));
plot(t,x)
title(x(t))
xlabel(t)
波形图如下:
MATLAB 程序如下:
clear,
close all,
dt = 0.01;
t = -2:dt:2;
x = (abs(t)/2).*(cos(pi*t)).*(heaviside(t+2)-heaviside(t-2));
plot(t,x)
title(x(t))
xlabel(t)
波形图如下:
MATLAB 程序如下:
clear,
close all,
dt = 0.01;
t = -6:dt:6;
x = (exp(-1*t)).*(sin(2*pi*t)).*(heaviside(t)-heaviside(t-3));
plot(t,x)
title(x(t))
xlabel(t )
波形图如下:
(2) 利用MATLAB绘制下列离散时间信号波形
MATLAB 程序如下:
clear,
close all,
n = -10.9999:10.9999;
x = heaviside(n-3);
stem (n,x)
title (x[n])
xlabel (n)
波形图如下:
MATLAB 程序如下:
clear,
close all,
n = -10.9999:10.9999;
x = ((-0.5).^n).*heaviside(n);
stem (n,x)
title (x[n])
xlabel (n)
波形图如下:
MATLAB 程序如下:
clear,
close all,
n = -10.9999:10.9999;
x = n.*(heaviside(n)-heaviside(n-5));
stem (n,x)
title (x[n])
xlabel (n)
波形图如下:
MATLAB 程序如下:
clear,
close all,
n = -10.9999:10.9999;
x = (sin(n*pi/2)).*heaviside(n);
stem (n,x)
title (x[n])
xlabel (n)
波形图如下:
(3)利用MATLAB生成并绘制连续周期矩形波信号,要求周期为2,峰值为3,显示三个周期的波形。
利用MATLAB 提供的square 函数来生成方波信号
MATLAB 程序如下:
clear,
close all,
t=0:0.01:6;
x=square(pi*t).*3;
plot(t,x);
title (x(t))
xlabel (t)
波形图如下:
(4) 已知信号,及信号,用MATLAB绘出下列信号的波形。
由教材上的波形可知为一个三角波的右半部分。
MATLAB 程序如下:
clear,
close all,
t=-10:0.01:10;
x1= 4.*tripuls(t,8).*heaviside(t);
x2=sin(2*pi*t);
x3=x1+x2;
plot(t,x3);
xlabel(t);
title(x(t));
波形图如下:
MATLAB 程序如下:
clear,
close all,
t=-10:0.01:10;
x1=4.*tripuls(t,8).*heaviside(t);
x2=sin(2*pi*t);
x3=x1.*(x2);
plot(t,x3);
xlabel(t);
title(x(t));
波形图如下:
MATLAB 程序如下:
clear,
close all,
t=-10:0.01:10;
x1=4.*tripuls(t,8).*heaviside(t);
x2=4.*tripuls(t,8).*heaviside(-t);
x3=x1+x2;
plot(t,x3);
xlabel(t);
title(x(t));
波形图如下:
MATLAB 程序如下:
clear,
close all,
t=-10:0.01:10;
x1=4.*tripuls(t-1,8).*heaviside(t-1);
x2=sin(2*pi*t);
x3=x1+sin(2*pi.*(t-1));
x6=x2.*(x3);
plot(t,x6);
xlabel(t);
title(x(t));
波形图如下:
(5) 已知离散时间信号,用MATLAB绘出的波形。
由教材上的波形可知
MATLAB 程序如下:
clear,
close all,
n=-10.9999:10.9999;
x=heaviside(n+2)+heaviside(n+1)+heaviside(n);
stem(n,x);
xlabel(n);
title(x[n]);
波形图如下:
MATLAB 程序如下:
clear,
close all,
n=-10.9999:10.9999;
x=heaviside(-n+2)+heaviside(-n+1)+heaviside(-n);
stem(n,x);
xlabel(n);
title(x[n]);
波形图如下:
MATLAB 程序如下:
clear,
close all,
n=-10.9999:10.9999;
x=heaviside(n+4)+heaviside(n+3)+heaviside(n+2);
stem(n,x);
xlabel(n);
title(x[n]);
波形图如下:
MATLAB 程序如下:
clear,
close all,
n=-10.9999:10.9999;
x=heaviside(n)+heaviside(n-1)+heaviside(n-2);
stem(n,x);
xlabel(n);
title(x[n]);
波形图如下:
(6) 用MATLAB编程绘制下列信号的时域波形,观察信号是否为周期信号?若是周期信号,周期是多少?若不是周期信号,请说明原因。
MATLAB 程序如下:
clear,
close all,
t=-10:0.01:10;
x=1+cos(0.25*pi*t-pi/3)+2.*cos(0.5*pi*t-0.25*pi)+cos(2*pi*t);
plot(t,x);
xlabel(t);
title(x(t));
波形图如下:
该信号是周期信号,周期为8
MATLAB 程序如下:
clear,
close all,
t=-10:0.01:10;
x=sin(t)+2.*sin(pi*t);
plot(t,x);
xlabel(t);
title(x(t));
波形图如下:
不是周期信号,此函数由一个周期为2π和一个周期为2的函数组成,2π和2没有最小公倍数,所以没有周期。
MATLAB 程序如下:
clear,
close all,
n=-10:10;
x=2+3.*sin(2*n*pi/3-pi/8)
stem(n,x);
xlabel(n);
title(x[n]);
波形图如下:
该信号是周期信号,周期为3
MATLAB 程序如下:
clear,
close all,
n=-10:10;
x=cos(n*pi/6)+sin(n*pi/3)+cos(n*pi/2)
stem(n,x);
xlabel(n);
title(x[n]);
波形图如下:
该信号是周期信号,周期为12
4、 实验心得体会
此次实验让我对于MATLAB这个软件有了一定的了解,并且实实在在的体会到了MATLAB强大的功能,对于它在信号与系统方面的应用,让我对于抽象的信号有了更加直接的、直观的了解,总之,对于这个课程有点相见恨晚的感觉。
实验2 LTI系统的时域分析
一、实验目的
①掌握利用MATLAB对系统进行时域分析的方法。
②掌握连续时间系统零状态响应、冲激响应和阶跃响应的求解方法。
③掌握求解离散时间系统响应、单位抽样响应的方法。
④加深对卷积积分和卷积和的理解。掌握利用计算机进行卷积积分和卷积和计算的方法。
二、实验原理
1、连续时间系统时域分析的MATLAB实现
1)连续时间系统的MATLAB表示
设LTI因果系统的微分方程一般式为:
则在MATLAB里,可以建立系统模型如下:
b=[];
a=[];
sys=tf(b,a);
2)连续时间系统的零状态响应
用lsim(sys,x,t)表示求解零状态响应。
3)连续时间系统的冲激响应与阶跃响应。
用impulse函数来调用。
2、离散时间系统时域分析的MATLAB实现
1)离散时间系统的MATLAB表示。
LTI离散系统通常可以由系统差分方程描述;
则在MATLAB里,可以建立系统模型如下:
b=[;
a=[;
2)离散时间系统对任意输入的响应。
用filter(b,a,x)函数调用。
3)离散时间系统的单位抽样响应。
用impz函数来调用。
3、卷积和与卷积积分
1)离散时间序列的卷积和:调用格式为x=conv(x1,x2);
2)连续时间信号的卷积积分
连续时间信号x1(t)和x2(t)的卷积积分x(t)定义如下
三、实验内容
1. 采用MATLAB绘出各系统的单位冲激响应和单位阶跃响应波形。
(3)
程序如下:
clear,
close all,
num=[1];
den=[1 2^0.5 1];
t=0:0.01:10;
sys=tf([1],[1 2^0.5 1]);
x0=[0 0];
subplot(211);
impulse(sys);
subplot(212);
step(sys);
程序运行结果如下:
(4)
程序如下:
clear,
close all,
num=[1 0 0];
den=[1 2^0.5 1];
t=0:0.01:10;
sys=tf([1 0 0],[1 2^0.5 1]);
x0=[0 0];
subplot(211);
impulse(sys);
subplot(212);
step(sys);
程序运行结果如下:
(5)
程序如下:
clear,
close all,
num=[1 0];
den=[1 1 1];
t=0:0.01:10;
sys=tf([1 0],[1 1 1]);
x0=[0 0];
subplot(211);
impulse(sys);
subplot(212);
step(sys);
程序运行结果如下:
(6)
程序如下:
clear,
close all,
num=[1 0 1];
den=[1 1 1];
t=0:0.01:10;
sys=tf([1 0 1],[1 1 1]);
x0=[0 0];
subplot(211);
impulse(sys);
subplot(212);
step(sys);
程序运行结果如下:
(5) 已知某系统可以由如下微分方程描述
(1) 利用MATLAB绘出该系统冲激响应和阶跃响应的时域波形。
程序如下:
clear,
close all,
num=[1];
den=[1 1 6];
t=0:0.01:10;
sys=tf([1],[1 1 6]);
x0=[0 0];
subplot(211);
impulse(sys);
subplot(212);
step(sys);
程序运行结果如下:
(2) 根据冲激响应的时域波形分析系统的稳定性
观察输出的波形,当t 趋向于无穷大时,y(t)趋于0,所以该系统是稳定的
(7) 如果系统的输入为,求系统的零状态响应。
程序如下:
clear,
close all,
num=[1];
den=[1 1 6];
t=0:0.01:10;
u=exp(-t);
x=u;
sys=tf([1],[1 1 6]);%
x0=[0 0];
[y,t,x]=lsim(sys,u,t,x0)
plot(t,y,t,u);
title(y(t));
程序运行结果如下:
2) 已知描述离散系统的微分方程如下,用MATLAB绘出各系统的单位抽样响应,根据单位抽样响应的时域波形分析系统的稳定性。
(1)
程序如下:
clear,
close all,
num=[1];
den=[1 3 2];
impz(num, den, 0:12);
程序运行结果如下:
系统的稳定性
观察输出的波形,当n 趋向于无穷大时,y(n)越来越大,所以该系统是不稳定
的
(2)
程序如下:
clear,
close all,
num=[1 -3];
den=[1 -0.5 0.8];
impz(num, den, 0:12);
程序运行结果如下:
系统的稳定性
观察输出的波形,当n 趋向于无穷大时,y(n)越来越小,所以该系统是稳定的
4.已知系统可以由如下差分方程描述
程序如下:
clear,
close all,
num=[1];
den=[1 1 0.25];
subplot(211);
impz(num, den, 0:12);
subplot(212);
stepz(num, den, 0:12);
程序运行结果如下:
5. 用MATLAB计算如下两个序列的卷积,并绘出图形。
程序如下:
clear,
close all,
n=-3:4;
x1=[1 2 1 1];
x2=[1 1 1 1 1];
x=conv(x1,x2);
stem(n,x);
title (x[n])
xlabel (Time index n)
程序运行结果如下:
6. 已知某LTI离散系统,其单位抽样响应,系统的输入为,计算当n=0,1,2,…,40时系统的零状态响应y(n),绘出x(n),h(n)和y(n)时域波形。
程序如下:
clear,
close all,
n=0:40;
x=sin(0.2*n);
h=sin(0.5*n);
y=conv(x,h);
subplot(311);
stem(n,x);
xlabel(n);
title(x[n]);
subplot(312);
stem(n,h);
xlabel(n)
title(h[n])
subplot(313);
n=0:80;
stem(n,y);
xlabel(n);
title(y[n]);
程序运行结果如下:
7. 已知两个连续时间信号,求两个信号的卷积。
程序如下:
自定义阶跃函数:
function y = u(t)
y = (t>=0);
主函数:
clear;
close all;
t0 = -3;
t1 = 3;
dt = 0.01;
t = t0:dt:t1;
x1 = 2*u(t+1)-2*u(t-1);
x2 = u(t+2)-u(t-2);
y = dt*conv(x1,x2);
subplot(221);
plot(t,x1), grid on, title(Signal x1(t))
subplot(222);
plot(t,x2), grid on, title(Signal x2(t))
subplot(212);
t = 2*t0:dt:2*t1;
plot(t,y), grid on, title(The convolution of x1(t) and x2(t));
xlabel(Time t sec);
程序运行结果如下:
四.体会和建议
LTI系统零状态响应、冲激响应和阶跃响应在之前信号与系统课程的学习中,需要比较麻烦的计算才能得到,但是,对于MATLAB来说真可谓小菜一碟,挺简单的几行代码就可以轻松地求出响应的的图像,非常直观。对于卷积积分和卷积和,在上信号与系统课的时候,感觉十分头疼,繁琐的计算不仅费时间,一不小心就有可能出错,MATLAB在这方面的应用既准确又方便。此次实验中MATLAB的强大功能可谓是惊艳,让我对于这个软件和信号与系统课程有了极大的兴趣。
实验3 信号频域分析
1、 实验目的
1.深入理解信号频谱的概念,掌握信号的频域分析方法。
2.观察典型周期信号和非周期信号的频谱,掌握其频谱特性。
2、 实验原理与方法
1.连续周期信号的频谱分析
如果周期信号满足狄里赫利条件,就可以展开为傅里叶级数形式,即
式中,表示基波周期,为基波频率,表示任一个基波周期内的积分。
式(1)和式(2)定义为周期信号复指数形式的傅里叶级数,系数称为的傅里叶系数。周期信号的傅里叶级数还可以由三角函数的线性组合来表示,即
式(3)中同频率的正弦项和余弦项可以合并,从而得到三角函数形式的傅里叶级数,即
可见,任何满足狄里赫利条件的周期信号都可以表示成一组谐波关系的复指数函数或三角函数的叠加。一般来说周期信号表示为傅里叶级数时需要无限多项才能完全逼近原信号,但在实际应用中经常采用有限项级数来替代,所选项数越多就越逼近原信号。
2.连续非周期信号的频谱分析
对于非周期连续时间信号,吸纳后的傅里叶变换和傅里叶逆变换定义为
式(7)和式(8)把信号的时域特性和频域特性联系起来,确立了非周期信号和频谱之间的关系。
采用MATLAB可以方便地求取非周期连续时间信号的傅里叶变换,这里我们介绍常用的集中方法。
1) 符号运算法
MATLAB的符号数学工具箱提供了直接求解傅里叶变换和反变换的函数,fourier函数和ifourier函数,基本调用格式为
X=fourier(x)
X=ifourier(X)
默认的时域变量为t,频域变量为w。
2) 数值积分法
除了采用符号运算的方法外,我们还可以利用MATLAB的quad函数,采用数值积分的方法来进行连续信号的频谱分析,quad函数是一个用来计算数值积分的函数。利用quad函数可以计算非周期连续时间信号的频谱。Quad函数的一般调用格式为:
y=quad(fun,a,b)
y=quad(fun,a,b,TOL,TRACE,p1,p2,…)
其中fun指定被积函数,可以采用inline命令来创建,也可以通过传递函数句柄的形式来指定,a、b表示定积分的下限和上限,TOL表示允许的相对或绝对积分误差,TRACE表示以被积函数的点绘图形式来跟踪该函数的返回值,如果TOL和TRACE为空矩阵,则使用缺省值,“p1,p2,…”表示被积函数出时间t之外所需的其他额外输入参数。
3)数值近似法
我们还可以利用MATLAB的数值计算的方法近似计算连续时间傅里叶变换。傅里叶变换可以由式(9)近似计算
当为时限信号,且足够小,式(9)可以演变为
而式(10)中求和部分又可以表示成一个行向量和一个列向量的乘积
式(11)可以很方便地利用MATLAB实现。
3.离散周期时间信号的频域分析
基波周期为N的周期序列可以用N个成谐波关系的复指数序列的加权和表示,即
这里k=表示求和仅需包括一个周期内的N项,周期序列在一个周期内的求和与起点无关。将周期序列表示成式(12)的形式,成为离散傅里叶级数,而系数则称为离散傅里叶系数。离散傅里叶系数可以由式(13)确定。
傅里叶系数也称为的频谱系数,而且可以证明是以N为周期的离散频率序列。这说明了周期的离散时间函数对应于频域为周期的离散频率。
这里,我们用周期N与傅里叶系数的乘积来表示周期离散时间信号的频谱,即
可以利用MATLAB提供的函数fft用来计算,调用格式为
该函数返回一个周期内的值,其中x表示一个周期内的样本值。
4.离散非周期时间信号的频域分析
非周期序列可以表示成一组复指数序列的连续和
其中
式(16)称为的离散时间傅里叶变换,式(15)和式(16)确立了非周期离散时间信号及其离散时间傅里叶变换之间的关系。是连续频率的函数,称为频谱函数,且是周期的连续频率函数,其周期为。可见,非周期离散时间函数对应于频域中是一个连续的周期的频率函数。
对于有限长的时间序列,式(16)可以表示为
式(17)可以方便地利用MATLAB实现。
三、实验内容
(1)已知周期矩形脉冲信号。
教材上的波形可知信号
由式(3)和式(4)计算得
故的傅里叶级数为
利用MATLAB绘出由前N次谐波合成的信号波形,观察随着N的变化合成信号波形的变化规律;
MATLAB程序如下:
N_start = input(Please input start of the number N:\n);
N_end = input(Please input end of the number N:\n);
step = input(Please input step of the number N:\n);
N = N_start:step:N_end;
A = 1;
T = 2*pi;
ta = T/2;
syms x t;
for i = 1:(length(N))
x = A*ta/T;
for k = 1:N(i)
x = x + 2/(k*pi)*sin(k*pi*ta/T)*cos(2*pi*k*t/T);
end
if mod(i,4) == 1
figure;
flag = 1;
end
subplot(2,2,flag);
ezplot(x);
str_title = [N = ,sprintf(%d,N(i))]; %Just a title
title(str_title);
grid on;
flag = flag + 1;
end
程序执行结果:
由述4个波形图可知,随着N的增大即选取的傅里叶级数的项数增加,合成波形越来越接近原来的矩形脉冲信号。
利用MATLAB绘出周期矩形脉冲信号的频谱,观察参数T和变化时对频谱波形的影响。
由式(1)和式(2)计算得
MATLAB程序如下:
clear,
close all,
N=input(N=);
A=input(A=);
T=input(T=);
i=input(c=);
n1=-N:-1;
c1=A./n1./pi.*sin(n1.*pi.*i./T);
c0=A.*i./T;
n2=1:N;
c2=A./n2./pi.*sin(n2.*pi.*i./T);
cn=[c1 c0 c2];
n=-N:N;
subplot(211);
stem(n,abs(cn),filled);
xlabel(w/w0);
title(Magnitude);
subplot(212);
stem(n,angle(cn),filled);
xlabel(w/w0);
title(Phase);
程序执行结果:
输入:N=18,A=3,T=3,c=1
输入:N=18,A=3,T=3,c=0.1
输入:N=18,A=3,T=3,c=0.5
输入:N=18,A=3,T=5,c=1
输入:N=18,A=3,T=10,c=1
由程序执行结果可知,频谱波形与的值有关,对于不同的T和,当比值相同时频谱波形图相同;当比值不同时,比值越小,频谱包络形状趋于收敛,过零点越少,谱线越密。
思考题:
1)将具有不连续点的周期函数(如矩形脉冲)进行傅立叶级数展开后,选取有限项进行合成。当选取的项数越多,在所合成的波形中出现的峰起越靠近原信号的不连续点。当选取的项数很大时,该峰起值趋于一个常数,大约等于总跳变值的9%。这种现象称为吉伯斯现象。
原因:当一个信号通过某一系统时,如果这个信号不是连续时间函数,则由于一般物理系统对信号高频分量都有衰减作用,从而产生吉伯斯现象。
2)周期信号的频谱是具有周期性的一系列的脉冲信号,谱线间隔为 ,谱线的长度随着谐波次数的增高趋于收敛。
3)有效频宽与信号的时域宽度成反比
4) 比值越小,频谱包络形状趋于收敛,过零点越少,谱线越密。
(2)已知矩形脉冲信号。
求该信号的傅里叶变换
由教材上的波形可知
用MATLAB函数库里的fourier函数来求的傅里叶变换
MATLAB程序如下:
syms t;
A=input(A=);
c=input(c=);
x=A*[heaviside(t+c/2)-heaviside(t-c/2)]; %x(t)
X=fourier(x)
collect(X)
当A=1;τ=1;
ans =
(2*sin(w/2))/w=Aτsinc(ωτ/2)
所以的傅里叶变换为
利用MATLAB绘出矩形脉冲信号的频谱,观察矩形脉冲宽度变化时对频谱波形的影响。
MATLAB程序如下:
clear,
close all,
syms t w
m = input(τ=);
X = int(exp(-j*w*t),t,-m/2,m/2);
ezplot(X,[-6*pi,6*pi]);
xlabel(w);
ylabel(Magnitude);
title([X(w) τ= num2str(m)]);
当τ=1,
当τ=4
当τ=6
当τ=10
由以上4个频谱波形图可知,当矩形脉冲宽度增大时,信号占有频带减小,即信号的占有频带与脉冲宽度成反比。
让矩形脉冲的面积始终等于1,改变矩形脉冲宽度,观察矩形脉冲信号时域波形和频谱随矩形脉冲宽度的变化趋势。
MATLAB程序如下:
syms w
B=input(B=);
A=1;
x=(2*A/w)*sin(w*(B/2));
ezplot(abs(x),[-6*pi,6*pi]);
grid on;
xlabel(\omega);
ylabel(Magnitude);
title(|x(\omega)|);
波形图如下:
展开阅读全文