当前位置:首页 > 信号与系统实验教程MATLAB
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; for k = -2:2;
x = x+exp(-2*(t-k*T)).*(u(t-k*T)-u(t-(k+1)*T)); end
仔细阅读该程序,可以发现其算法就是:
x(t)?k????x(t?kT) 1.8
1?由于k无法计算到无穷,而是以有限值加以替代,反映到有限宽度图形窗口中得到的效果完全符合要求。
3 LTI系统的时域描述 3.1线性时不变系统
在分析LTI系统时,有关LTI系统的两个重要的性质是必须首先掌握和理解的。这就是线
性性(Linearity)和时不变性(Time-invariance)。所谓线性性就是指系统同时满足齐次性和叠加性。这可以用下面的方法来描述。
假设系统在输入信号x1(t)作用时的响应信号为y1(t),在输入信号x2(t)作用时的响应信号为y2(t),给定两个常数a和b,如果当输入信号为x(t)时系统的响应信号为y(t),且满足 x(t) = x1(t) + x2(t) 1.9(a) y(t) = y1(t) + y2(t) 1.9(b) 则该系统具有叠加性(Additivity)。如果满足
x(t) = ax1(t) 1.10(a) y(t) = ay1(t) 1.10(b) 则该系统具有齐次性(Homogeneity)。一个系统如果是线性系统的话,那么这个系统必须同时具有叠加性和齐次性。
又假设系统在输入信号x(t)作用时的响应信号为y(t),对一个给定时间常数t0,如果当输入信号为x(t-t0)时,系统的响应信号为y(t-t0)的话,则该系统具有时不变性。
同时具有线性性和时不变性的系统,叫做线性时不变系统,简称LTI系统。LTI系统有连续时间LTI系统和离散时间LTI系统之分。连续时间系统的输入和输出信号都必须是连续时间信号,而离散时间系统的输入和输出信号都必须是离散时间信号。
3.2 LTI系统的单位冲激响应和卷积模型
给定一个连续时间LTI系统,在系统的初始条件为零时,用单位冲激信号δ(t)作用于系统,
此时系统的响应信号称为系统的单位冲激响应(Unit impulse response),一般用h(t)来表示。需要强调的是,系统的单位冲激响应是在激励信号为δ(t)时的零状态响应(Zero-state response)。 离散时间LTI系统的单位冲激响应的定义与连续时间LTI系统的单位冲激响应相同,只是离散时间单位冲激函数δ[n]的定义有所不同。
系统的单位冲激响应是一个非常重要的概念,对于一个系统,如果我们知道了该系统的单位冲激响应,那么,该系统对任意输入信号的响应信号都可以求得。也就是说,系统的输入信号x(t)、x[n]和输出信号y(t)、y[n]之间的关系可以用一个数学表达式来描述,这个数学表达式为
y(t)? y[n]?????x(?)h(t??)d? 1.11(a)
k????x[k]h[n?k] 1.11(b)
?这个表达式就是LTI系统的卷积模型,它是根据系统的线性性和时不变性以及信号可以分解成单位冲激函数经推理得到的。这个表达式实际上告诉了我们一个重要的结论,那就是,任意LTI系统可以完全由它的单位冲激响应h(t)/h[n]来确定。由于系统的单位冲激响应是零状态响应,故按照式1.11求得的系统响应也是零状态响应。式1.11中的积分运算叫做卷积积分,求和运算叫做卷积和,是描述连续时间系统输入输出关系的一个重要表达式。
3.3卷积的计算
卷积的计算通常可按下面的五个步骤进行(以卷积积分为例):
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)函数实际上是完成两个多项式的乘法运算。例如,两个多项式p1和p2分别为:
p1?s3?2s2?3s?4 和 p2?4s3?3s2?2s?1
这两个多项式在MATLAB中是用它们的系数构成一个行向量来表示的,如果用x来表示多项式p1,h表示多项式p2,则x和h分别为
x = [1 2 3 4] h = [4 3 2 1] 在MATLAB命令窗口依次键入
>> x = [1 2 3 4]; >> h = [4 3 2 1]; >> y=conv(x,h)
在屏幕上得到显示结果:
y = 4 11 20 30 20 11 4 这表明,多项式p1和p2的乘积为:
p3?4s6?11s5?20s4?30s3?20s2?11s?4
正如前所述,用MATLAB处理连续时间信号时,独立时间变量t的变化步长应该是很小的,假定用符号dt表示时间变化步长,那么,用函数conv()作两个信号的卷积积分时,应该在这个函数之前乘以时间步长方能得到正确的结果。也就是说,正确的语句形式应为:y = dt*conv(x,h)。
对于定义在不同时间段的两个时限信号x(t),t0 ≤ t ≤ t1,和h(t),t2 ≤ t ≤ t3。 如果用y(t)来表示它们的卷积结果,则y(t)的持续时间范围要比x(t)或h(t)要长,其时间范围为t0+t2 ≤ t ≤ t1+t3。这个特点很重要,利用这个特点,在处理信号在时间上的位置时,可以很容易地将信号的函数值与时间轴的位置和长度关系保持一致性。
根据给定的两个连续时间信号x(t) = t[u(t)-u(t-1)]和h(t) = u(t)-u(t-1),编写程序,完成这两个信号的卷积运算,并绘制它们的波形图。范例程序如下:
% Program1_6
% This program computes the convolution of two continuou-time signals clear;close all;
t0 = -2; t1 = 4; dt = 0.01; t = t0:dt:t1; x = u(t)-u(t-1); h = t.*(u(t)-u(t-1));
y = dt*conv(x,h); % Compute the convolution of x(t) and h(t) subplot(221)
plot(t,x), grid on, title('Signal x(t)'), axis([t0,t1,-0.2,1.2]) subplot(222)
plot(t,h), grid on, title('Signal h(t)'), axis([t0,t1,-0.2,1.2]) subplot(212)
t = 2*t0:dt:2*t1; % Again specify the time range to be suitable to the % convolution of x and h.
plot(t,y), grid on, title('The convolution of x(t) and h(t)'), axis([2*t0,2*t1,-0.1,0.6]), xlabel('Time t sec')
在有些时候,做卷积和运算的两个序列中,可能有一个序列或者两个序列都非常长,甚至是无限长,MATLAB处理这样的序列时,总是把它看作是一个有限长序列,具体长度由编程者确定。实际上,在信号与系统分析中所遇到的无限长序列,通常都是满足绝对可和或绝对可积条件的信号。因此,对信号采取这种截短处理尽管存在误差,但是通过选择合理的信号长度,这种误差是能够减小到可以接受的程度的。若这样的一个无限长序列可以用一个数学表达式表
示的话,那么,它的长度可以由编程者通过指定时间变量n的范围来确定。
例如,对于一个单边实指数序列x[n] = 0.5nu[n],通过指定n的范围为0 ≤n ≤ 100,则对应的x[n]的长度为101点,虽然指定更宽的n的范围,x[n]将与实际情况更相符合,但是,注意到,当n大于某一数时,x[n]之值已经非常接近于0了。对于序列x[n] = 0.5nu[n],当n = 7时,x[7] = 0.0078,这已经是非常小了。所以,对于这个单边实指数序列,指定更长的n的范围是没有必要的。当然,不同的无限长序列具有不同的特殊性,在指定n的范围时,只要能够反映序列的主要特征就可以了。
3.4 用线性常系数微分方程描述LTI系统
线性常系数微分方程或差分方程是描述LTI系统的另一个时域模型。一个连续时间LTI系统,它的输入信号x(t)输出信号y(t)关系可以用下面的微分方程来表达
dky(t)Mdkx(t)??bk ?ak 1.12 kkdtdtk?0k?0N式1.12中,max (N, M)定义为系统的阶。式1.12描述了LTI系统输入信号和输出信号的一种隐
性关系(Implicit relationship)。为了求得系统响应信号的显式表达式(Explicit expression),必须对微分方程和差分方程求解。
在MATLAB中,一个LTI系统也可以用系统微分方程的系数来描述,例如,一个LTI连续时间系统的微分方程为
d2y(t)dy(t)?3?2y(t)?x(t) 2dtdtMATLAB则用两个系数向量num = [1]和den = [1 3 2]来描述该系统,其中num和den分别
表示系统微分方程右边和左边的系数,按照微分运算的降阶排列。
MATLAB的内部函数impulse(),step(),initial(),lsim() 可以用来计算并绘制连续时间LTI系统的单位冲激响应,单位阶跃响应,零输入响应和任意信号作用于系统的零状态响应。这些函数的用法描述如下:
h= impulse(num, den, T) 和 impulse(num, den, T) s = step(num, den, T) 和 step(num, den, T)
y = lmis(num, den, x, t) 和 lmis(num, den, x, t)
函数impulse(),step()用来计算由num和den表示的LTI系统的单位冲激响应和单位阶跃响应,响应的时间范围为0~T,其中den和num分别为系统微分方程左右两边的系数向量,T为指定的响应的终点时间。h和s的点数默认值为101点。由此可以计算时间步长为dt = T/(101-1)。不带返回值的函数如impulse(num, den, T)和step(num, den, T)将直接在屏幕上绘制系统的单位冲激响和单位阶跃响应曲线。带返回值的函数如y = lmis(num, den, x, t)和y = lmis(num, den, x, t),用来计算由num和den表示的LTI系统在输入信号x作用下的零状态响应。其中t为指定的时间变化范围,x为输入信号,它们的长度应该是相同的。如带返回参数y,则将计算的响应信号保存在y中,若不带返回参数y,则直接在屏幕上绘制输入信号x和响应信号y的波形图。
共分享92篇相关文档