深入浅出理解卷积运算

提起卷积运算相信大家都不陌生,这是一种很常见的运算。我们在学习《信号与系统》时就一直在和卷积打交道,在后来的一些课程中也有卷积运算的身影,比如《自动控制原理现代部分》中的卷积定理等。
在学习《信号与系统》时我们知道了卷积的定义,对于两个函数f ( x ) f(x)f(x)g ( x ) g(x)g(x),他们的卷积 f ∗ g ( n ) f*g(n)fg(n) 的公式如下:
连续形式:f ∗   g ( n ) = ∫ − ∞ + ∞ f ( τ ) ∗ g ( n − τ ) d τ \mathrm{f} * \mathrm{~g}(n)=\int_{-\infty}^{+\infty} f(\tau) * g(n-\tau) d \tauf g(n)=+f(τ)g(nτ)dτ //n为实数
离散形式:f ∗   g ( n ) = ∑ τ = − ∞ + ∞ f ( τ ) ∗ g ( n − τ ) / / n , τ \mathrm{f} * \mathrm{~g}(n)=\sum_{\tau=-\infty}^{+\infty} f(\tau) * g(n-\tau) \quad / / \mathrm{n}, \tauf g(n)=τ=+f(τ)g(nτ)//n,τ为正整数
通过如上公式可以看到,卷积其实就是将一个函数 先进行翻转(公式中体现为− τ -\tauτ− n -nn)再向右平移n nnN NN的长度后得到函数g ∗ g^*g,再让g ∗ g^*gf ff进行累积求和或相乘求积分。通过分析我们已经知道了卷积的运算方法,也知道了卷积计算名字的由来:‘卷’就是对 进行的翻转和平移过程,就像卷纸巾一样,‘积’就是积求和或相乘求积分的过程。
在这里插入图片描述
我们对于卷积的理解一般就是这样了。但是卷积运算的意义究竟是什么呢?对于函数g ( x ) g (x)g(x)为什么要进行翻转后在平移的操作呢?平移的长度n nn代表着什么意义呢?带着这样的问题,我在网络上查阅了一些资料,最终写出一些体会与大家分享,来回答这三个问题。
一:卷积运算的意义是什么?
我们先抛开运算过程中对g gg所作的翻转和平移过程,设g gg作了翻转和平移得到函数 g ∗ g^*gg ∗ g^*gf ff所做的运算其实可以理解为 函数在 函数上的加权叠加。从信号的角度上来讲,也就是说将f ff函数(f ff 一般在信号中是指输入信号,g gg在信号中一般指响应函数)上各个选定的时间点上按照g ∗ g*g所规定的权值进行加权叠加。如下图所示,假设g ( n ) g(n)g(n)未知,g ∗ ( n ) = e n g^*(n)=e^ng(n)=en,为一个衰减函数,则对应相乘累加后的卷积:f ∗ g ( n ) = f ( 0 ) + f ( 1 ) ∗ e − 1 + f ( 2 ) ∗ e − 2 + f ( 3 ) ∗ e − 3 + f ( 4 ) ∗ e − 4 + f ( 5 ) ∗ e − 5 + f ( 6 ) ∗ e − 6 + f ( 7 ) ∗ e − 7 + f ( 8 ) ∗ e − 8 + f ( 9 ) ∗ e − 9 + f ( 10 ) ∗ e − 10 + ⋯ + f ( n ) ∗ e − n \begin{array}{l} f * g(n)=f(0)+f(1) * e^{-1}+f(2) * e^{-2}+f(3) * e^{-3}+ \\ f(4) * e^{-4}+f(5) * e^{-5}+f(6) * e^{-6}+f(7) * e^{-7}+f(8) * \\ e^{-8}+f(9) * e^{-9}+f(10) * e^{-10}+\cdots+f(n) * e^{-n} \end{array}fg(n)=f(0)+f(1)e1+f(2)e2+f(3)e3+f(4)e4+f(5)e5+f(6)e6+f(7)e7+f(8)e8+f(9)e9+f(10)e10++f(n)en公式中的结果就是f ff信号各时间点采集值的加权和。
在这里插入图片描述
二:为什么要对g gg进行翻转后在平移的操作及平移的长度n nn代表着什么意义?
沿用上一个问题中的举例,首先输入信号f ff离散后的图像如下图的红色轨迹,对于这个输入信号,f ( 0 ) f(0)f(0)表示t = 0 t=0t=0时刻的信号,f ( 1 ) f(1)f(1)表示t = 1 t=1t=1时刻的信号,。。。f ( 10 ) f(10)f(10)表示t = 10 t=10t=10时刻的信号,也是图中最后进入的信号,也就是最新的信号。而途中的响应函数g gg离散后如下图的黑色轨迹,是一个指数衰减函数,其物理意义是信号经过响应函数后随着时间的流逝会不断衰减,如t = 0 t=0t=0时输入信号f ( 0 ) f(0)f(0)t = 1 t=1t=1时刻衰减为f ( 0 ) ∗ e − 1 f(0)*e^{-1}f(0)e1 ,在t = 3 t=3t=3时刻衰减为f ( 0 ) ∗ e − 3 f(0)*e^{-3}f(0)e3 ,t = 1 t=1t=1时刻的信号在t = 2 t=2t=2时刻时衰减为f ( 1 ) ∗ e − 1 f(1)*e^{-1}f(1)e1,最终在t = n t=nt=n的时刻求得所有采集到的输入信号经过时间衰减后的输出和F ( n ) F(n)F(n)。这个输出F ( n ) F(n)F(n)的值受到在t = 0 t=0t=0时刻到t = n t=nt=n时刻之间所有采集到的输入信号的影响,只是随着时间的流逝,越早采集的信号对当前的输出影响就越小。
在这里插入图片描述

因此,输入信号f通过与g函数进行某种运算后可以得到输出F ( n ) F(n)F(n) 。而这之间的运算关系是怎样的呢?通过上述分析我们假设要求取F ( 5 ) F(5)F(5),即t = 5 t=5t=5时刻及之前所有采集到的信号的一个加权求和。按照分析:F ( 5 ) = f ( 0 ) ∗ e − 5 + f ( 1 ) ∗ e − 4 + f ( 2 ) ∗ e − 3 + f ( 3 ) ∗ e − 2 + f ( 4 ) ∗ e − 1 + f ( 5 ) \begin{array}{l} F(5)=\\f(0) * e^{-5}+f(1) * e^{-4}+f(2) * e^{-3}+f(3) * e^{-2}+f(4) * e^{-1}+f(5) \end{array}F(5)=f(0)e5+f(1)e4+f(2)e3+f(3)e2+f(4)e1+f(5)因为f ( 0 ) f(0)f(0)是最早采集到的信号,故其衰减的最为厉害,权值也最小。将其中的权值用响应函数g gg来表示,则F ( 5 ) = f ( 0 ) ∗ g ( 5 ) + f ( 1 ) ∗ g ( 4 ) + f ( 2 ) ∗ g ( 3 ) + f ( 3 ) ∗ g ( 2 ) + f ( 4 ) ∗ g ( 1 ) + f ( 5 ) ∗ g ( 0 ) = f ( 0 ) ∗ g ( 5 − 0 ) + f ( 1 ) ∗ g ( 5 − 1 ) + f ( 2 ) ∗ g ( 5 − 2 ) + f ( 3 ) ∗ g ( 5 − 3 ) + f ( 4 ) ∗ g ( 5 − 4 ) + f ( 5 ) ∗ g ( 5 − 5 ) = ∑ τ = 0 5 f ( τ ) ∗ g ( 5 − τ ) \begin{array}{l} F(5)=\\f(0) * g(5)+f(1) * g(4)+f(2) * g(3)+f(3) * g(2)+ f(4) * g(1)+f(5) * g(0)\\=\\ f(0) * g(5-0)+f(1) * g(5-1)+f(2) * g(5-2)+ f(3) * g(5-3)+f(4) * g(5-4)+f(5) * g(5-5) \\=\\\sum_{\tau=0}^{5} f(\tau) * g(5-\tau) \end{array}F(5)=f(0)g(5)+f(1)g(4)+f(2)g(3)+f(3)g(2)+f(4)g(1)+f(5)g(0)=f(0)g(50)+f(1)g(51)+f(2)g(52)+f(3)g(53)+f(4)g(54)+f(5)g(55)=τ=05f(τ)g(5τ)看到这个公式大家有没有一点熟悉的感觉,没错这个式子F ( 5 ) = s u m τ = 0 5 f ( τ ) ∗ g ( 5 − τ ) F(5)=sum_{\tau=0}^{5} f(\tau) * g(5-\tau)F(5)=sumτ=05f(τ)g(5τ)和卷积运算的离散形式∑ τ = − ∞ + ∞ f ( τ ) ∗ g ( n − τ ) \sum_{\tau=-\infty}^{+\infty} f(\tau) * g(n-\tau)τ=+f(τ)g(nτ)几乎一模一样,只是把n nn取了整数5。
看到这里可能大家已经隐约知道了卷积运算中对g进行翻转和平移的作用,为了让大家更直观的看到翻转和平移作用,引用知乎博主palet的解释:
在这里插入图片描述
首先这是给定的输入信号f ff和指数衰减响应函数g gg 。为了达到上文提到的加权求和的效果,当取T(也就是上文的n nn)=10时,f ( t ) f(t)f(t)g ( t ) g(t)g(t)的累积对应关系如下图所示:
在这里插入图片描述
如上图所示,对于t = 10 t=10t=10时刻最新的信号采集值f ( 10 ) f(10)f(10)是完全没有衰减的,因此与g ( 0 ) = 1 g(0)=1g(0)=1相乘,对于其它时刻的对应也如上分析,最终得到最近10个输入信号的采集值加权叠加的结果,具体请参看第二个问题的第二段。
这样的对应关系看起来十分复杂,因此我们对g ( t ) g(t)g(t)进行一些处理,首先进行翻转,翻转后f ( t ) f(t)f(t)与$g(-t) $的乘积对应关系如下图:
在这里插入图片描述

翻转之后乘积的对应关系似乎看起了有了一些规则,但依旧有些不易观察,之后对g ( − t ) g(-t)g(t)进行长度为T(上文的n nn)的右移得到g ( T − t ) g(T-t)g(Tt),其对应关系变为了下图:
在这里插入图片描述
通过这张图后可以很清晰的看见f ( t ) f(t)f(t)g ( T − t ) g(T-t)g(Tt)的乘积对应关系。又因为f ( t ) f(t)f(t)是实际的输入信号,其在t tt的负半轴是没有数值的,因此f ( t ) f(t)f(t)g ( t ) g(t)g(t)做卷积运算也就是f ( t ) f(t)f(t)g ( T − t ) g(T-t)g(Tt)做整个数轴上的累积运算时与作( 0 , T ) (0,T)(0,T)的累积运算结果是相同的。因此可以得出卷积运算满足了信号指数衰减求和的结果。大家应该也明白了卷积运算在信号处理上的物理意义。同时大家也能够明白了平移长度n nn所代表的意义了,n nn代表的就是积分的x轴长度或者累加的次数,在信号上就是当前已采集输入信号值的次数。
本文主要分享的是卷积运算在信号处理上的一些物理意义,希望能够帮助读者更好的理解卷积运算。但实际上卷积运算在很多其他的地方也有很大的作用,比如图像识别中的边缘提取,卷积神经网络等等,有兴趣的话大家可以自行去了解。


版权声明:本文为qq_38001359原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。