信号与系统实验教程(学生版)(2)

2019-04-14 21:39

则y(t)等于将x(t)左移t0秒之后的结果。 在MATLAB中,时移运算与数学上习惯表达方法完全相同。

对给定一个连续时间信号x(t) = e-0.5tu(t),对它分别左移2秒钟和右移2秒钟得到信号x1(t) = e-0.5(t+2)u(t+2)和x2(t) = e-0.5(t-2)u(t-2)。

实现程序:

% Program clear,close all, t = -5:0.01:5;

x = exp(-0.5*t).*u(t); % Generate the original signal x(t)

x1 = exp(-0.5*(t+2)).*u(t+2); % Shift x(t) to the left by 2 second to get x1(t) x2 = exp(-0.5*(t-2)).*u(t-2); % Shift x(t) to the right by 2 second to get x2(t) subplot(311)

plot(t,x) % Plot x(t) grid on,

title (' x = exp(-0.5*t).*u(t)')

subplot (312)

plot (t,x1) % Plot x1(t) grid on,

title (' x1 = exp(-0.5*(t+2)).*u(t+2) ') subplot (313)

plot (t,x2) % Plot x2(t) grid on,

title (' x2 = exp(-0.5*(t-2)).*u(t-2)') xlabel ('Time t (sec)') 程序运行结果:

图1-3 程序运行结果图

注意:在运行上面的程序时,一定在所在的路径下创建u(t)的子函数: function y = u(t)

y = (t>=0); % y = 1 for t > 0, else y = 0 保存名为u.m 5、信号的时域翻转

3

对一个信号x[n]的翻转运算在数学上表示为

y[n] = x[-n] 1.4 这种翻转运算,用MATLAB实现起来也是非常简单的。有多种方法可以实现信号的翻转运算。

方法一,修改绘图函数plot(t,x)和stem(n,x)中的时间变量t和n,即用-t和-n替代原来的t和n,这样绘制出来的图形,看起来就是原信号经时域翻转后的版本。

方法二,直接利用原信号与其翻转信号的数学关系式来实现。这种方法最符合信号翻转运算的实际意义。

方法三,使用MATLAB内部函数fliplr()来实现信号的翻转运算。其用法如下:

y = fliplr(x):其中x为原信号x(t)或x[n],而y则为x的时域翻转。需要说明的是,函数fliplr()对信号作时域翻转,仅仅将信号中各个元素的次序作了一个反转,这种反转处理是独立于时间变量t和n的。因此,如果信号与其时间变量能够用一个数学函数来表达的话,那么建议将时间变量t和n的范围指定在一个正负对称的时间区间即可。

分别编写程序实现m=sin(t);n=sin(-t);x[n]=[1 2 3 4];x[-n],分析所画信号波形, 程序如下: t=0:0.01:4*pi; n=0:1:3; m=sin(t); x=[1 2 3 4]; subplot(222); plot(t,m);

title('sin(t) signal'); subplot(221); plot(-t,m);

title('sin(-t) signal'); subplot(224); stem(n,x); title('x[n] signal'); subplot(223); stem(-n,x); title('x[-n] signal'); 程序运行结果:

4

图1-4 程序运行结果图

6、信号的时域尺度变换

信号x(t)的时域尺度变换在数学描述为

y(t) = x(at), 1.5

其中a为任意常数。根据a的不同取值,这种时域尺度变换对信号x(t)具有非常不同的影响。 当a = 1时,y(t) = x(t);

当a = -1时,y(t) = x(-t),即y(t)可以通过将x(t)翻转运算而得到; 当a > 1时,y(t) = x(at),y(t)是将x(t)在时间轴上的压缩而得到; 当0 < a < 1时,y(t) = x(at),y(t)是将x(t)在时间轴上的扩展而得到;

当 -1 < a < 0时,y(t) = x(at),y(t)是将x(t)在时间轴上的扩展同时翻转而得到;

当 a < -1时,y(t) = x(at),y(t)是将x(t)在时间轴上的压缩同时翻转而得到;

由此可见,信号的时域尺度变换,除了对信号进行时域压缩或扩展外,还可能包括对信号的时域翻转运算。实际上,MATLAB完成式1.5的运算,并不需要特殊的处理,按照数学上的常规方法即能完成。

编写程序实现m=sin(t);n=sin(2t);x[n]=[1 2 3 4];x[(-1/2)n],分析所画信号波形 程序如下:

%sin(2t)通过改变图形的压缩从sin(t)得来,x[(-1/2)n]通过展坐标轴从x[n]得来。 t=0:0.01:4*pi; k=2*t; n=0:1:3; g=(-2)*n;

m=sin(t);s=sin(k); x=[1 2 3 4]; subplot(222); plot(t,m); title('sin(t) signal'); subplot(221); plot(t,s);

title('sin(2t) signal');

5

subplot(224); stem(n,x); title('x[n] signal'); subplot(223); stem(g,x);

title('x[(-1/2)n] signal'); 程序运行结果:

图1-5 程序运行结果图 7、周期信号

在《信号与系统》课程中,周期信号是一类非常重要的信号。给定一个信号x(t)或x[n],如果满足

x(t) = x(t+kT) 1.6

x[n] = x[n+kN] 1.7

则该信号叫做周期信号。其中,k为任意整数,T和N为常数,通常称为信号的基本周期或最小周期。

周期信号可以看作是一个时限的非周期信号经过周期延拓之后形成的。在数字信号处理中,周期延拓这一信号处理方法非常重要。

下面的程序段,就是将一个非周期信号x1(t) = e-2t[u(t)-u(t-2)]经过周期延拓之后而得到一个周期信号。

程序如下:

clear, close all; t = -4:0.001:4;

T = 2; x = 0;

y = exp(-2*t).*(u(t)-u(t-2)); for k = -2:2;

x = x+exp(-2*(t-k*T)).*(u(t-k*T)-u(t-(k+1)*T)); end; subplot(211); plot(t,y);

6

title('e-2t[u(t)-u(t-2)] signal'); subplot(212)

plot(t,x);

title('e-2t[u(t)-u(t-2)]延拓后的波形');

程序运行结果:

图1-6 程序运行结果图

仔细阅读该程序,可以发现其算法就是:

?

x(t)??xk???1(t?kT) 1.8

由于k无法计算到无穷,而是以有限值加以替代,反映到有限宽度图形窗口中得到的效果完全符合要求。

8、卷积的计算

卷积的计算通常可按下面的五个步骤进行(以卷积积分为例):

1. 该换两个信号波形图中的横坐标,由t改为τ,τ变成函数的自变量;

2. 把其中一个信号翻转,如把h(τ)变成h(-τ);

3. 把翻转后的信号做移位,移位量是t,这样t是一个参变量。在τ坐标系中,t > 0时图形右移, t < 0时图形左移。

4. 计算两个信号重叠部分的乘积x(τ)h(t-τ);

5. 完成相乘后图形的积分。

对于两个时限信号(Time-limited signal),按照上述的五个步骤,作卷积积分运算时,关键是正确确定不同情况下的积分限。只要正确地确定了积分限都能得到正确定积分结果。尽管如此,在时域中计算卷积积分,总体上来说是一项比较困难的工作。

程序convlution_demo用来演示上述作卷积积分运算的五个步骤。本程序较为复杂,不建议读者读懂该程序,只需执行这个程序,观看程序执行过程中有关卷积积分的运算过程,以便于理解这五个步骤。 借助MATLAB的内部函数conv()可以很容易地完成两个信号的卷积积分运算。其语法为:y = conv(x,h)。其中x和h分别是两个作卷积运算的信号,y为卷积结果。

为了正确地运用这个函数计算卷积,这里有必要对conv(x,h)做一个详细说明。conv(x,h)函

7


信号与系统实验教程(学生版)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:托福口语难点如何逐个击破[有妙招]

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: