实验1 信号的时域描述与运算
实验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)命令可以绘制上述信号的时域波形MATLAB提供了一些函数用于常用信号的产生,如阶跃信号,脉冲信号,指数信号,正弦信号,表1中列出了一些常用的基本函数表1常用的信号产生函数 函数名 功能 函数名 功能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绘制下列连续时间信号波形。(1)代码及结果:t=-5:0.01:10;x=(1-exp(-0.5*t).*heaviside(t);plot(t,x);xlabel('t/s');title('x(t)');(2)代码及结果:t=-1:0.001:3;x=cos(pi*t).*(heaviside(t)-heaviside(t-2);plot(t,x);xlabel('t/s');title('x(t)');(3)代码及结果:t=-3:0.001:4;x=abs(t).*cos(pi*t).*(heaviside(t+2)-heaviside(t-2)/2;plot(t,x);xlabel('t/s');title('x(t)');(4)代码及结果:t=-1:0.001:5;x=exp(-t).*sin(2*pi*t).*(heaviside(t)-heaviside(t-3);plot(t,x);xlabel('t/s');title('x(t)');2.利用MATLAB绘制下列离散时间信号波形(1)代码及结果:n=0:15;x=heaviside(n-3);stem(n,x,'filled');xlabel('n');title('x(n)');(2)代码及结果:方法一:n=-3:12;x=(-1/2).n).*heaviside(n);stem(n,x,'filled');xlabel('n');title('x(n)');方法二:n=-3:12;x=power(-1/2,n).*heaviside(n);stem(n,x,'filled');xlabel('n');title('x(n)');(3)代码及结果:n=-3:12;x=n.*(heaviside(n)-heaviside(n-5);stem(n,x,'filled');xlabel('n');title('x(n)');(4)代码及结果:n=-3:12;x=sin(n*pi/2).*heaviside(n);stem(n,x,'filled');xlabel('n');title('x(n)');3.利用MATLAB生成并绘制连续周期矩形波信号,要求周期为2,峰值为3,显示三个周期的波形。代码及结果:t=0:0.001:6;a=3;%a是峰值p=3;%p是周期数y=a*square(p*t);plot(t,y);xlabel('t');title('y(t)');axis(t(1)-1 t(end)+1 -(a+1) (a+1);x1(t)4. 已知信号,及信号,用MATLAB绘出下列信号的波形。4t04(1)代码及结果:t=-2:0.001:6;width=4;skew=-1;y1=4*tripuls(t-2,width,skew);%y1表示三角波信号y2=sin(2*pi*t);%y2表示正弦波信号y3=y1+y2;plot(t,y3);xlabel('t');title('y3(t)');%y3表示所求的函数的波形(2)代码及结果:t=-2:0.001:6;width=4;skew=-1;y1=4*tripuls(t-2,width,skew);%y1表示三角波信号y2=sin(2*pi*t);%y2表示正弦波信号y4=y1.*y2;plot(t,y4);xlabel('t');title('y4(t)');%y4表示所求的函数的波形(3)代码及结果:t=-6:0.001:6;y5=(4-t).*(heaviside(t)-heaviside(t-4)+(4+t).*(heaviside(t+4)-heaviside(t);plot(t,y5);xlabel('t');title('y5(t)');(4)代码及结果:t=-2:0.001:6;width=4;skew=-1;y1=4*tripuls(t-3,width,skew);%y1表示三角波信号y2=sin(2*pi*(t-1);%y2表示正弦波信号y3=y1+y2;y6=y2.*y3plot(t,y6);xlabel('t');title('y6(t)');%y6表示所求的函数的波形5.已知离散时间信号,用MATLAB绘出的波形。由教材上的波形可知代码及结果:n=-3:4;x=0 1 2 3 3 3 3 0;stem(n,x,'filled');xlabel('n');title('x(n)');n=-3:4;x=0 1 2 3 3 3 3 0;n1=-fliplr(n);x1=fliplr(x);stem(n1,x1,'filled');xlabel('n');title('x(-n)');n=-3:4;x=0 1 2 3 3 3 3 0;n2=n-2;stem(n2,x,'filled');xlabel('n');title('x(n+2)');n=-3:4;x=0 1 2 3 3 3 3 0;n3=n+2;stem(n3,x,'filled');xlabel('n');title('x(n-2)');(6) 6.用MATLAB编程绘制下列信号的时域波形,观察信号是否为周期信号?若是周期信号,周期是多少?若不是周期信号,请说明原因。(1)代码及结果:t=-4*pi:0.001:4*pi;x=1+cos(pi*t/4-pi/3)+2*cos(pi*t/2-pi/4)+cos(2*pi*t);plot(t,x);xlabel('t');title('x1');该信号是在周期信号,周期为8(2)代码及结果:t=-4*pi:0.001:4*pi;x=sin(t)+2*sin(pi*t);plot(t,x);xlabel('t');title('x2'); 该信号不是周期信号。sin(t)以2为周期,而sin(t)以2为周期,没有一个实数是这两个信号叠加后信号的公周期。(3)代码及结果: n=-10:10;>> x=2+3*sin(2/3*pi*n-pi/8);>> stem(n,x,'filled');>> xlabel('n');>> title('x3');该信号是周期信号,周期为3(4)代码及结果:n=-16:16;x=cos(pi/6*n)+sin(pi/3*n)+cos(pi/2*n);stem(n,x,'filled');xlabel('n');title('x4');该信号是周期信号,周期为12四、 心得体会本实验主要任务是研究如何用