啰嗦开场白
读本科期间,信号与系统里面经常讲到卷积(convolution),自动控制原理里面也会经常有提到卷积。硕士期间又学了线性系统理论与数字信号处理,里面也是各种大把大把卷积的概念。至于最近大火的深度学习,更有专门的卷积神经网络(Convolutional Neural Network, CNN),在图像领域取得了非常好的实际效果,已经把传统的图像处理的方法快干趴下了。啰啰嗦嗦说了这么多卷积,惭愧的是,好像一直以来对卷积的物理意义并不是那么清晰。一是上学时候只是简单考试,没有仔细思考过具体前后的来龙去脉。二是本身天资比较愚钝,理解能力没有到位。三则工作以后也没有做过强相关的工作,没有机会得以加深理解。趁着年前稍微有点时间,查阅了一些相关资料,力争将卷积的前世今生能搞明白。
1.知乎上排名最高的解释
直接看图,不信看不懂。以离散信号为例,连续信号同理。
下面通过演示求x[n] * y[n]的过程,揭示卷积的物理意义。
重复一遍,这就是卷积的意义:加权叠加。
对于线性时不变系统,如果知道该系统的单位响应,那么将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应 加权叠加,就直接得到了输出信号。
以上是知乎上排名最高的回答。比较简单易懂。
2.卷积的另外解释
卷积表示为 y ( n ) = x ( n ) ∗ h ( n ) y(n) = x(n)*h(n) y(n)=x(n)∗h(n)
使用离散数列来理解卷积会更形象一点,我们把y(n)的序列表示成 y ( 0 ) , y ( 1 ) , y ( 2 ) , ⋯ y(0),y(1),y(2),\cdots y(0),y(1),y(2),⋯, 这是系统响应出来的信号。
同理, x ( n ) x(n) x(n)的对应时刻的序列为 x ( 0 ) , x ( 1 ) , x ( 2 ) , ⋯ x(0),x(1),x(2),\cdots x(0),x(1),x(2),⋯
其实我们如果没有学过信号与系统,就常识来讲,系统的响应不仅与当前时刻系统的输入有关,也跟之前若干时刻的输入有关,因为我们可以理解为这是之前时刻的输入信号经过一种过程(这种过程可以是递减,削弱,或其他)对现在时刻系统输出的影响,那么显然,我们计算系统输出时就必须考虑现在时刻的信号输入的响应以及之前若干时刻信号输入的响应之“残留”影响的一个叠加效果。
假设0时刻系统响应为 y ( 0 ) y(0) y(0),若其在1时刻时,此种响应未改变,则1时刻的响应就变成了 y ( 0 ) + y ( 1 ) y(0)+y(1) y(0)+y(1),叫序列的累加和(与序列的和不一样)。但常常系统中不是这样的,因为0时刻的响应不太可能在1时刻仍旧未变化,那么怎么表述这种变化呢,就通过h(t)这个响应函数与x(0)相乘来表述,表述为 x ( m ) × h ( m − n ) x(m)×h(m-n) x(m)×h(m−n),具体表达式不用多管,只要记着有大概这种关系,引入这个函数就能够表述 y ( 0 ) y(0) y(0)在1时刻究竟削弱了多少,然后削弱后的值才是 y ( 0 ) y(0) y(0)在1时刻的真实值,再通过累加和运算,才得到真实的系统响应。
再拓展点,某时刻的系统响应往往不一定是由当前时刻和前一时刻这两个响应决定的,也可能是再加上前前时刻,前前前时刻,前前前前时刻,等等,那么怎么约束这个范围呢,就是通过对 h ( n ) h(n) h(n)这个函数在表达式中变化后的 h ( m − n ) h(m-n) h(m−n)中的m的范围来约束的。即说白了,就是当前时刻的系统响应与多少个之前时刻的响应的“残留影响”有关。
当考虑这些因素后,就可以描述成一个系统响应了,而这些因素通过一个表达式(卷积)即描述出来不得不说是数学的巧妙和迷人之处了。
3.卷积的数学定义
4.卷积的应用
5.补充
另外在知乎上看到非常好也非常生动形象的解释,特意复制粘贴过来。(知乎马同学的解释)
卷积,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分、级数,所以看起来觉得很复杂。

这个特征有什么意义?
只看数学符号,卷积是抽象的,不好理解的,但是,我们可以通过现实中的意义,来习惯卷积这种运算,正如我们小学的时候,学习加减乘除需要各种苹果、糖果来帮助我们习惯一样。
我们来看看现实中,这样的定义有什么意义。
2 离散卷积的例子:丢骰子
我有两枚骰子:



符合卷积的定义,把它写成标准的形式就是:
( f ∗ g ) ( 4 ) = ∑ m = 1 3 f ( 4 − m ) g ( m ) \displaystyle (f*g)(4)=\sum _{m=1}^{3}f(4-m)g(m) (f∗g)(4)=m=1∑3f(4−m)g(m)
3 连续卷积的例子:做馒头
看起来很显眼。
平滑这座山峰的办法之一就是,把山峰刨掉一些土,填到山峰周围去。用数学的话来说,就是把山峰周围的高度平均一下。
4.2 计算
卷积可以帮助实现这个平滑算法。
然后用下面这个平均矩阵(说明下,原图的处理实际上用的是正态分布矩阵,这里为了简单,就用了算术平均矩阵)来平滑图像:
g = [ 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 ] g=\begin{bmatrix} \frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\ \frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\ \frac{1}{9} & \frac{1}{9} & \frac{1}{9} \end{bmatrix} g=⎣⎡919191919191919191⎦⎤
记得刚才说过的算法,把高频信号与周围的数值平均一下就可以平滑山峰。

写成卷积公式就是:
( f ∗ g ) ( 1 , 1 ) = ∑ k = 0 2 ∑ h = 0 2 f ( h , k ) g ( 1 − h , 1 − k ) \displaystyle (f*g)(1,1)=\sum _{k=0}^{2}\sum _{h=0}^{2}f(h,k)g(1-h,1-k) (f∗g)(1,1)=k=0∑2h=0∑2f(h,k)g(1−h,1−k)
要求$ c_{4,5} $,一样可以套用上面的卷积公式。
这样相当于实现了 g 这个矩阵在原来图像上的划动(准确来说,下面这幅图把 g 矩阵旋转了 18 0 ∘ 180^\circ 180∘ ):
6.另外一个关于卷积的有意思的解释
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199172.html原文链接:https://javaforall.net
