f 1 ( t ) = 1 f_1(t)=1 f1(t)=1 f 2 ( t ) f_2(t) f2(t)为“鸡肉函数”, f ( t ) = f 1 ( t ) ∗ f 2 ( t ) f(t)=f_1(t)*f_2(t) f(t)=f1(t)f2(t),求 f ( t 1 ) f(t_1) f(t1)


鸡肉函数定位
卷积,卷个肉卷?_二进制

卷积,卷个肉卷?_二进制_02

​对乘积项求“全局”积分:

卷积,卷个肉卷?_二进制_03
鸡肉卷图片来源[3]

备注:这里只是举个贴近生活的例子,很多细节没考虑,不够详细严谨。更详细的解释见下文的卷积图解。

 

提示:下文将按照离散与连续并行的方式讲解卷积。

1 预备知识

1.1 阶跃函数和冲激函数

1.1.1 阶跃函数

选定以下函数 γ n ( t ) γ_n(t) γn(t) ,求极限即得到阶跃函数:
卷积,卷个肉卷?_二进制_04

ε ( t ) = lim ⁡ n → ∞ γ n ( t ) = { 0 , t < 0 1 / 2 , t = 0 1 , t > 0 \varepsilon(t)=\lim _{n \rightarrow \infty} \gamma_{n}(t)=\left\{\begin{array}{ll}0, & t<0\\1/2, &t=0 \\1, & t>0\end{array}\right. ε(t)=nlimγn(t)=0,1/21,t<0t=0t>0

1.1.2 冲激函数

单位冲激函数:是一种奇异函数,它是对强度极大,作用时间极短的物理量的理想化模型(狄拉克提出)。定义为:

{ δ ( t ) = 0 , t ≠ 0 ∫ − ∞ ∞ δ ( t ) d t = 1 \left\{\begin{array}{l}\delta(t)=0, \quad &t \neq 0 \\\\\int_{-\infty}^{\infty} \delta(t) d t=1\end{array}\right . δ(t)=0,δ(t)dt=1t=0
卷积,卷个肉卷?_二进制_05

理解: 高度无穷大,宽度无穷小,面积为1的对称窄脉冲。

冲激函数的取样性质:

f ( t ) f(t) f(t)乘以 δ ( t ) : δ(t): δ(t)
f ( t ) δ ( t ) = f ( 0 ) δ ( t ) f(t) \delta(t)=f(0) \delta(t) f(t)δ(t)=f(0)δ(t)

f ( 0 ) δ ( t ) f(0)\delta(t) f(0)δ(t)含义 : : f ( 0 ) f(0) f(0)倍的 δ ( t ) \delta(t) δ(t)

∫ − ∞ ∞ f ( t ) δ ( t ) d t = ∫ − ∞ ∞ f ( 0 ) δ ( t ) = f ( 0 ) \int_{-\infty}^{\infty} f(t) \delta(t) \mathrm{d} t=\int_{-\infty}^{\infty}f(0) \delta(t)=f(0) f(t)δ(t)dt=f(0)δ(t)=f(0)

进一步推广:

f ( t ) δ ( t − a ) = f ( a ) δ ( t − a ) f(t) \delta(t-a)=f(a) \delta(t-a) f(t)δ(ta)=f(a)δ(ta)
∫ − ∞ ∞ f ( t ) δ ( t − a ) d t = f ( a ) \int_{-\infty}^{\infty} f(t) \delta(t-a) \mathrm{d} t=f(a) f(t)δ(ta)dt=f(a)

1.2 单位脉冲序列与单位阶跃序列

1.2.1 单位阶跃序列

对应阶跃函数。
ε ( k ) = { 1 k ≥ 0 0 , k < 0 \varepsilon(k)=\left\{\begin{array}{ll}1 & k \geq 0 \\0, & k<0\end{array}\right. ε(k)={10,k0k<0
卷积,卷个肉卷?_二进制_06

1.2.2 单位脉冲序列

对应冲激函数。
δ ( k ) = { 1 , k = 0 0 , k ≠ 0 \delta(k)=\left\{\begin{array}{ll}1, & k=0 \\0, & k \neq 0\end{array}\right. δ(k)={1,0,k=0k=0
∑ k = − ∞ ∞ δ ( k ) = 1 \sum_{k=-\infty}^{\infty} \delta(k)=1 k=δ(k)=1
卷积,卷个肉卷?_二进制_07

取样性质

f ( k ) δ ( k ) = f ( 0 ) δ ( k ) f(k) \delta(k)=f(0) \delta(k) f(k)δ(k)=f(0)δ(k)

∑ k = − ∞ ∞ f ( k ) δ ( k ) = ∑ k = − ∞ ∞ f ( 0 ) δ ( k ) = . . . 0 + 0 + f ( 0 ) + 0 + 0... = f ( 0 ) \sum_{k=-\infty}^{\infty} f(k) \delta(k)=\sum_{k=-\infty}^{\infty} f(0) \delta(k)=...0+0+f(0)+0+0...=f(0) k=f(k)δ(k)=k=f(0)δ(k)=...0+0+f(0)+0+0...=f(0)

进一步推广:
f ( k ) δ ( k − k 0 ) = f ( k 0 ) δ ( k − k 0 ) f(k) \delta\left(k-k_{0}\right)=f\left(k_{0}\right) \delta\left(k-k_{0}\right) f(k)δ(kk0)=f(k0)δ(kk0)

∑ k = − ∞ ∞ f ( k ) δ ( k − k 0 ) = f ( k 0 ) \sum_{k=-\infty}^{\infty} f(k) \delta\left(k-k_{0}\right)=f\left(k_{0}\right) k=f(k)δ(kk0)=f(k0)

1.3 函数时域分解

1.3.1 离散函数(序列)时域分解

卷积,卷个肉卷?_二进制_08

任意离散序列 f ( k ) f(k) f(k)可表示为
f ( k ) = ⋯ + f ( − 2 ) δ ( k + 2 ) + f ( − 1 ) δ ( k + 1 ) + f ( 0 ) δ ( k ) + f ( 1 ) δ ( k − 1 ) + ⋯ + f ( i ) δ ( k − i ) + ⋯ \begin{array}{c}f(k)=\cdots+f(-2) \delta(k+2)+f(-1) \delta(k+1)+f(0) \delta(k)+ \\ f(1) \delta(k-1)+\cdots+f(i) \delta(k-i)+\cdots\end{array} f(k)=+f(2)δ(k+2)+f(1)δ(k+1)+f(0)δ(k)+f(1)δ(k1)++f(i)δ(ki)+

f ( k ) = ∑ i = − ∞ ∞ f ( i ) δ ( k − i ) f(k)=\sum_{i=-\infty}^{\infty} f(i) \delta(k-i) f(k)=i=f(i)δ(ki)

1.3.2 连续函数时域分解

卷积,卷个肉卷?_二进制_09

从上图可以直观看出:

f 1 ( t ) = A 1 Δ p ( t ) = A Δ p ( t ) f_{1}(t)=\frac{\mathrm{A}}{\frac{1}{\Delta}} p(t)=\mathrm{A} \Delta p(t) f1(t)=Δ1Ap(t)=AΔp(t)

任意函数分解:

卷积,卷个肉卷?_二进制_10

“-1”号脉冲高度 f ( − Δ ) f(-Δ) f(Δ),宽度为 Δ Δ Δ, 表示为 f ( − Δ ) Δ p ( t + Δ ) f (-Δ)Δp(t+Δ) f(Δ)Δp(t+Δ)

“0”号脉冲高度 f ( 0 ) f(0) f(0),宽度为 Δ Δ Δ,用 p ( t ) p(t) p(t)表示为: f ( 0 ) Δ p ( t ) f(0)Δp(t) f(0)Δp(t)

“1”号脉冲高度 f ( Δ ) f(Δ) f(Δ),宽度为 Δ Δ Δ,用 p ( t − Δ ) p(t-Δ) p(tΔ)表示为: f ( Δ ) Δ p ( t − Δ ) f(Δ)Δp(t-Δ) f(Δ)Δp(tΔ)

“2”号脉冲高度 f ( 2 Δ ) f(2Δ) f(2Δ),宽度为 Δ Δ Δ,用 p ( t − 2 Δ ) p(t-2Δ) p(t2Δ)表示为: f ( 2 Δ ) Δ p ( t − 2 Δ ) f(2Δ)Δp(t-2Δ) f(2Δ)Δp(t2Δ)
… …

n n n”号脉冲高度 f ( n Δ ) f(nΔ) f(nΔ),宽度为 Δ Δ Δ,用 p ( t − n Δ ) p(t-nΔ) p(tnΔ)表示为: f ( n Δ ) Δ p ( t − n Δ ) f(nΔ)Δp(t-nΔ) f(nΔ)Δp(tnΔ)

得到
f ^ ( t ) = ∑ n = − ∞ ∞ f ( n Δ ) Δ p ( t − n Δ ) \hat{f}(t)=\sum_{n=-\infty}^{\infty} f(n \Delta) \Delta p(t-n \Delta) f^(t)=n=f(nΔ)Δp(tnΔ)

求极限:

lim ⁡ Δ → 0 : Δ → d τ n Δ → τ ∑ → ∫ \lim\limits_{\Delta\rightarrow0}:\qquad\Delta\rightarrow d\tau\qquad n\Delta\rightarrow\tau\qquad \sum\rightarrow\int Δ0limΔdτnΔτ
p ( t − n Δ ) → δ ( t − τ ) p(t-n\Delta)\rightarrow\delta(t-\tau) p(tnΔ)δ(tτ)

得到:
f ( t ) = lim ⁡ Δ → 0 f ^ ( t ) = ∫ − ∞ ∞ f ( τ ) δ ( t − τ ) d τ f(t)=\lim _{\Delta \rightarrow 0} \hat{f}(t)=\int_{-\infty}^{\infty} f(\tau) \delta(t-\tau) \mathrm{d} \tau f(t)=Δ0limf^(t)=f(τ)δ(tτ)dτ

2 卷积公式

——与函数分解的过程相反,卷积是通过两个函数生成第三个函数的一种数学算子,且其中的函数不一定是冲激函数(连续)或脉冲序列(离散)。

2.1 卷积和

卷积和的定义

已知定义在区间 ( – ∞ , ∞ ) (–∞,∞) () 上的两个离散函数 f 1 ( k ) f_1(k) f1(k) f 2 ( k ) f_2(k) f2(k),则定义
f ( k ) = ∑ i = − ∞ ∞ f 1 ( i ) f 2 ( k − i ) f(k)=\sum_{i=-\infty}^{\infty} f_{1}(i) f_{2}(k-i) f(k)=i=f1(i)f2(ki)

f 1 ( k ) f_1(k) f1(k) f 2 ( k ) f_2(k) f2(k)的卷积和,简称卷积;记为
f ( k ) = f 1 ( k ) ∗ f 2 ( k ) f(k)=f_{1}(k)^{*} f_{2}(k) f(k)=f1(k)f2(k)

注意:求和是在虚设的变量 i i i 下进行的, i i i 为求和变量, k k k 为参变量( k k k用来对 f 2 f_2 f2 定位, i i i用来对乘积项进行”全局”求和)。结果仍为 k k k 的函数。

2.2 卷积积分

已知定义在区间 ( – ∞ , ∞ ) (–∞,∞) (,)上的两个连续函数 f 1 ( t ) f_1(t) f1(t) f 2 ( t ) f_2(t) f2(t),则定义积分
f ( t ) = ∫ − ∞ ∞ f 1 ( τ ) f 2 ( t − τ ) d τ f(t)=\int_{-\infty}^{\infty} f_{1}(\tau) f_{2}(t-\tau) d \tau f(t)=f1(τ)f2(tτ)dτ

f 1 ( t ) f_1(t) f1(t) f 2 ( t ) f_2(t) f2(t)的卷积积分,简称卷积;记为
f ( t ) = f 1 ( t ) ∗ f 2 ( t ) f(t)=f_{1}(t)^{*} f_{2}(t) f(t)=f1(t)f2(t)

注意:积分是在虚设的变量 τ τ τ下进行的, τ τ τ为积分变量, t t t为参变量。结果仍为 t t t的函数。( t t t用来对 f 2 f_2 f2 定位, τ \tau τ用来对乘积项进行“全局”积分)

3 卷积图解

3.1 卷积和图解

f ( k ) = ∑ i = − ∞ ∞ f 1 ( i ) f 2 ( k − i ) f(k)=\sum_{i=-\infty}^{\infty} f_{1}(i) f_{2}(k-i) f(k)=i=f1(i)f2(ki)

卷积图解法可分解为五步:

(1)换元: k k k换为 i i i,得到 f 1 ( i ) , f 2 ( i ) f_1(i),f_2(i) f1(i)f2(i)

(2)反转:将 f 2 ( i ) f_2(i) f2(i)以纵坐标为轴线反转,成为 f 2 ( − i ) f_2(-i) f2(i)

(3)平移:将 f 2 ( − i ) f_2(-i) f2(i)沿 i i i轴正方向平移 k k k个单位,得到 f 2 ( k − i ) f_2(k-i) f2(ki)

(4)乘积: f 1 ( i ) f 2 ( k − i ) f_1(i)f_2(k-i) f1(i)f2(ki)

(5)求和: i i i − ∞ -\infty + ∞ +\infty +对乘积项求和。

注意: k k k 为参变量。

例1:有以下两个函数求 f 1 ( k ) , f 2 ( k ) f_1(k),f_2(k) f1(k)f2(k),求 f 1 ( k ) ∗ f 2 ( k ) f_1(k)*f_2(k) f1(k)f2(k)
卷积,卷个肉卷?_二进制_11

(1)换元,得到 f 1 ( i ) , f 2 ( i ) f_1(i),f_2(i) f1(i)f2(i)
卷积,卷个肉卷?_二进制_12

(2)反转,得到 f 2 ( − i ) f_2(-i) f2(i)

卷积,卷个肉卷?_二进制_13

(3)平移:将 f 2 ( − i ) f_2(-i) f2(i)向右平移 k k k个单位,得到 f 2 ( k − i ) f_2(k-i) f2(ki),计算 f 1 ( i ) f 2 ( k − i ) f_1(i)f_2(k-i) f1(i)f2(ki)
卷积,卷个肉卷?_二进制_14

备注:为了直观,图中把红色和黑色序列应该重叠的部分画偏移了。

(4)求和: i i i − ∞ -\infty + ∞ +\infty +对乘积项求和。
f ( k ) = f 1 ( k ) ∗ f 2 ( k ) f(k)=f_1(k)*f_2(k) f(k)=f1(k)f2(k)

卷积,卷个肉卷?_二进制_15卷积,卷个肉卷?_二进制_16

f ( k ) = f(k)= f(k)=所有两序列序号之和为 k k k的那些样本乘积之和:

f ( k ) = ∑ i = − ∞ ∞ f 1 ( i ) f 2 ( k − i ) = ⋯ + f 1 ( − 1 ) f 2 ( k + 1 ) + f 1 ( 0 ) f 2 ( k ) + f 1 ( 1 ) f 2 ( k − 1 ) + f 1 ( 2 ) f 2 ( k − 2 ) + ⋯ + f 1 ( i ) f 2 ( k − i ) + ⋯ \begin{aligned}f(k)=& \sum_{i=-\infty}^{\infty} f_{1}(i) f_{2}(k-i) \\=& \cdots+f_{1}(-1) f_{2}(k+1)+f_{1}(0) f_{2}(k)+f_{1}(1) f_{2}(k-1) \\&+f_{1}(2) f_{2}(k-2)+\cdots+f_{1}(i) f_{2}(k-i)+\cdots\end{aligned} f(k)==i=f1(i)f2(ki)+f1(1)f2(k+1)+f1(0)f2(k)+f1(1)f2(k1)+f1(2)f2(k2)++f1(i)f2(ki)+

如:
f ( 2 ) = … + f 1 ( − 1 ) f 2 ( 3 ) + f 1 ( 0 ) f 2 ( 2 ) + f 1 ( 1 ) f 2 ( 1 ) + … f(2)=\ldots+f_{1}(-1) f_{2}(3)+f_{1}(0) f_{2}(2)+f_{1}(1) f_{2}(1)+\ldots f(2)=+f1(1)f2(3)+f1(0)f2(2)+f1(1)f2(1)+

例2 f ( k ) = f 1 ( k ) ∗ f 2 ( k ) f(k)=f_1(k)*f_2(k) f(k)=f1(k)f2(k)

卷积,卷个肉卷?_二进制_17
f ( k ) = ∑ i = − ∞ ∞ f 1 ( i ) ∗ f 2 ( k − i ) f(k)=\sum_{i=-\infty}^{\infty} f_{1}(i) * f_{2}(k-i) f(k)=i=f1(i)f2(ki)

卷积,卷个肉卷?_二进制_18

3.2 卷积积分图解

f 1 ( t ) ∗ f 2 ( t ) = ∫ − ∞ ∞ f 1 ( τ ) f 2 ( t − τ ) d τ f_{1}(t){*} f_{2}(t)=\int_{-\infty}^{\infty} f_{1}(\tau) f_{2}(t-\tau) d \tau f1(t)f2(t)=f1(τ)f2(tτ)dτ

卷积过程可分解为四步:
(1)换元: t t t换为 τ \tau τ,得到 f 1 ( τ ) , f 2 ( τ ) f_1(\tau),f_2(\tau) f1(τ)f2(τ)

(2)反转平移:由 f 2 ( τ ) f_2(\tau) f2(τ)反转得到 f 2 ( − τ ) f_2(-\tau) f2(τ),再右移得到 f 2 ( t − τ ) f_2(t-\tau) f2(tτ)

(3)乘积: f 1 ( τ ) f 2 ( t − τ ) f_1(\tau)f_2(t-\tau) f1(τ)f2(tτ)

(4)积分: τ \tau τ − ∞ -\infty ∞ \infty 对乘积项积分。

注意: t t t为参变量。

例 1 f ( t ) = 1 / 2 ( 0 ≤ t ≤ 1 ) , h ( t ) = t ( 0 ≤ t ≤ 2 ) f(t)=1/2(0\le t\le 1),h(t)=t(0\le t\le 2) f(t)=1/2(0t1)h(t)=t(0t2),求 y ( t ) = h ( t ) ∗ f ( t ) y(t)=h(t)*f(t) y(t)=h(t)f(t)

y ( t ) = h ( t ) ∗ f ( t ) = ∫ − ∞ ∞ h ( τ ) f ( t − τ ) d τ y(t)=h(t)*f(t)=\int_{-\infty}^{\infty} h(\tau) f(t-\tau) d \tau y(t)=h(t)f(t)=h(τ)f(tτ)dτ

(1)换元: t t t换为 τ \tau τ,得到 f ( τ ) = 1 / 2 ( 0 ≤ τ ≤ 1 ) , h ( τ ) = t ( 0 ≤ τ ≤ 2 ) f(\tau)=1/2(0\le \tau\le 1),h(\tau)=t(0\le \tau\le 2) f(τ)=1/2(0τ1)h(τ)=t(0τ2)

(2)反转平移:由 f ( τ ) f(\tau) f(τ)反转得到 f 2 ( − τ ) f_2(-\tau) f2(τ),再右移得到 f ( t − τ ) f(t-\tau) f(tτ)

卷积,卷个肉卷?_二进制_19

(3)乘积: h ( τ ) f ( t − τ ) h(\tau)f(t-\tau) h(τ)f(tτ)

卷积,卷个肉卷?_二进制_20

(4)积分: τ \tau τ − ∞ -\infty ∞ \infty 对乘积项积分。

t < 0 t\lt 0 t<0时, f ( t − τ ) f(t-\tau) f(tτ)向左移:

  • f ( t − τ ) h ( τ ) f(t-\tau)h(\tau) f(tτ)h(τ)=0,故 y ( t ) = 0 y(t)=0 y(t)=0

t > 0 t\gt 0 t>0时, f ( t − τ ) f(t-\tau) f(tτ)向左移:

  • 0 ≤ t ≤ 1 0\le t\le 1 0t1时, y ( t ) = ∫ 0 t τ ⋅ 1 2   d τ = 1 4 t 2 y(t)=\int_{0}^{t} \tau \cdot \frac{1}{2} \mathrm{~d} \tau=\frac{1}{4} t^{2} y(t)=0tτ21 dτ=41t2
  • 1 ≤ t ≤ 2 1\le t\le 2 1t2时, y ( t ) = ∫ t − 1 t τ ⋅ 1 2   d τ = 1 2 t − 1 4 y(t)=\int_{t-1}^{t} \tau \cdot \frac{1}{2} \mathrm{~d} \tau=\frac{1}{2} t-\frac{1}{4} y(t)=t1tτ21 dτ=21t41
  • 2 ≤ t ≤ 3 2\le t\le 3 2t3时, y ( t ) = ∫ t − 1 2 τ ⋅ 1 2   d τ = − 1 4 t 2 + 1 2 t + 3 4 y(t)=\int_{t-1}^{2} \tau \cdot \frac{1}{2} \mathrm{~d} \tau=-\frac{1}{4} t^{2}+\frac{1}{2} t+\frac{3}{4} y(t)=t12τ21 dτ=41t2+21t+43
  • 3 ≤ t 3\le t 3t时, f ( t − τ ) h ( τ ) = 0 f(t-\tau) h(\tau)=0 f(tτ)h(τ)=0,所以 y ( t ) = 0 y(t)=0 y(t)=0

卷积,卷个肉卷?_二进制_21

用梳状(comb)函数卷积产生周期函数

周期为 T T T的周期单位冲激函数序列,常称为梳状函数。
δ T ( t ) = ∑ m = − ∞ ∞ δ ( t − m T ) \delta_{T}(t)=\sum_{m=-\infty}^{\infty} \delta(t-m T) δT(t)=m=δ(tmT)

卷积,卷个肉卷?_二进制_22

计算函数 f ( t ) f(t) f(t) δ T ( t ) δ_T(t) δT(t)的卷积,依然是周期函数,其周期为 T T T

(1)当 T > τ T > τ T>τ 时, f T ( t ) f_T (t) fT(t)中每个周期内的波形与 f ( t ) f (t) f(t)相同;

(2)若 T < τ T < τ T<τ时,各相邻脉冲之间将会出现重叠,将无法使波形 f ( t ) f(t) f(t) f T ( t ) f_T (t) fT(t)的每个周期中重现。

T > τ : T>\tau: T>τ

卷积,卷个肉卷?_二进制_23

f T ( t ) = f ( t ) ∗ δ T ( t ) = f ( t ) ∗ ∑ m = − ∞ ∞ δ ( t − m T ) = ∑ m = − ∞ ∞ f ( t − m T ) f_T(t)=f(t) * \delta_{T}(t)=f(t) * \sum_{m=-\infty}^{\infty} \delta(t-m T)=\sum_{m=-\infty}^{\infty} f(t-m T) fT(t)=f(t)δT(t)=f(t)m=δ(tmT)=m=f(tmT)

4 深度学习中的卷积——互相关操作

实际上,深度学习中的卷积操作在信号处理中称为互相关操作。互相关和卷积的略有不同,函数 f 1 ( t ) f_1(t) f1(t) f 2 ( t ) f_2(t) f2(t)卷积的表达式为:
f 1 ( t ) ∗ f 2 ( t ) = ∫ − ∞ ∞ f 1 ( τ ) f 2 ( − ( τ − t ) ) d τ = ∫ − ∞ ∞ f 1 ( τ ) f 2 ( t − τ ) d τ f_{1}(t) * f_{2}(t)=\int_{-\infty}^{\infty} f_{1}(\tau) f_{2}(-(\tau-t)) d \tau=\int_{-\infty}^{\infty} f_{1}(\tau) f_{2}(t-\tau) d \tau f1(t)f2(t)=f1(τ)f2((τt))dτ=f1(τ)f2(tτ)dτ

函数 f 1 ( t ) f_1(t) f1(t) f 2 ( t ) f_2(t) f2(t)的互相关函数写为:

R 12 ( t ) = ∫ − ∞ ∞ f 1 ( τ ) f 2 ( τ − t ) d τ R_{12}(t)=\int_{-\infty}^{\infty} f_{1}(\tau) f_{2}(\tau-t) d \tau R12(t)=f1(τ)f2(τt)dτ

两种运算的不同之处卷积开始时需要将 f 2 ( τ ) f_2(τ) f2(τ)反折 f 2 ( − τ ) f_2(-τ) f2(τ),而相关运算则不需反折,仍为 f 2 ( τ ) f_2(τ) f2(τ)。其他的移位、相乘和积分的运算方法相同,如:
卷积,卷个肉卷?_二进制_24
一般地,只有当 f 2 f_2 f2本身是偶函数时,互相关和卷积的结果才会相同。

参考:

[1]《工程信号与系统》作者:郭宝龙等

[2] 中国大学MOOC:信号与系统 ,西安电子科技大学,郭宝龙,朱娟娟

[3] https://www.bilibili.com/video/BV1rt41137Ma