一个屁股的卷积
假如你狠狠地打了某王姓男子的屁股一巴掌,他的屁股就会肿。
但屁股不会一直肿着,随着时间推移,肿会逐渐消退,直至恢复如初。如果把”肿胀程度”随时间的变化画成一条曲线,它看起来大概是这样:

在挨打的瞬间,肿胀程度迅速飙到最高,然后随着时间慢慢消退。这条曲线完整地描述了这个屁股被打一下之后的全部反应过程,什么时候最肿、肿多高、消退得多快。
不同的屁股有不同的被打(冲击)响应:有的皮厚肉多,肿得慢消得也慢;有的娇嫩敏感,一打就肿但恢复很快。知道了一个屁股的冲击响应,至少在信号上你就完全了解了这个屁股。想完全了解一个屁股,应该从它的响应开始。
再次挨打
到目前为止,事情还很简单,打一下、肿一下、然后消退。
做一个合理的假设:每一巴掌造成的肿胀是独立的,可以叠加。也就是说,先前挨的那一巴掌不会改变屁股对下一巴掌的反应方式,无论是第一下还是第一百下,同样力度打下去,产生的曲线形状完全一样,并且肿胀之间互不干扰,只是简单地叠加在一起。
那么可以得到两个巴掌叠加的图像:

图中蓝色虚线是第一个巴掌单独造成的肿胀轨迹,橙色虚线是第二个巴掌单独造成的肿胀轨迹。第二个巴掌落下的时候,第一个巴掌造成的肿还剩大约 1.1。根据之前的假设,屁股实际肿的程度(红色实线)在第二掌落下的瞬间,在当时的肿胀程度是 1.1 再加上第二次巴掌的贡献 3.0,也就是 4.1。
不同力度挨打
现实中不可能每次都保持相同的力度打屁股。如果第一次用了 3 分力,第二次只是轻轻拍了一下(0.5 分力),第三次又狠狠来了一记(4 分力),假设这个屁股受击打时增加的肿胀程度和力度相同,可以得到以下的图像:

逻辑还是一样。力度大的那一掌,肿胀曲线就高;轻拍的那一下,曲线就矮得几乎贴地,上图中第二掌的橙色虚线就是如此。每个巴掌引起的曲线形状由屁股的体质决定,而对于同样的屁股,高度由那一掌的力度等比例缩放。
任意时刻的总肿胀,等于此前每一掌在该时刻的剩余肿胀之和。例如 t=6 时,第一掌的肿胀已经衰减得差不多,第二掌本来就没怎么肿,而第三掌刚打不久还很肿,三者的剩余肿胀加在一起,就得到 t=6 时的惊人大屁股。
如果打得又快又密,每一下力度还不一样,有轻有重、有快有慢会怎样?
原理完全相同,只是巴掌多了、密了而已。而屁股在任意时刻的实际肿胀,依然是把所有巴掌各自剩余的肿胀在该时刻的值加起来。

图像展示的就是这个场景。上图是输入,一连串力度不同的巴掌,中间打得最狠,两头比较轻。下图是屁股肿胀程度,所有巴掌各自造成的肿胀(灰色虚线)叠加在一起,形成了一条总肿胀曲线(红色实线)。
某一时刻,屁股到底有多肿
有时候我们确实需要分析任意时刻屁股有多肿。回忆之前,任意时刻的总肿胀,等于此前每一掌在该时刻的剩余肿胀之和。
选定 t=8 ,现在不看某一次巴掌,而是带入屁股的视角。刚才的巴掌(例如 t=7 )还历历在目,几乎所有的肿痛都是它带来的,而越往前的时间(例如 t=4,t=1),那些巴掌的带来的肿痛就衰减比例越多,他们的贡献就越小。
这是两种完全不同的视角:
- 之前的视角:
选定一巴掌,跟着它从头走到尾,看它带来的肿如何随时间衰减。 - 现在的视角:
选定一个时刻,回头扫视所有曾经时刻的巴掌,问每一掌现在还剩多少比例。

左图是文章开头的衰减曲线,跟着一巴掌往后看,刚打完最肿,越往后越消退。右图是所有时刻巴掌的贡献曲线,站在“现在”屁股的角度往回看,越近的巴掌贡献越大,越久远的巴掌贡献越小。同一条曲线,因为看的角度不同,所以翻了过来。
注意当前时刻 t 之后的贡献 h(t−τ) 为0,因为在当前屁股的视角,虽然未来也可能挨巴掌,但它们还没有发生。屁股可能会因为知道要挨打而自己撅起来,但不会因为还没挨到的巴掌而自己肿起来。
有了贡献曲线,计算某一时刻的总肿胀就很直接了。每一个巴掌对此刻的贡献 = 力度 × 贡献比例。力度是当时打了多重,贡献比例从右图读出。把所有巴掌的贡献求和:
x(τi) 是第 i 个巴掌的力i度,h(t−τi) 是这个巴掌对时刻 t 的贡献比例。当巴掌足够密集,密到可以视为连续击打时,求和自然变成积分:
可以放心地将积分上下限写成 -∞ 到 +∞ ,因为在第一次挨打之前,屁股都没有受力,x(τ) 为 0。而前文已经说过在 t 之后的时刻,h(t−τ) 为 0,公式计算的依旧是 t 之前真正挨的打。设置上下限之后,可以得到以下经常能遇见的卷积公式:
其中:
| 公式符号 | 打屁股的含义 |
|---|---|
| x(τ) | 在 τ 时刻打的那一巴掌的力度 |
| h(t−τ) | 那一巴掌到时刻 t 为止影响剩余比例(消肿曲线在 t−τ 处的值) |
| x(τ)·h(t−τ) | 那一巴掌对时刻 t 的肿胀贡献 |
| ∫ | 把所有巴掌的贡献加起来 |
| y(t) | 时刻 t 屁股的实际肿胀程度 |






