一、先忘记数学,看一个生活场景
问题:你每天吃药,药效会持续好几天。如何计算今天你体内的总药量?
假设:
吃药记录(输入信号
x[n]):前天:吃了
2颗药昨天:吃了
1颗药今天:吃了
3颗药
药效衰减规律(系统响应
h[n]):吃药当天:药效保留0.6
第二天:药效保留0.3
第三天:药效保留0.1
第四天:药效为0
二、分步计算:今天体内总药量
今天(第n天)你体内的药量来自:
今天吃的药:
3 × 0.6 = 1.8昨天吃的药(已经过1天):
1 × 0.3 = 0.3前天吃的药(已经过2天):
2 × 0.1 = 0.2
总药量 = 1.8 + 0.3 + 0.2 = 2.3
这个计算过程,就是卷积的核心理念!
三、卷积公式的“积木块”
现在,我们把上面的过程翻译成数学符号。卷积的标准公式是:
y[n] = ∑ x[k] · h[n-k]
别被符号吓到,我们一个一个拆解:
1. 符号解释(给每个符号贴标签)
| 符号 | 中文名 | 在我们的例子中代表 |
|---|---|---|
n | “当前时间” | 就是“今天” |
k | “过去的时间点” | 可以是“前天”、“昨天”、“今天” |
x[k] | “输入信号” | 在时间k吃了多少药 |
h[m] | “系统的记忆” | 经过m天后,药效还剩多少 |
h[n-k] | “从k时刻到现在的记忆” | 从吃药那天(k)到今天(n)过去了多久,对应的药效 |
y[n] | “输出信号” | 今天体内的总药量 |
2. 关键技巧:h[n-k]为什么是n-k?
这是卷积公式的灵魂所在!
n= 现在的时间(今天)k= 过去某个吃药的时间(比如前天)n - k= 从吃药到现在过去了多少天
例子:
如果今天
n=5,前天k=3,那么n-k=2→ 表示“吃药后过去了2天”查药效表
h[2]= 0.1 → 这就是前天吃的药到今天还剩的药效
h[n-k]的作用:它自动把过去的输入,按照正确的时间差,映射到今天还剩多少影响。
四、可视化:卷积就像“翻转滑动尺”
想象两把尺子:
第一把尺子(输入x):上面标着每天吃的药量
时间k: ... k=前天 k=昨天 k=今天 ... 药量x: ... 2 1 3 ...
第二把尺子(记忆h):上面标着药效衰减规律
时间差m: m=0(当天) m=1(过1天) m=2(过2天) ... 药效h: 0.6 0.3 0.1 ...
卷积的魔法操作:
翻转记忆尺:把
h尺子从右往左读,变成... h[2] h[1] h[0] ...为什么翻转?因为我们要让“最早的影响”先对齐。
翻转后:
... 0.1 0.3 0.6 ...
对齐计算:
把翻转后的
h尺子的h[0](当天)对准今天的x[今天]然后:
x[今天]×h[0] + x[昨天]×h[1] + x[前天]×h[2]计算:
3×0.6 + 1×0.3 + 2×0.1 = 2.3
滑动计算其他天:
要算昨天的总药量,就把尺子向左滑动一天,让
h[0]对准x[昨天]然后:
x[昨天]×h[0] + x[前天]×h[1] + ...
五、完整例子:手算一遍卷积
设:
x = [2, 1, 3](从前天、昨天、今天的药量)h = [0.6, 0.3, 0.1](当天、1天后、2天后的药效)
计算所有天的总药量y[n]:
第1步:建立表格法(最直观)
把x写在上方,h写在左侧,填乘积:
| h \ x | 2 | 1 | 3 |
|---|---|---|---|
| 0.6 | 1.2 | 0.6 | 1.8 |
| 0.3 | 0.6 | 0.3 | 0.9 |
| 0.1 | 0.2 | 0.1 | 0.3 |
第2步:按对角线求和
↗️ 第一条对角线:
0.2→y[0] = 0.2(这里n=0对应“前天”)↗️ 第二条:
0.6 + 0.1 = 0.7→y[1] = 0.7(昨天)↗️ 第三条:
1.2 + 0.3 + 0.3 = 1.8→y[2] = 1.8(今天)↗️ 第四条:
0.6 + 0.9 = 1.5→y[3] = 1.5↗️ 第五条:
1.8→y[4] = 1.8
结果:y = [0.2, 0.7, 1.8, 1.5, 1.8]
检查:我们之前手算的“今天”是y[2]=1.8,而用详细方法算出的“今天”是1.8吗?等等,我们之前算的不是2.3吗?
啊哈!这里有个重要发现:我故意设置了不同数字来展示两种视角。让我们统一一下:
六、两种视角的对应
视角A(最直观):
昨天吃的药(
1)到今天还剩1×0.3=0.3今天吃的药(
3)当天生效3×0.6=1.8总和
0.3+1.8=2.1?等等,还少了前天的药效。
这里的关键是:时间索引要对齐!
在实际卷积中,我们是从n=0开始算的:
y[0]:最早时刻的输出(对应前天)y[2]:第三天的输出(对应今天)
如果我们想直接算“今天”,需要定义清楚时间起点。这就是为什么表格法更可靠——它系统地计算了所有时间点。
七、卷积公式的精华总结
核心思想:
计算“现在”的输出,就是把所有“过去和现在”的输入,分别乘以它们“留存到今天的影响”,然后加起来。
公式解读:
y[n]:你想知道什么时候的结果。∑:求和符号,表示把很多项加起来。x[k]:在某个过去时刻k的输入值。h[n-k]:从那个过去时刻k到现在n,系统还剩下多少记忆。
简单口诀:
卷积 = 翻转 × 滑动 × 相加
翻转
h序列对齐到当前时间
n对应位置相乘
所有乘积相加
结果长度:
如果
x长度=M,h长度=N卷积结果
y长度 =M + N - 1就像两段绳子打结,重叠部分会变长。
八、给初学者的最终建议
不要死记公式!记住这个场景:
你有一个水桶(系统),每天往里面倒不同量的水(输入
x),但水桶有漏洞,水会每天漏掉一些(记忆h)。卷积就是计算今天桶里还有多少水(输出y)——包括今天倒的、昨天倒的剩的、前天倒的剩的……
当你看到y[n] = Σ x[k]·h[n-k],就想想:
“我在算哪一天(
n)的结果?”“过去的每一天(
k)贡献了多少?”“从那天到今天(
n-k),影响衰减了多少(h[n-k])?”
这就是卷积——一个系统化计算“历史影响累积”的聪明方法。它把复杂的动态过程,变成了简单的乘法和加法。