参考《最容易理解的对卷积(convolution)的解释》 https://blog.csdn.net/bitcarmanlee/article/details/54729807
这篇博客详细讲解了“卷积”,提及了为什么要反转180度,我简述下。
1.卷积的来源
信号与系统里面经常讲到卷积(convolution),自动控制原理里面也会经常有提到卷积,线性系统理论与数字信号处理,里面也是各种大把大把卷积的概念。
信号的输出不仅与当前时刻的输入有关,也跟之前若干时刻的输入有关,所以输出的信号是一个加权叠加。
求x[n] * y[n]。
第1步,x[n]乘以y[0]并平移到位置0。
第2步,x[n]乘以y[1]并平移到位置1。
第3步,x[n]乘以y[2]并平移到位置2。
最后,把上面三个图叠加,就得到了x[n] * y[n]。
2.旋转180的来源
2.1.卷积的定义
2.1.参数n、τ、n-τ
注意上面公式,函数f(τ)、g(n-τ)的参数n、τ、n-τ和是 n = τ + (n-τ)。
2.2.代入1中的图示
2.3.转换
相对于2.1的图,如果要将f(τ)与g(n-τ)下标相同的元素进行运算,就要将g(n-τ)反转180度,再与f(τ)运算,就是下图这个样子,这就是为什么要反转180度。
3.Python的scipy.signal库
volume and kernel should have the same dimensionality
import numpy as np
f=np.array([1,2,3,4])
g=np.array([4,5])
import scipy.signal as sg
convolve = sg.convolve(f, g)
print(convolve) # [ 4 13 22 31 20]