文章目录
一、自叙
说来惭愧,“卷积”这两个字本人从大学专业课第一次接触到现在一直没有理解。出来工作后也经常听说卷积,这几年开始流行的人工智能,也经常听到“卷积神经网络”这个词。所以我时常在想:卷积到底是啥意思?为什么好多领域都在用卷积?为什么卷积公式是这样?到底怎样卷积?带着这样的疑问,开始看各种视频,各种博文来理解卷积。因此写下此篇文章来记录一下。
二、卷积的定义
卷积、旋积或褶积(英语:Convolution)是通过两个函数f和g生成第三个函数的一种数学运算,其本质是一种特殊的积分变换,表征函数f与g经过翻转和平移的重叠部分函数值乘积对重叠长度的积分。(源于:百度百科)
上面是百度百科给的定义,第一次接触的时候也是一头雾水,就看懂了一句:卷积是一种数学运算。
既然卷积是一种数学运算,那么肯定有公式吧。我以信号与系统里的卷积公式来解释。
-
连续LTI系统下的卷积公式为:

-
离散LTI系统下的卷积公式为:

看到这里依然云里雾里的,接下来我们一步步解释。
三、卷积公式的推导
3.1 什么是LTI系统?
LTI系统也叫线性时不变系统。L为(linear)单词的首字母,意思为线性,TI为(time invariant)的两个单词首字母,意思为时不变。
如何理解LTI系统?
- 首先来看什么是线性系统,前提我们要了解什么是齐次性和叠加性。
-
齐次性:
如果一个输入 x 1 ( t ) x_1(t) x1(t)经过一个系统后输出 y 1 ( t ) y_1(t) y1(t),则有输入 α x 1 ( t ) αx_1(t) αx1(t)经过此系统后输出 α y 1 ( t ) αy_1(t) αy1(t)。称此系统满足齐次性。


-
叠加性:
如果一个输入 x 1 ( t ) x_1(t) x1(t)经过一个系统输出 y 1 ( t ) y_1(t) y1(t),另一个输入 x 2 ( t ) x_2(t) x2(t)经过此系统输出 y 2 ( t ) y_2(t) y2(t),则有输入 x 1 ( t ) + x 2 ( t ) x_1(t)+x_2(t) x1(t)+x2(t)经过此系统后输出 y 1 ( t ) + y 2 ( t ) y_1(t)+y_2(t) y1(t)+y2(t)。称此系统满足叠加性


所以线性系统就是:一个系统满足齐次性和叠加性就叫线性系统。
- 什么是时不变系统?
如果一个输入 x ( t ) x(t) x(t)经过一个系统后输出 y ( t ) y(t) y(t),则有 x ( t − t 0 ) x(t-t_0) x(t−t0)经过此系统后输出 y ( t − t 0 ) y(t-t_0) y(t−t0),称此系统为时不变系统。


同时满足线性和时不变性的就叫线性时不变系统。
3.2 单位脉冲以及单位脉冲响应
- 连续时间单位脉冲信号:

信号在0时刻为1,其它时刻信号为0的信号就叫连续时间单位脉冲信号 - 离散时间单位脉冲信号:

信号在n=0这个序列点为1,其它序列点为0的信号就叫离散时间单位脉冲信号,单位脉冲信号 δ 作用与一个系统,系统产生的输出(响应)就叫单位脉冲响应h。

3.3 综合上面的知识,简单的做个计算题

已知一个输入
x
0
[
n
]
x_0[n]
x0[n]经过LTI系统,得到输出为
y
0
[
n
]
y_0[n]
y0[n],由上图第一行所示,求下面的输入
x
[
n
]
x[n]
x[n]经过此LTI系统的输出为多少?
解:
由上面线性时不变性质可知,输入信号产生的线性变换、时移、反转、信号叠加,在输出系统上会产生同样的变化。
所以,
x
[
n
]
x[n]
x[n]可以分成
2
x
0
[
n
]
+
x
0
[
n
−
1
]
2x_0[n] + x_0[n-1]
2x0[n]+x0[n−1],入下图所示:

则
y
[
n
]
y[n]
y[n]也应该是
2
x
0
[
n
]
2x_0[n]
2x0[n]产生的输出
2
y
[
0
]
+
x
0
[
n
−
1
]
2y[0] + x_0[n-1]
2y[0]+x0[n−1]产生的输出
y
0
[
n
−
1
]
y_0[n-1]
y0[n−1],如下图所示:

所以

总结:对于一个离散LTI系统,如果我们知道单位脉冲函数
δ
[
n
]
δ[n]
δ[n]对应的单位脉冲响应
h
[
n
]
h[n]
h[n],那么我们就知道了所有
x
[
n
]
x[n]
x[n]通过这个LTI系统后的输出
y
[
n
]
y[n]
y[n]

上述这道计算题就是卷积,如果省略这几张图示过程可以直接写成:

3.4 列表法求卷积
还是上述这个题目:

按照列表法计算卷积:
首先要确定 y [ n ] y[n] y[n]的取值范围
- y [ n ] y[n] y[n]左边的取值范围 = x [ n ] x[n] x[n]左边的取值范围 + h [ n ] h[n] h[n]左边取值范围 = 0 + (-1) = -1
-
y
[
n
]
y[n]
y[n]右边的取值范围 =
x
[
n
]
x[n]
x[n]右边的取值范围 +
h
[
n
]
h[n]
h[n]右边取值范围 = 1 + 1 = 2
所以y[n]的取值范围为 -1、0、1、2

列表法求出的卷积一定要确定好0点的位置,然后顺序画出输出的图形就可以了。
由上图可以看出,列表法求卷积比一步一步的画图求卷积来得更快一些。其实列表法的计算步骤就是一步一步画图的略写。
3.5 卷积公式推导以及计算
上面以及说明了什么是卷积,以及怎样一步一步计算卷积,但是我们知道卷积是一种数学运算,也有卷积公式:

那此公式是怎样来的呢?如何用此公式来计算卷积?还是用上面那道题目,我们来推导一下卷积公式:
- x[n]表示为δ[n-i]求和的形式:

以此类推,所有的
x
[
n
]
x[n]
x[n]都能这样表示出来,就有:

因此,由LTI系统的性质可以得到:
所以一开始看到这云里雾里的卷积公式就按照线性时不变系统的性质推导完成了,接下来我们看如何利用卷积公式来求卷积。
先将卷积公式变形一下:

由上诉公式可知,卷积就是一个 反转、平移、相乘、叠加的一个过程。 所以卷积公式计算的步骤为:
- 依然确定 y [ n ] y[n] y[n]的取值范围
- y [ n ] y[n] y[n]左边的取值范围 = x [ n ] x[n] x[n]左边的取值范围 + h [ n ] h[n] h[n]左边取值范围 = 0 + (-1) = -1
-
y
[
n
]
y[n]
y[n]右边的取值范围 =
x
[
n
]
x[n]
x[n]右边的取值范围 +
h
[
n
]
h[n]
h[n]右边取值范围 = 1 + 1 = 2
所以 y [ n ] y[n] y[n]的取值范围为 -1、0、1、2
-
反转 h [ n ] h[n] h[n]

-
平移 h [ n ] h[n] h[n]

-
x [ n ] x[n] x[n]与 h [ n ] h[n] h[n]相乘

-
再次平移 h [ n ] h[n] h[n]

-
x [ n ] x[n] x[n]与 h [ n ] h[n] h[n]对应相乘,结果再相加

-
再次平移 h [ n ] h[n] h[n]

-
x [ n ] x[n] x[n]与 h [ n ] h[n] h[n]对应相乘,结果再相加

-
再次平移 h [ n ] h[n] h[n]

-
x [ n ] x[n] x[n]与 h [ n ] h[n] h[n]对应相乘

所以 y [ n ] y[n] y[n]={2,-1,3,2}
绘制图形如下:

3.6 matlab实现卷积运算

结果依然与其它计算一样。
四、卷积的理解
现在我们知道了卷积公式的是怎样来的,以及如何计算。但是卷积到底是啥意思?我们用着公式计算出的结果有啥意义?
参考了其它帖子的一些理解卷积的故事:
假如你被别人打了一拳,这一拳导致的疼痛感会在1小时后消失(拳头的轻重大小导致的疼痛感觉不一样,但都在一小时后消失)。设最轻的一拳在一小时内的疼痛感觉函数为h(t),每秒钟记录的疼痛感觉序列为h[n],用最轻力度的两倍力度打你,疼痛感就是2h(t),f(n)倍最轻力度,就是f(n)h(t)了吧],当别人在一小时内在第一秒,第二秒,第三秒…第六十秒……打你的时,这就是说在0到2小时内你会感觉疼,那么在这0到2小时的任意一个时刻的疼痛程度Y(t)怎么表示呢?就是每拳的疼痛效果叠加,0到n的f(n)h(t-n)相加,如f(1)h(t-1)+f(2)h(t-2)……,当n很小时,为0.00000001时,就用积分符号啦。n次抽象为τ就是我们平时的f(t)与h(t)的卷积啦!
专业一点的说法就是:系统的响应(输出)不仅与当前时刻系统的输入有关,也跟之前若干时刻的输入有关,因为我们可以理解为这是之前时刻的输入信号经过一种过程(这种过程可以是递减,削弱,或其他)对现在时刻系统输出的影响,那么显然,我们计算系统输出时就必须考虑现在时刻的信号输入的响应以及之前若干时刻信号输入的响应之“残留”影响的一个叠加效果。
参考:

4万+

被折叠的 条评论
为什么被折叠?



