从这篇
Blog 开始,笔者就和大家一起走进《信号与系统》的世界啦!课程开始的第一个拦路虎—— 既重要又难懂的“卷积”,在这次
Blog 中,笔者整理了关于卷积的前世今生,以及它的各种性质。我们开始吧!
一、预备知识
1.1 一些约定的符号
我们在以后会使用
n 来表示离散时间,
n 只能取整数。我们将会使用
t 来表示连续的时间。
因此
x[n] 表示离散时间的输入;
x(t) 表示连续时间的输入
1.2 单位冲激函数和单位阶跃函数
离散时间下的单位冲激函数和单位阶跃函数(用
δ[n]表示单位冲激函数,
u[n]表示单位阶跃函数)
连续时间下的单位冲激函数和单位阶跃函数
δ△(t)是一个宽度为
△,高度为:
△1的矩形,面积始终为1。它的面积就代表了这一段
△ 时间内冲激函数的强度 (这个概念在以后我们接触信号的连续谱时会更加深刻地理解)
1.2 系统的基本性质
这里先暂时介绍两个一会儿就需要用到的:1. 线性 2. 时不变
【1】关于系统的线性性质,很简单,就理解为系统满足叠加定理:比如对系统输入
x[n],系统就输出
h[n]。那么如果对系统输入:
a1x1[n]+a2x2[n]+⋯,那么系统也会相应地输出:
a1h1[n]+a2h2[n]+⋯
【2】时不变性:假设在
t 时刻给系统输入了一个
δ(t),系统响应
h(t);那么如果这个输入有一个
t0 的时移,那么对应地,系统的输出也会有一个
t0 的时移:
h(t−t0)
二、卷积的前世
2.1 离散时间信号的分解表示
我们先来看看一个离散的时间信号:
既然是离散的,那么我们就可以把这个信号
x[n] 看成是由若干在不同时间 n, 幅度不同的冲激组成的冲激串,分解如下图所示:
上图仅仅展示了在
n=−2,−1,0,1时刻的分解。而我们由预备知识可以知道:如果想表示一个位置在
n=−2处的单位冲激函数,很简单,就是:
δ(n+2);想表示在
n=1处的单位冲激响应,那么就是:
δ(n−1)
可是,这些不同位置的单位冲激响应的幅度怎么表示呢?因为在
x[n]内,那些冲激的幅度各异,我们知道,在
n=1处的幅度是
x[1];在
n=−2处的幅度是
x[−2]、、、
那么,在位置
n=1处的冲激信号我们就可以写成:
x[1]=x[1]δ(n−1)
在位置
n=2处的冲激信号我们可以写成:
x[2]=x[2]δ(n−2)
在位置
n=−1处的冲激信号我们可以写成:
x[−1]=x[−1]δ(n+1)
如下图所示:
因此,我们得到离散时间信号的分解表示:
x[n]=k=−∞∑+∞x[k]δ[n−k]
对上式的理解:在上面的表达中,单位冲激函数其实是用来表达某一时刻冲激的位置的,比如说
δ[n−1] 表示 n = 1 的位置,而冲激的具体幅度值则由
x[k]来表示
2.2 离散时间信号的卷积
在看这一节之前,请确保已经了解过 【预备知识】 中关于线性系统的特点。
我们定义:单位冲激响应
h是将单位冲激序列输入进系统
system 之后的输出
也就是说向系统输入一个
δ[n],则系统的输出就是
h[n] 。那么如果对应的
system 是一个线性系统,那么输入的是单位冲激函数的加权和,输出也是单位冲激响应
h 的加权和
因此,我们重新回顾上面推导出来的式子:
x[n]=k=−∞∑+∞x[k]δ[n−k]
我们惊喜地发现:
x[k]仅仅是系数,或者说是不同位置的单位冲激函数的权值! 那么,也就是说,离散时间信号可以表示成单位冲激函数的加权和!
因此,离散时间信号输入系统,得到的输出就可以表示为:
y[n]=k=−∞∑+∞x[k]hk[n](2.2.1)
其中,
δ[n−k]对应的单位冲激响应是:
hk[n]。而别忘了,我们现在讨论的系统还是时不变的!因此,我们有:
hk[n]=h0[n−k]。一般我们约定:
h0[n−k]=h[n−k]
最终,离散的时间信号通过系统得到的输出为:
y[n]=k=−∞∑+∞x[k]h[n−k](2.2.2)
我们说,式(2.2.2)就是信号
x[n] 和
h[n] 的卷积,用符号
∗ 表示:
y[n]=x[n]∗h[n]
2.2 连续时间信号的分解表示
还记得微积分的思想吗?对于一个连续时间的信号(也就是模拟信号),我们常常可以用若干个宽度为
△ 的小矩形来逼近,当
△ 越小的时候,逼近的效果越好。那么,如下图所示,我们就可以把一个连续时间信号拆分成若干个宽度为
△ 的小矩形的叠加:(下图只画了其中一些部分)
是不是和离散时间信号特别类似,只不过我们用矩形代替了线状冲激。
如何表示每一个小矩形的位置呢?—— 类似地,回顾 【预备知识】 中关于
δ△(t) 的介绍,我们用带时移的连续时间信号的单位冲激函数
δ△(t)来表示。
我们用区间的左端电代表该矩形所表示的信号
x(t) 的值,我们看图(b)是区间
[−2△,−△] ,那么该矩形所表示的
x(t) 的值就是:
x(−2△);图(d)是区间
[0,△],因此该矩形所表示的就是
x(0)。
同样,**区间的左端点也代表了这个矩形所处的位置。**图(b)是区间
[−2△,−△] ,那么该矩形的位置就是在
−2△ ,用连续时间的单位冲激函数可以表示:
δ△(t+2△)
综上,我们知道了单位矩形脉冲的位置的幅值,因此,我们可以分别表示小矩形的面积:
图(b):
x(−2△)δ△(t+2△)△
图(c):
x(△)δ△(t+△)△
图(d):
x(0)δ△(t)△
⋯
如下图所示:
因此,连续时间信号
x(t)可以表示为:
x(t)=⋯+x(−2△)δ△(t+2△)△+x(△)δ△(t+△)△+x(0)δ△(t)△+⋯=k=−∞∑+∞x(k△)δ△(t−k△)△=△→0limk=−∞∑+∞x(k△)δ△(t−k△)△=∫−∞+∞x(τ)δ△(t−τ)dτ
2.3 连续时间信号的卷积
至此,连续时间信号我们就可以用单位冲激信号的加权叠加表示了:
x(t)=∫−∞+∞x(τ)δ△(t−τ)dτ
那么类似地,经过单位脉冲响应得到的输出信号就是:
y(t)
y(t)=∫−∞+∞x(τ)h(t−τ)dτ
y(t) 是
x(t) 和
h(t) 卷积的结果,用:
y(t)=x(t)∗h(t) 来表示。
我们从输出
y(t) 的角度看看:
y(t) 其实也是一些类不同位置输入得到的响应
h(t−k△) 的叠加:
三、卷积的今生
3.1 离散时间信号卷积的计算过程
还记得离散时间信号卷积的计算公式吗?
y[n]=k=−∞∑+∞x[k]h[n−k]
为了具体化,我们令:
x[n]=αnu[n];
h[n]=u[n]
也即是说,输入信号
x[n] 是一个指数衰减乘以单位阶跃,系统衰减
h[n] 是离散时间的单位阶跃信号。如下图所示:
不过我们要知道,计算卷积
y[n] ,我们要的是
x[k] 而不是
x[n];要
h[n−k] 而不是
h[n].
x[k] 好办,我们直接把原来横坐标的 n 换成 k 即可,其中一直都有:
n=k!
而要想找到
h[n−k],首先我们先考虑
h[−k] 是什么?
h[−k] 的获得,首先我们也是把原来
h[n] 的横坐标由 n 改成 k,然后再以纵轴为对称轴反转,得到
h[−k]。
至于
h[n−k],我们可以这样理解:把
h[n−k] 看成一种滑动。什么意思呢?比如说我们要求在
n0 时刻系统的输出,那么我们就把
h[−k] 的原点移动到和
x[k] 图像中和
k=n0 对齐的位置。
那么,试想一下:如果一个系统在某一段离散时间(
n−2,n−1,n0,n1,n2,n3)都有输入,那么系统的整个输出就是系统在这几个时间点响应的叠加对吧。为了计算这些分响应,我们就分别把
h[−k] 图像的原点开始滑动,分别与
x[k] 中
k=n−2,n−1,n0,n1,n2,n3 的坐标对齐计算。
下图为例展示了上述过程:
当有若干个 n 值的时候,系统的输出
y[n] 所形成的曲线长下面这样:
3.1.1 离散时间信号卷积数学推导
根据上面这个例子,我们现在是直观地了解了卷积的计算过程,那么这个例子中,最后输出的
y[n] 的表达式是什么呢?我们一起来推导一下:
首先,大家应该已经清楚
h[n−k] 的意义了,它就是把
h[−k] 原本的零点和
x[k] 上某一时刻
k=n0 对齐。而卷积是要计算
x[k] 与
h[n−k] 重叠部分的乘积和。因此,得关注它们重叠部分。
首先,由于
x[n]=αnu[n];
h[n]=u[n]。因此,
x[k]=αku[k];
h[n−k]=u[n−k]
那么,我们有:
y[n]=k=−∞∑+∞αku[k]u[n−k]
根据上面
x[k] 和
h[n−k] 得图像,我们感觉可以把 n 划分成两个区间:
n<0 和
n>0。
【1】当
n<0 时,很明显
x[k] 与
h[n−k] 没有重叠部分,
y[n]=0
【2】当
n>0 时,
x[k] 与
h[n−k] 有重叠部分,如下图所示:
那么,此时
y[n] 序列表示可以改写成:
y[n]=k=0∑nαk
因为重叠部分总有:
u[k]u[n−k]=1
因此,在
n>0 的情况下,有:
y[n]=k=0∑nαk=1−α1−αn+1
综上,我们得出:
y[n]={01−α1−αn+1(n<0)(n≥0)
3.2 连续时间信号卷积的计算过程
回顾一下连续时间信号的卷积公式:
y(t)=∫−∞+∞x(τ)h(t−τ)dτ
现在,我们假设
x(t)=e−atu(t);
h(t)=u(t)
具体的滑动过程这里就不再赘述了,也是和离散时间信号一样的。
3.2.1 连续时间信号卷积数学推导
一样地分成两个区间:
【1】
t<0时:
h(t−τ) 和
x(τ) 没有重叠的地方,因此
y(t)=0
【2】
t>0时,
h(t−τ) 和
x(τ) 有重叠的地方,
u(τ)u(t−τ)=1,因此,我们可以把
y(t)写成:
y(t)=∫0te−aτdτ
因此,在
t>0 时,我们得到:
y(t)=∫0te−aτdτ=a1(1−e−at)
四、卷积意义的深入理解
我们假设一个系统,在某一时刻
t0=0 突然收到一个输入信号,但瞬间就又消失了(一个冲击信号),那么系统就会像下图一样缓慢地恢复到原来的状态:
下面我们来看另一种情况:假设这个系统在恢复的过程中(比如说第2s)又收到一个一样的冲击,那么,它就变成这样了:
那么,它的输出会再一次增长(而且会增长到比第一次响应更大的位置),再开始衰减。
如果继续按每隔2s的频率给它冲激响应,就会变成下面这个样子:
那么,某一时刻
t 系统的输出与什么有关呢?答案是:与每一次的冲击响应都有关,但是每一次冲击响应对
t时刻输出的贡献程度都不一样,距离
t 最近的那一次冲击响应对输出的影响最大。
某一时刻的输出就是之前很多次输入(冲击响应)乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积,卷积之后的函数就是这个系统的输出大小随时间变化的函数
如果冲击响应再密集一点,就有积分那味儿了:
因此卷积之后得到的结果就是记忆系统输出随时间变化的函数
这篇
Blog 就暂时写到这儿,我们从离散时间和连续时间的角度推导出了卷积的公式,也分别从直观角度、数学角度学习了卷积和或卷积积分的计算方法。下一篇
Blog 是本文的续集,我们将会学习卷积的一些性质,以及深入探索系统的性质和卷积的关系。我们下次再见啦!
五、参考资料
【1】《信号与系统(第二版)》奥本海姆
【2】【通信原理 入坑之路】——深入、详细地理解通信里面“卷积”概念
【3】知乎 —— 如何理解卷积
【4】《深入浅出通信原理》陈爱军