卷积、互相关和自相关的图示比较。运算涉及函数
,并假定
的高度是1.0,在5个不同点上的值,用在每个点下面的阴影面积来指示。
的对称性是卷积
和互相关
在这个例子中相同的原因。 在泛函分析中,捲積(convolution),或译为疊積、褶積或旋積,是透過两个函数
和
生成第三个函数的一种数学算子,表徵函数
与经过翻转和平移的
的乘積函數所圍成的曲邊梯形的面積。如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是“滑動平均”的推廣。
卷积是数学分析中一种重要的运算。设:
和
是实数
上的两个可积函数,定义二者的卷积
为如下特定形式的积分变换:

仍为可积函数,并且有着:

函数
和
,如果只支撑在
之上,则积分界限可以截断为:
对于
对于两个得出复数值的多元实变函数,可以定义二者的卷积为如下形式的多重积分:

卷积有一个通用的工程上的符号约定[1]:

它必须被谨慎解释以避免混淆。例如:
等价于
,而
却实际上等价于
[2]。
卷积运算的最早使用出现在达朗贝尔于1754年出版的《宇宙体系的几个要点研究》中对泰勒定理的推导之中[3]。还有西尔维斯特·拉克鲁瓦,将
类型的表达式,用在他的1797年–1800年出版的著作《微分与级数论文》中[4]。此后不久,卷积运算出现在皮埃尔-西蒙·拉普拉斯、约瑟夫·傅里叶和西梅翁·泊松等人的著作中。这个运算以前有时叫做“Faltung”(德语中的折叠)、合成乘积、叠加积分或卡森积分[5]。
“卷积”这个术语早在1903年就出现了,然而其定义在早期使用中是相当生僻的[6][7],直到1950年代或1960年代之前都未曾广泛使用。
如果
和
都是在Lp 空间
内的勒贝格可积函数,则二者的卷积存在,并且在这种情况下
也是可积的[8]。这是托內利定理的结论。对于在
中的函数在离散卷积下,或更一般的对于在任何群的上的卷积,这也是成立的。同样的,如果
而
,这里的
,则
,并且其Lp 范数间有着不等式:

在
的特殊情况下,这显示出
是在卷积下的巴拿赫代数(并且如果
和
几乎处处非负则两边间等式成立)。
卷积与傅里叶变换有着密切的关系。例如两函数的傅里叶变换的乘积等于它们卷积后的傅里叶变换,利用此一性質,能簡化傅里叶分析中的许多问题。
由卷积得到的函数
,一般要比
和
都光滑。特别当
为具有紧支集的光滑函数,
为局部可积时,它们的卷积
也是光滑函数。利用这一性质,对于任意的可积函数
,都可以简单地构造出一列逼近于
的光滑函数列
,这种方法称为函数的光滑化或正则化。
函数
和
的互相关
,等价于
的共轭复数
与
的卷积:

这里的
叫做移位(displacement)或滞后(lag)。
对于單位脈衝函数
和某个函数
,二者得到的捲積就是
本身,此
被稱為衝激響應:

在连续时间线性非时变系统中,输出信号
被描述为输入信号
与冲激响应
的卷积[9]:

两个独立的随机变量
和
,每个都有一个概率密度函数,二者之和的概率密度,是它们单独的密度函数的卷积:

- 已知右侧第一行图中两个函数
和 。 - 首先將兩個函數都用约束变量
來表示,并将 翻转至纵轴另一侧,从而得到右侧第二行图中 和 。 - 向函数
增加一个时间偏移量 ,得到函数 。 不是常数而是自由变量,当 取不同值时, 能沿着 轴“滑动”。如果 是正值,则 等于 沿着 轴向右(朝向 )滑动数量 。如果 是负值,则 等价于 向左(朝向 )滑动数量 。 - 讓
從 变化至 ,当兩個函數交會時,計算交會範圍中兩個函數乘積的積分值。換句話說,在时间 ,计算函数 经过权重函数 施以权重后其下的面积。右侧第三、第四和第五行图中,分别是 、 和 时的情况,从 时开始有交会,例如在第四行图中, 则 , 则 ,对于 有着 。 - 最後得到的波形(未包含在此圖中)就是
和 的捲積。 | |
两个矩形脈衝波的捲積。其中函数 首先对 反射,接著平移 ,成為 。那么重叠部份的面积就相当于 处的卷积,其中橫坐標代表待变量 以及新函數 的自變量 。 | |
矩形脈衝波和指數衰減脈衝波的捲積(後者可能出現於RC電路中),同樣地重疊部份面積就相當於 處的捲積。注意到因為 是對稱的,所以在這兩張圖中,反射並不會改變它的形狀。 | |
两个
周期的函数
和
的“周期卷积”定义为[10][11]:

这里的
是任意参数。
任何可积分函数
,都可以通过求函数
的所有整数倍
的平移的总和,从而制作出具有周期
的周期函数
,这叫做周期求和:

对于无周期函数
与
,其周期
的周期求和分别是
与
,
与
的周期卷积,可以定义为
与
的常规卷积,或
与
的常规卷积,二者都等价于
与
的周期积分:


圆周卷积是周期卷积的特殊情况[11][12],其中函数
和
二者的非零部份,都限定在区间
之内,此时的周期求和称为“周期延拓”。
中函数
可以通过取非负余数的模除运算表达为“圆周函数”:

而积分的界限可以缩简至函数
的长度范围
:

离散卷积示意图 对于定义在整數
上且得出复数值的函数
和
,离散卷积定义为[13]:
![{\displaystyle (f*g)[n]\ \ \triangleq \ \sum _{m=-\infty }^{\infty }{f[m]g[n-m]}=\sum _{m=-\infty }^{\infty }f[n-m]\,g[m]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2bd9a55083d6a0d0aa8bda67d179ebc0c7970166)
這裡一樣把函數定義域以外的值當成零,所以可以擴展函數到所有整數上(如果本來不是的話)。两个有限序列的卷积的定义,是将这些序列扩展成在整数集合上有限支撑的函数。在这些序列是两个多项式的系数之时,这两个多项式的普通乘积的系数,就是这两个序列的卷积。这叫做序列系数的柯西乘积。
當
的支撐集為有限長度的
之时,上式會變成有限求和:
![{\displaystyle (f*g)[n]=\sum _{m=-M}^{M}f[n-m]g[m]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f0a31f12e6771e6a8b1868f15214e43c8714c1d9)
用离散二维卷积对图像进行锐化处理的动画 类似于一维情况,使用星号表示卷积,而维度体现在星号的数量上,
维卷积就写为
个星号。下面是
维信号的卷积的表示法:

对于离散值的信号,这个卷积可以直接如下这样计算:

结果的离散多维卷积所支撑的输出区域,基于两个输入信号所支撑的大小和区域来决定。
在两个二维信号之间的卷积的可视化
对比离散无周期卷积(左列)与离散圆周卷积(右列) 对于离散序列和一个参数
,无周期函数
和
的“周期卷积”是为:
![{\displaystyle (h*x_{_{N}})[n]\ \triangleq \ \sum _{m=-\infty }^{\infty }h[m]\underbrace {x_{_{N}}[n-m]} _{\sum _{k=-\infty }^{\infty }x[n-m-kN]}\ =\ \sum _{m=0}^{N-1}\left(\sum _{k=-\infty }^{\infty }{h}[m-kN]\right)x_{_{N}}[n-m]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/14cb0408cb58e39c596cab8ee9f1f63cb6e2fa3d)
这个函数有周期
,它有最多
个唯一性的值。
和
的非零范围都是
的特殊情况叫做圆周卷积:
![{\displaystyle (h*x_{_{N}})[n]=\sum _{m=0}^{N-1}h[m]x_{_{N}}[n-m]=\sum _{m=0}^{N-1}h[m]x[(n-m)_{\bmod {N}}]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ac37f1cfe50298bfdefdcd870a5627ef30db1cee)
离散圆周卷积可简约为矩阵乘法,这里的积分变换的核函数是循环矩阵:

圆周卷积最经常出现的快速傅里叶变换的实现算法比如雷德演算法之中。
各种卷积算子都满足下列性质:
- 交换律

- 结合律

- 分配律

- 数乘结合律

其中
为任意实数(或复数)。
- 复数共轭

- 微分有关

- 积分有关
- 如果
,并且
,则有: 
如果
和
是可积分函数,则它们在整个空间上的卷积的积分,简单的就是它们积分的乘积[14]:

这是富比尼定理的结果。如果
和
只被假定为非负可测度函数,根据托内利定理,这也是成立的。
在一元函数情况下,
和
的卷积的导数有着:

这里的
是微分算子。更一般的说,在多元函数的情况下,对偏导数也有类似的公式:

这就有了一个特殊结论,卷积可以看作“光滑”运算:
和
的卷积可微分的次数,是
和
的总数。
这些恒等式成立的严格条件,为
和
是绝对可积分的,并且至少二者之一有绝对可积分(
)弱导数,这是Young卷积不等式的结论。
在离散情况下,差分算子
满足类似的关系:

卷积定理指出[15],在适当的条件下,两个函数(或信号)的卷积的傅里叶变换,是它们的傅里叶变换的逐点乘积。更一般的说,在一个域(比如时域)中的卷积等于在其他域(比如频域)逐点乘法。
设两个函数
和
,分别具有傅里叶变换
和
:

这里的
算子指示傅里叶变换。
卷积定理声称:


应用逆傅里叶变换
产生推论:


这里的算符
指示逐点乘法。
这一定理对拉普拉斯变换、双边拉普拉斯变换、Z变换、梅林变换和Hartley变换等各种傅里叶变换的变体同样成立。在调和分析中还可以推广到在局部紧致的阿贝尔群上定义的傅里叶变换。
对于周期为
的函数
和
,可以被表达为二者的周期求和:

它们的傅里叶级数系数为:
![{\displaystyle {\begin{aligned}G[k]&\triangleq {\mathcal {F}}\{g_{_{P}}\}[k]={\frac {1}{P}}\int _{P}g_{_{P}}(x)e^{-i2\pi kx/P}\,dx,\quad k\in \mathbb {Z} \\H[k]&\triangleq {\mathcal {F}}\{h_{_{P}}\}[k]={\frac {1}{P}}\int _{P}h_{_{P}}(x)e^{-i2\pi kx/P}\,dx,\quad k\in \mathbb {Z} \end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3ff5ff5748d540ed77192958f5ec50cbe83ff9b2)
这里的
算子指示傅里叶级数积分。
逐点乘积
的周期也是
,它的傅里叶级数系数为:
![{\displaystyle {\mathcal {F}}\{g_{_{P}}\cdot h_{_{P}}\}[k]=(G*H)[k]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ec23600fe822e18dc005e7025b45caeb30a17f48)
周期卷积
的周期也是
,周期卷积的卷积定理为:
![{\displaystyle {\mathcal {F}}\{g_{_{P}}*h\}[k]=\ P\cdot G[k]\ H[k]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6d08db60e83b8282a9c6351dc2b556632ad6c336)
对于作为两个连续函数采样的序列
和
,它们具有离散时间傅里叶变换
和
:
![{\displaystyle {\begin{aligned}G(s)&\triangleq {\mathcal {F}}\{g\}(s)=\sum _{n=-\infty }^{\infty }g[n]\cdot e^{-i2\pi sn}\;,\quad s\in \mathbb {R} \\H(s)&\triangleq {\mathcal {F}}\{h\}(s)=\sum _{n=-\infty }^{\infty }h[n]\cdot e^{-i2\pi sn}\;,\quad s\in \mathbb {R} \end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0173c3574eda0d0a0ab15d8aef57be616c6efd03)
这里的
算子指示离散时间傅里叶变换(DTFT)。
离散卷积的卷积定理为:

对于周期为
的序列
和
:
![{\displaystyle {\begin{aligned}g_{_{N}}[n]\ &\triangleq \sum _{m=-\infty }^{\infty }g[n-mN],\quad m,n\in \mathbb {Z} \\h_{_{N}}[n]\ &\triangleq \sum _{m=-\infty }^{\infty }h[n-mN],\quad m,n\in \mathbb {Z} \end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4a06f5589438df8b4574b428b5869c5178b9d2e7)
相较于离散时间傅里叶变换
和
的周期是
,它们是按间隔
采样
和
,并在
个采样上进行了逆离散傅里叶变换(DFT-1或IDFT)的结果。
离散周期卷积
的周期也是
。离散周期卷积定理为:
![{\displaystyle {\mathcal {F}}\{g_{_{N}}*h\}[k]=\ \underbrace {{\mathcal {F}}\{g_{_{N}}\}[k]} _{G(k/N)}\cdot \underbrace {{\mathcal {F}}\{h_{_{N}}\}[k]} _{H(k/N)},\quad k,n\in \mathbb {Z} }](https://wikimedia.org/api/rest_v1/media/math/render/svg/88f84f790337809a2e0ba2a745b25083a4f3129c)
这里的
算子指示长度
的离散傅里叶变换(DFT)。
它有着推论:
![{\displaystyle (g_{_{N}}*h)[n]=\ {\mathcal {F}}^{-1}\{{\mathcal {F}}\{g_{_{N}}\}\cdot {\mathcal {F}}\{h_{_{N}}\}\}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ab487693fbf66da441eb710125e5ceff2194398e)
对于其非零时段小于等于
的
和
,离散圆周卷积的卷积定理为:
![{\displaystyle (g_{_{N}}*h)[n]=\ {\mathcal {F}}^{-1}\{{\mathcal {F}}\{g\}\cdot {\mathcal {F}}\{h\}\}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a0defba14a548128651067acefb5121ba77e020c)
卷积的概念还可以推广到数列、测度以及广义函数上去。函数
是定義在
上的可測函數(measurable function),
与
存在卷积并记作
。如果函數不是定義在
上,可以把函數定義域以外的值都規定成零,這樣就變成一個定義在
上的函數。
若G是有某m 测度的群(例如豪斯多夫空间上哈尔测度下局部紧致的拓扑群),对于G上m-勒贝格可积的实数或复数函数f和g,可定义它们的卷积:

对于这些群上定义的卷积同样可以给出诸如卷积定理等性质,但是这需要对这些群的表示理论以及调和分析的彼得-外尔定理。
計算卷積
有三種主要的方法,分別為
- 直接計算(Direct Method)
- 快速傅立葉轉換(FFT)
- 分段卷積(sectioned convolution)
方法1是直接利用定義來計算卷積,而方法2和3都是用到了FFT來快速計算卷積。也有不需要用到FFT的作法,如使用數論轉換。
![{\displaystyle y[n]=f[n]*g[n]=\sum _{m=0}^{M-1}f[n-m]g[m]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1081139aae46ebd7421e11ec20351dc12688cedd)
- 若
和
皆為實數信號,則需要
個乘法。
- 若
和
皆為更一般性的複數信號,不使用複數乘法的快速演算法,會需要
個乘法;但若使用複數乘法的快速演算法,則可簡化至
個乘法。
- 因此,使用定義直接計算卷積的複雜度為
。
- 概念:由於兩個離散信號在時域(time domain)做卷積相當於這兩個信號的離散傅立葉轉換在頻域(frequency domain)做相乘:
![{\displaystyle y[n]=f[n]*g[n]\leftrightarrow Y[f]=F[f]G[f]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/27f83ca717dff1b21da43e56127c50874843b8b0)
- ,可以看出在頻域的計算較簡單。
![{\displaystyle F[f]=DFT_{P}(f[n]),G[f]=DFT_{P}(g[n])}](https://wikimedia.org/api/rest_v1/media/math/render/svg/af332366ed1070784c006329adcd40833e64c44d)
- ,於是
![{\displaystyle Y[f]=DFT_{P}(f[n])DFT_{P}(g[n])}](https://wikimedia.org/api/rest_v1/media/math/render/svg/93ec9e3130dcd720d4d6b1930bd492f29fee0faf)
- ,最後再將頻域信號轉回時域,就完成了卷積的計算:
![{\displaystyle y[n]=IDFT_{P}{DFT_{P}(f[n])DFT_{P}(g[n])}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/adc12d1e8c9712ca85bf040d7e8573842c545588)
- 總共做了2次DFT和1次IDFT。
- 特別注意DFT和IDFT的點數
要滿足
。
- 由於DFT有快速演算法FFT,所以運算量為

- 假設
點DFT的乘法量為
,
和
為一般性的複數信號,並使用複數乘法的快速演算法,則共需要
個乘法。
- 概念:將
切成好幾段(section),每一段分別和
做卷積後,再將結果相加。
- 作法:先將
切成每段長度為
的區段(
),假設共切成S段:
\to f_{1}[n],f_{2}[n],f_{3}[n],...,f_{S}[n](S=\left\lceil {\frac {N}{L}}\right\rceil )}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6b2758eba65ad177619e0d9198cc913abf649b9a)
- Section 1:
![{\displaystyle f_{1}[n]=f[n],n=0,1,...,L-1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/22401ad12747eb80e3ec79d0c5b189b3c186d912)
- Section 2:
![{\displaystyle f_{2}[n]=f[n+L],n=0,1,...,L-1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ccb4f0b33490a5fc67f57cb6d353087f35c3db5d)

- Section r:
![{\displaystyle f_{r}[n]=f[n+(r-1)L],n=0,1,...,L-1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f0d987ef3bab08edc0d97642435c8f97a1383304)

- Section S:
![{\displaystyle f_{S}[n]=f[n+(S-1)L],n=0,1,...,L-1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b30b353213c930583b0b65c5598ea334fdfee777)
- ,
為各個section的和
。
- 因此,
,
- 每一小段作卷積則是採用方法2,先將時域信號轉到頻域相乘,再轉回時域:
。
- 總共只需要做
點FFT
次,因為
只需要做一次FFT。
- 假設
點DFT的乘法量為
,
和
為一般性的複數信號,並使用複數乘法的快速演算法,則共需要
個乘法。
- 運算量:
![{\displaystyle {\frac {N}{L}}3(L+M-1)[\log _{2}(L+M-1)+1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e4b5d72adc35b450cfcc40c0d13720fa6d6bd070)
- 運算複雜度:
,和
呈線性,較方法2小。 - 分為 Overlap-Add 和 Overlap-Save 兩種方法。
分段卷積: Overlap-Add
欲做
的分段卷積分,
長度為
,
長度為
,
Step 1: 將
每
分成一段
Step 2: 再每段
點後面添加
個零,變成長度
Step 3: 把
添加
個零,變成長度
的
Step 4: 把每個
的小段和
做快速卷積,也就是
,每小段會得到長度
的時域訊號
Step 5: 放置第
個小段的起點在位置
上,
Step 6: 會發現在每一段的後面
點有重疊,將所有點都相加起來,顧名思義 Overlap-Add,最後得到結果
舉例來說:
, 長度
, 長度
令
令
切成三段,分別為
, 每段填
個零,並將
填零至長度 
將每一段做![{\displaystyle IDFT_{L+M-1}\{{DFT_{L+M-1}(x[n])DFT_{L+M-1}(h'[n])}\}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/71884e63653a1501f77c376b182141bd9d8e86ce)
若將每小段擺在一起,可以注意到第一段的範圍是
,第二段的範圍是
,第三段的範圍是
,三段的範圍是有重疊的
最後將三小段加在一起,並將結果和未分段的卷積做比較,上圖是分段的結果,下圖是沒有分段並利用快速卷積所算出的結果,驗證兩者運算結果相同。
分段卷積: Overlap-Save
欲做
的分段卷積分,
長度為
,
長度為
,
Step 1: 將
前面填
個零
Step 2: 第一段
, 從新的
中
取到
總共
點當做一段,因此每小段會重複取到前一小段的
點,取到新的一段全為零為止
Step 3: 把
添加
個零,變成長度
的
Step 4: 把每個
的小段和
做快速卷積,也就是
,每小段會得到長度
的時域訊號
Step 5: 對於每個
小段,只會保留末端的
點,因此得名 Overlap-Save
Step 6: 將所有保留的點合再一起,得到最後結果
舉例來說:
, 長度
, 長度
令
將
前面填
個零以後,按照 Step 2 的方式分段,可以看到每一段都重複上一段的
點
再將每一段做
以後可以得到
保留每一段末端的
點,擺在一起以後,可以注意到第一段的範圍是
,第二段的範圍是
,第三段的範圍是
,第四段的範圍是
,四段的範圍是沒有重疊的
將結果和未分段的卷積做比較,下圖是分段的結果,上圖是沒有分段並利用快速卷積所算出的結果,驗證兩者運算結果相同。
至於為什麼要把前面
丟掉?
以下以一例子來闡述:
, 長度
,
, 長度