资源描述
实验1 信号的时域描述与运算
一、实验目的
1. 掌握信号的MATLAB表示及其可视化方法。
2. 掌握信号基本时域运算的MATLAB实现方法。
3. 利用MATLAB分析常用信号,加深对信号时域特性的理解。
二、实验原理与方法
1. 连续时间信号的MATLAB表示
连续时间信号指的是在连续时间范围内有定义的信号,即除了若干个不连续点外,在任何时刻信号都有定义。在MATLAB中连续时间信号可以用两种方法来表示,即向量表示法和符号对象表示法。
从严格意义上来说,MATLAB并不能处理连续时间信号,在MATLAB中连续时间信号是用等时间间隔采样后的采样值来近似表示的,当采样间隔足够小时,这些采样值就可以很好地近似表示出连续时间信号,这种表示方法称为向量表示法。表示一个连续时间信号需要使用两个向量,其中一个向量用于表示信号的时间范围,另一个向量表示连续时间信号在该时间范围内的采样值。例如一个正弦信号可以表示如下:
>> t=0:0.01:10;
>> x=sin(t);
利用plot(t,x)命令可以绘制上述信号的时域波形,如图1所示。
如果连续时间信号可以用表达式来描述,则还可以采用符号表达式來表示信号。例如对于上述正弦信号,可以用符号对象表示如下:
>>syms t;
>> x=sin(t);
利用ezplot(x)命令可以绘制上述信号的时域波形,如图2所示:
图 1
图表 2
matlab提供了一些函数用于常用信号的产生,例如阶跃信号、脉冲信号、指数信号、正弦信号等,表中列出了一些常用的基本函数。
常用的信号产生函数
函数名
功能
函数名
功能
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)移位、反转和尺度变化
信号的移位:信号x(t)的自变量t更换为(t-t0),表示x(t)波形在t轴上整体移动,当t0<0整体左移。
信号的反转:信号x(t)的自变量t更换为-t,x(t)的波形相当于以t=0为轴反转过来。
信号的尺度变换:信号x(t)的自变量t更换为at,x(at)表示信号压缩(a>0)或拉伸(a<0)。
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所示。
图表 3
4.离散时间信号的时域运算
离散时间信号的相加相乘是将两个信号对应的时间点上的值相加或相乘,可以直接使用算术运算的运算符“+”和“*”来计算。
离散时间信号的位移,则可看作是将表示时间的向量平移,而表示对应时间点上的值的向量不变。
离散时间信号的反转,则可以看作是将表示时间的向量和表示对应时间点上的值的向量以零点为基准点,一纵轴为对称轴反折,向量的反折可以利用MATLAB的fliplr函数实现。
三、实验内容
(1)利用MATLAB绘制下列连续时间信号波形:
用ezplot函数可直接绘制连续时间波形信号。
①
实验过程与实验结果:
matlab程序如下:
>> syms t;
>> x=(1-exp(-0.5*t)).*heaviside(t);
>> ezplot(x)
上述程序的运行结果为:
②
实验过程与实验结果:
matlab程序如下:
>> syms t;
>> x=cos(pi*t).*(heaviside(t)-heaviside(t-2));
>> ezplot(x)
上述程序的运行结果为:
③
实验过程与实验结果:
matlab程序如下:
>> syms t;
>> x=abs(t)/2.*cos(pi*t).*(heaviside(t+2)-heaviside(t-2));
>> ezplot(x)
上述程序的运行结果为:
④
实验过程与实验结果:
matlab程序如下:
>> syms t;
>> x=exp(-t).*sin(2*pi*t).*(heaviside(t)-heaviside(t-3));
>> ezplot(x)
上述程序的运行结果为:
(2)利用MATLAB绘制下列离散时间信号波形:
用stem函数可直接绘制离散时间波形信号。
①
实验过程与实验结果:
matlab程序如下:
>> t=0:1:10;
>> x=heaviside(t-3);
>> stem(t,x,'filled')
上述程序的运行结果为:
②
实验过程与实验结果:
matlab程序如下:
n=-3:10;
x=(-1/2).^n.*heaviside(n);
stem(n,x,'filled')
上述程序的运行结果为:
③
实验过程与实验结果:
matlab程序如下:
n=-3:10;
x=(-1/2).^n.*heaviside(n);
stem(n,x,'filled')
上述程序的运行结果为:
④
实验过程与实验结果:
matlab程序如下:
n=-5:10;
x=sin(n.*pi./2).*heaviside(n);
stem(n,x,'filled')
上述程序的运行结果为:
(3)利用MATLAB生成并绘制连续周期矩形波信号,要求周期为2,峰值为3,显示三个周期的波形。
实验过程与实验结果:
利用square函数可以生成矩形波。
matlab程序如下:
t=0:0.01:6;
x=3.*square(t.*pi);
plot(t,x)
axis([t(1) t(end) -4 4])
上述程序的运行结果为:
(4)已知信号,及信号,用MATLAB绘出下列信号的波形:(由教材上的波形可知为一个三角波的右半部分。)
①
实验过程与实验结果:
是由两波形叠加得到的
matlab程序如下:
syms t;
x1=(-t+4).*(heaviside(t)-heaviside(t-4));
x2=sin(2.*pi.*t);
z=x1+x2;
ezplot(z)
上述程序的运行结果为:
②
实验过程与实验结果:
是由两波形相乘得到的
matlab程序如下:
syms t;
x1=(-t+4).*(heaviside(t)-heaviside(t-4));
x2=sin(2.*pi.*t);
z=x1.*x2;
ezplot(z)
上述程序的运行结果为:
③
实验过程与实验结果:
是由反转再与叠加得到的
matlab程序如下:
syms t;
x1(t)=(-t+4).*(heaviside(t)-heaviside(t-4));
x2(t)=sin(2.*pi.*t);
z=x1(-t)+x1;
ezplot(z)
上述程序的运行结果为:
④
实验过程与实验结果:
是由右移1后再与相乘得到的
matlab程序如下:
syms t;
x1(t)=(-t+4).*(heaviside(t)-heaviside(t-4));
x2(t)=sin(2.*pi.*t);
x3(t)=x1(t)+x2(t);
z=x2(t)*x3(t-1);
ezplot(z)
axis([-2 5 -3 6])
上述程序的运行结果为:
(5)已知离散时间信号,用MATLAB绘出、、和的波形。(由教材上的波形可知)
matlab程序如下:
n=-3:4;
x=[0 1 2 3 3 3 3 0];
subplot(221);
stem(n,x,'filled');
xlabel('n');
title('x(n)');
n1=-fliplr(n);
x1=fliplr(x);
subplot(222);
stem(n1,x1,'filled');
xlabel('n');
title('x(-n)');
n2=n-2;
subplot(223);
stem(n2,x,'filled');
xlabel('n');
title('x(n+2)');
n3=n+2;
subplot(224);
stem(n3,x,'filled');
xlabel('n');
title('x(n-2)');
上述程序的运行结果为:
(6)用MATLAB编程绘制下列信号的时域波形,观察信号是否为周期信号?若是周期信号,周期是多少?若不是周期信号,请说明原因。
①
实验过程与实验结果:
matlab程序如下:
t=-10:0.01:10;
x=1+cos((pi/4)*t-pi/3)+2*cos((pi/2)*t-pi/4)+cos(2*pi*t);
plot(t,x);
xlabel('t'); title('x(t)');
上述程序的运行结果为:
该信号是周期信号,周期T=8。
②
实验过程与实验结果:
matlab程序如下:
t=-15:0.01:15;
x=sin(t)+2*sin(pi*t);
plot(t,x);
xlabel('t');
title('x(t)');
上述程序的运行结果为:
该信号不是周期信号。因为:是周期为的的周期信号,是周期为2的周期信号,但是是无理数,故 为非周期信号。
③
实验过程与实验结果:
matlab程序如下:
n=-3:7;
x=2+3.*sin(2.*n.*pi./3-pi./8);
stem(n,x,'filled');
xlabel('n');
title('x(n)');
上述程序的运行结果为:
该信号是周期信号,周期T=3。
④
实验过程与实验结果:
matlab程序如下:
n=-15:15;
x=cos(n.*pi./6)+sin(n.*pi./3)+cos(n.*pi./2);
stem(n,x,'filled');
xlabel('n');
title('x(n)');
上述程序的运行结果为:
该信号是周期信号,周期T=12。
四、体会和建议
这次实验是我第一次动手使用MATLAB,第一次感受到MATLAB是一款功能强大,有助于分析解决问题的数学工具,尤其是在对信号的分析上。在实验的同时,我又重拾信号与系统的基础知识,对信号与系统这门课程的一些知识点有了形象化的认知,提高了我对信号与系统这门课程的兴趣,第一次实验不是很困难,增强了我学好用好MATLAB的信心。
建议:在进行实验前期,我们只听过一堂关于使用这个软件的理论课,对于软件的使用不是很顺手,在实验时浪费了很多的时间,希望以后的第一堂课,由老师先带领我们熟悉实验系统,然后进行实验,可以帮助我们更快进入实验状态。
(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)
展开阅读全文