再谈信号处理之卷积
很多童鞋在学数字信号处理的时候对卷积的概念感到困惑,因为国内教材比较晦涩,大部分老师估计也就PPT一下公式而已,比如传统的图像处理,其中边缘提取就会用到卷积的概念,用高斯核去卷积原图像实际就是对原图像进行滤波(去噪),Canny等算子的核心也是卷积;现代计算机视觉和机器学习中也经常会用到卷积的概念,比如深度学习中的卷积神经网络(CNN),对输入数据的预处理部分就是通过多核卷积提取数据特征。为了帮助大家彻底领悟“卷积”的概念,还是先从最基础的谈起吧。
这是传统数字信号处理给出的模拟信号的卷积公式:
g(x)=∫−∞+∞f(x)h(τ−x)dτ(1)
离散信号的卷积公式:
g(n)=k=−∞∑∞f(n)h(n−k)(2)
要想弄明白卷积,先要回顾一下信号与系统中的一个重要概念 - 线性时不变系统(LTI),只有彻底理解了LTI,才能更深刻地去理解“卷积”最基本的概念和原理。
1. 线性时不变系统
线性时不变系统及其系统响应
为了表达的简洁,下面系统模拟的就用h(x)表示,离散的就用h(n)表示,线性时不变系统顾名思义就是:
线性:实际就是加法(乘法的实质也是加法),如果将信号f1(x)输入系统h(x)后得到的响应是 g1(x),f2(x)输入系统h(x)后得到的响应是g2(x),f1(x)+f2(x)同时输入系统h(x)后得到的响应是g1(x)+g2(x), 系统h(x)就是线性的。
爱护环保的你在你心爱的花盆里插下了含苞欲放的牡丹和玫瑰f1(x)+f2(x),上苍有感于你的爱心,很快在你的花盆里给你绽放出了雍容华贵的牡丹花和娇艳欲滴的玫瑰花g1(x)+g2(x),同样,插两株牡丹会开两朵牡丹花,插三株玫瑰会开三朵玫瑰花,你的花盆实际上就是线性系统。
时不变:如果对于信号f(t)的输入,系统h(t)产生的响应是g(t),对应于f(t−Δt)的输入,系统h(t)的响应是g(t−Δt),也就是说信号f(t)还是那个样子只是延时了时间Δt才输入给系统h(t),得到的输出也是g(t)的样子,也只是做了Δt的延时,即g(t−Δt),那系统h(t)就是时不变的。
爱臭美的童鞋肯定对时不变系统肯定有着深刻的了解,都知道镜子从来都是你的真实写照,今天心情愉悦的你显得很年轻,因为你准备晚上约女友共进晚餐,这时镜子中你的镜像一副帅气逼人的模样,结果晚餐点的菜让你女友非常不满,还当面训斥了你,晚饭后你的女友悻悻而去,这时回到家的你心情自然不好,对着镜子端详,这时的你脸上写满苍伤,顿觉老了许多。哈哈,虽然受到女友训斥,饱经苍伤,但镜子里还是你的写照,因为这时,输入的是f(t−Δt)的你,镜子的输出自然是一脸苦逼的你g(t−Δt),别误以为是人家隔壁老王。
一个系统同时具备了线性和时不变性质,就是线性时不变系统。
单位脉冲信号δ(n)输入系统h(n)后得到的响应为h(n)=[1,−1,2]。
假设f(n)=δ(n)+2δ(n−1)+3δ(n−2)=[1,2,3],则输出:
g(n)=h(n)+2h(n−1)+3h(n−2)=f(0)×h(n)+f(1)×h(n−1)+f(2)×h(n−2)
2. 理解卷积
这里注意一点,以n=0为原点
f(n)=[1,2,3],要理解为f(n)=[...,0,1,2,3,0,...],f(0)=1,f(1)=2,f(2)=3,之所以不按理解的方式写,是因为那样不好定位坐标原点。


聪明的你应该可以从上图看出卷积的含义了。下面再列表计算让你更清楚卷积为什么会先对对卷积核h(k)进行反摺h(−k)再和输入信号f(k)相乘求和(第一次操作h(0−k)和f(k)的交叠部分只有h(0)和f(0)),平移卷积核再和输入信号相乘,…,最后把合成,即
n=0:n=1:n=2:n=3:n=4:f(0)=f(1)=f(2)=f(3)=f(4)=f(0)h(0)f(0)h(1)f(0)h(2)++f(1)h(0)f(1)h(1)f(1)h(2)++f(2)h(0)f(2)h(1)f(2)h(2)

上表系统的响应部分:
横看:浅红框起来的是系统h(n)对f(0)=1的响应,浅灰框起来的是系统h(n)对f(1)=2的响应, 浅黄框起来的是系统h(n)对f(2)=3的响应。可已看出,系统对每一时刻n=0,1,2输入的响应都是一个脉冲串,持续的时间为3个时间单位,也就是说时刻n=i的输入不仅会影响当前时刻的输出,对系统输出的影响还会持续2个时间单位n=i+1和n=i+2(当然很多真实系统,每个时刻的输入会对后续输出影响很长时间,这里仅是为说明问题举例了个简单例子h(n)=[1,−1,2],每一时刻的输入仅影响3个时间点的输出)。将所有输入完成,再来看每个时刻的输出,你会发现,在任何时刻的输出,都可能会受它前面输入的影响,所以所有时刻的输出可以看做该时刻之前(包括当前时刻)的输入响应产生的叠加,当然比较前面的输入响应的影响可能为0。
为加深印象,这里还是再举个例子,假如你是学信号处理并乐于上实验课的学霸,你业余时间去做拳击陪练来体会卷积的思想,当然你和选手很熟,你让他先给你温柔的一拳作为单位脉冲以便度量后面的拳击力度,假如单位脉冲为10Ns(用冲量比较合适)。假设你身体的生理机能不会因冲击受损,是线性时不变系统,当你受到选手单位脉冲的拳击时,你t=0时流5滴眼泪,然后每1小时递减1滴,那么系统冲激响应是h(n)=[5,4,3,2,1]。
t=0:t=1:t=2:t=3:t=4:t=5:t=6:1(10Ns,1脉冲单位)2(20Ns,2脉冲单位)3(30Ns,3脉冲单位)第1拳效果54321++++第2拳效果108642++++第3拳效果1512963流泪=5=14=26=20=14=8=3
你痛苦的眼泪(输出)就是拳击选手用暴击你的方式(输入)对你身体(系统)进行的卷积(系统响应),或者反过来说,你的眼泪(输出)是你身体(系统)对选手拳头(输入)的卷积。
竖看:还是系统响应部分,红色箭头线(上面的3个圆圈是系统响应),从左向右看,h(n)也是处于反摺下移逐步与输入进行乘积累加运算,从这里可以看出,“反摺相乘“只是一种数学运算形式罢了,没必要纠结其物理意义。真正有意义的是卷积运算的原理和实质,至于运算形式不必太在意,用的多了自然会领悟。
横看成岭侧成峰,远近高低各不同。上面对卷积的图表解析,横看本质(原理),竖看形式(技巧),理解本质优于了解形式。
最后
画图还是比较累人,下一篇会从滤波器的角度,以比较多的实例,阐述卷积的应用,包括在传统数字信号处理、计算机视觉和深度学习等方面的应用。