北京理工大学信号与系统实验报告

  • 格式:doc
  • 大小:1.65 MB
  • 文档页数:91

基于MATLAB的信号与系统实验 1 实验1 信号的时域描述与运算

一、 实验目的 1、 掌握信号的MATLAB表示及其可视化方法。 2、 掌握信号基本时域运算的MATLAB实现方法。 3、 利用MATLAB分析常用信号,加深对信号时域的理解。 二、 实验原理

1、 连续时间的MATLAB表示 连续时间信号指的是在连续时间范围内有定义的信号,即除若干个不连续点外,在任何信号都有意义。在MATLAB中,连续时间信号可以用两种方法来表示,即向量表示法和符号对象表示法。 向量表示法:严格意义上来说,MATLAB并不能处理连续时间信号,都必须是用信号等时间间隔采样后的采样值来近似表示的,采样时间间隔足够小的时候,这些采样值就可以近似地表示出连续时间信号。 例如:>>t=0:0.01:10; >>x=sin(t); 此时利用plot(t,x)命令即可绘制上述信号的时域波形。符号对象表示法:连续时间信号先用表达式表示出来,然后采用符号表达式来表示信号。 例如:>>sym t; >>x=xin(t); 此时利用ezplot(x)命令即可绘制上述信号的时域波形。 基于MATLAB的信号与系统实验 2 常用的信号产生函数: 函数名 功能 heaviside 单位阶跃响应 sin 正弦函数 cos 余弦函数 sinc sinc函数 exp 指数函数 2、 连续时间信号的时域运算 对连续时间信号的运算包括量信号想家、相乘、微分、积分以及位移反转、尺度变换(尺度伸缩)等 1) 相加和相乘 信号的相加和相乘指两个信号对应时刻的值相加和相乘,对于两个采用向量表示的可以直接使用算术运算的运算符“+”和“•”来计算,此时要求表示两信号的向量时间范围和采样间隔相同,采用符号对象表示的两个信号,可以直接根据符号对象的运算规则运算。 2) 微分和积分 对于向量表示发表示的连续时间信号,可以用过数值计算的方法计算信号的微分和积分。这里由时间向量[t1,t2,…,tN]和采样值向量[x1,x2,…,xN]表示的连续信号的微分是利用差分来近似求取的。 MATLAB里用diff来计算差分x(k+1)-x(k)。

函数名 功能 Rectpuls 门函数 Tripuls 三角脉冲函数 Square 周期方波 Sawtooth 周期锯齿波或三角函数 基于MATLAB的信号与系统实验

3 连续信号的定积分可以由MATLAB的quad函数实现,调用格式为 quad(‘functions_name’,a,b)其中,functions_name为被积函数名,a、b为积分区间。 对于符号对象表示的连续时间信号,MATLAB提供了diff函数和quad函数分别用于求微分和积分 3) 位移、反转、尺度变换 符号的位移:信号x(t)的自变量t更换为(t-t0),表示x(t)波形在t轴上整体移动,当t0>0整体右移,当t0<0整体左移。 信号的反转:信号x(t)的自变量t更换为-t,x(t)的波形相当于以t=0为轴反转过来。 信号的尺度变换:信号x(t)的自变量t更换为at,x(at)表示信号压缩(a>1)或拉伸(a<1)。 3、 离散时间信号的MATLAB表示 离散时间信号仅在一些离散时刻有定义。在MATLAB中离散时间信号需要使用两个向量来表示,其中一个向量用于表示离散的时间点,另一个向量用来表示这些时间点上的值。 stem函数用于沪指离散时间信号波形,为了与我们表示离散时间信号的习惯相同,在绘图时一般需要添加“filled”选项,以绘制实心的杆状图形。 4、 离散时间信号的时域运算 离散时间信号的相加相乘是将两个信号对应的时间上的值相加或相乘,可以直接使用算术运算的运算符“+”或“•”来计算。 基于MATLAB的信号与系统实验 4 离散时间信号的位移,则可看作是将表示时间的向量平移,而表示对应时间点上的值的向量不变。 离散时间信号的反转,则可看作是将表示时间的向量和表示对应时间点桑的值的向量以零为基准点,一纵轴为对称轴反折,向量的反折可以利用MATLAB的fliplr函数实现。

三、 实验内容、实验结果以及实验中遇到的一些问题与解决 (1) 利用MATLAB绘制下列连续时间信号波形: ① ② ③ ④

第一题的总代码如下: syms t x1=(1-exp(-0.5*t))*heaviside(t); %函数 subplot(221);ezplot(x1); %分块画图 xlabel('t');title('1(1) x(t)'); %标记 x2=cos(pi*t)*[heaviside(t)-heaviside(t-2)]; subplot(222);ezplot(x2); xlabel('t');title('1(2) x(t)'); x3=abs(t)/2*cos(pi*t)*[heaviside(t+2)-heaviside(t-2)]; subplot(223);ezplot(x3); xlabel('t');title('1(3) x(t)'); x4=exp(-t)*sin(2*pi*t)*[heaviside(t)-heaviside(t-3)]; subplot(224);ezplot(x4); xlabel('t');title('1(4) x(t)');

X(t)=[u(t)-u(t-2)] X(t)=[u(t+2)-u(t-2)] X(t)=[u(t)-u(t-3)]

X(t)=(u(t) 基于MATLAB的信号与系统实验

5 第一题程序运行结果如下:

(2) 利用MATLAB绘制下列连续时间信号波形: ① ② ③ ④

第二题的总代码如下: n=0:10; x1=heaviside(n-3); subplot(221);stem(n,x1,'filled'); xlabel('n');title('2(1) x(n)'); x2=(-1/2).^(n).*heaviside(n); subplot(222);stem(n,x2,'filled');

024600.51t1(1) x(t)00.511.52-1-0.500.51t1(2) x(t)

-2-1012-0.500.51t1(3) x(t)0123-0.500.5t

1(4) x(t)

X(t)=u(n-3) X(t)=u(n) X(t)=n[u(n)-u(n-5)] X(t)=u(n) 基于MATLAB的信号与系统实验

6 01234567891000.10.20.30.40.50.60.70.80.91n2(1) x(n)

xlabel('n');title('2(2) x(n)'); x3=n.*[heaviside(n)-heaviside(n-5)]; subplot(223);stem(n,x3,'filled'); xlabel('n');title('2(3) x(n)'); x4=sin(n*pi/2).*heaviside(n); subplot(224);stem(n,x4,'filled'); xlabel('n');title('2(4) x(n)');

第二题程序运行结果如下:

注:第一个图中我将单位阶跃函数的定义给改了。 在课前我就着手这次的实验,我一直百思不得其解的是单位阶跃信号在这题中n=3时应该为1,而右图是我第一次做这道题的图,在n=3时却是0.5。

051000.51n2(1) x(n)0510-0.500.51n2(2) x(n)

051001234n2(3) x(n)0510-1-0.500.51n2(4) x(n)基于MATLAB的信号与系统实验

7 于是在实验课上就这个问题我请教了老师,就是这个heaviside函数的定义可以通过在C盘搜索heaviside文件找到它的定义: function Y = heaviside(X) %HEAVISIDE Step function. % HEAVISIDE(X) is 0 for X < 0, 1 for X > 0, and .5 for X == 0. % HEAVISIDE(X) is not a function in the strict sense. % See also DIRAC.

% Copyright 1993-2012 The MathWorks, Inc. Y = zeros(size(X),'like',X); Y(X > 0) = 1; Y(X == 0) = .5; Y(isnan(X)) = NaN;

看到这个函数的定义后,老师建议如果要改进要么将这个定义函数修改,要么就自己新定义一个函数保存在源文件中。经过思考,我决定暂时修改这个函数,借用与我这次实验。于是我修改了上面这段代码的下划线处,结果如下: Y = zeros(size(X),'like',X); Y(X > 0) = 1; Y(X == 0) = 1; Y(isnan(X)) = NaN;

于是,我得到的图就是上文已经给出的“第二题的图”。这个小小的问题当然不妨碍实验,但是从中我得到了定义一个函数的方法,也是一个小小的收获。

(3) 利用MATLAB生成并绘制连续周期矩形波信号,要求周期为2,峰值为3,显示3个周期的波形。 第三题代码如下: