卷积

来自testwiki
imported>(董宗瑋)2025年3月18日 (二) 17:03的版本 方法1:直接計算
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

Template:NoteTA

卷积、互相关自相关的图示比较。运算涉及函数f,并假定f的高度是1.0,在5个不同点上的值,用在每个点下面的阴影面积来指示。f的对称性是卷积g*f和互相关fg在这个例子中相同的原因。

泛函分析中,捲積(convolution),或译为疊積-{褶}-積旋積,是透過两个函数fg生成第三个函数的一种数学算子,表徵函数f与经过翻转和平移的g的乘積函數所圍成的曲邊梯形的面積。如果将参加卷积的一个函数看作区间指示函数,卷积还可以被看作是“滑動平均”的推廣。

定义

卷积是数学分析中一种重要的运算。设:f(t)g(t)实数上的两个可积函数,定义二者的卷积(f*g)(t)为如下特定形式的积分变换

(f*g)(t)f(τ)g(tτ)dτ

(f*g)(t)仍为可积函数,并且有着:

(f*g)(t)f(tτ)g(τ)dτ=(g*f)(t)

函数fg,如果只支撑[0,]之上,则积分界限可以截断为:

(f*g)(t)=0tf(τ)g(tτ)dτ对于 f,g:[0,)

对于两个得出复数值的Template:En-link,可以定义二者的卷积为如下形式的多重积分

(f*g)(t1,t2,,tn)nf(τ1,τ2,,τn)g(t1τ1,t2τ2,,tnτn,)dτ1dτ2dτnnf(τ)g(tτ)dnτ

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

f(t)*g(t)f(τ)g(tτ)dτ(f*g)(t)

它必须被谨慎解释以避免混淆。例如:f(t)*g(tt0)等价于(f*g)(tt0),而f(tt0)*g(tt0)却实际上等价于(f*g)(t2t0)[2]

历史

卷积运算的最早使用出现在达朗贝尔于1754年出版的《宇宙体系的几个要点研究》中对泰勒定理的推导之中[3]。还有Template:En-link,将f(u)g(xu)du类型的表达式,用在他的1797年–1800年出版的著作《微分与级数论文》中[4]。此后不久,卷积运算出现在皮埃尔-西蒙·拉普拉斯约瑟夫·傅里叶西梅翁·泊松等人的著作中。这个运算以前有时叫做“Faltung”(德语中的折叠)、合成乘积、叠加积分或卡森积分[5]

“卷积”这个术语早在1903年就出现了,然而其定义在早期使用中是相当生僻的[6][7],直到1950年代或1960年代之前都未曾广泛使用。

简介

如果fg都是在Lp 空间L1(n)内的勒贝格可积函数,则二者的卷积存在,并且在这种情况下f*g也是可积的[8]。这是托內利定理的结论。对于在L1中的函数在离散卷积下,或更一般的对于在任何群的上的卷积,这也是成立的。同样的,如果fL1(n)gLp(n),这里的1p,则f*gLp(n),并且其Lp 范数间有着不等式

f*gpf1gp

p=1的特殊情况下,这显示出L1是在卷积下的巴拿赫代数(并且如果fg几乎处处非负则两边间等式成立)。

卷积与傅里叶变换有着密切的关系。例如两函数的傅里叶变换的乘积等于它们卷积后的傅里叶变换,利用此一性質,能簡化傅里叶分析中的许多问题。

由卷积得到的函数f*g,一般要比fg都光滑。特别当g为具有紧支集的光滑函数f为局部可积时,它们的卷积f*g也是光滑函数。利用这一性质,对于任意的可积函数f,都可以简单地构造出一列逼近于f的光滑函数列fs,这种方法称为函数的光滑化或正则化

函数f(t)g(t)互相关(fg)(τ),等价于f(τ)共轭复数f(τ)g(τ)的卷积:

(fg)(τ)f(tτ)g(t)dt=f(τ)*g(τ)

这里的τ叫做移位(displacement)或滞后(lag)。

对于單位脈衝函数δ(t)和某个函数h(t),二者得到的捲積就是h(t)本身,此h(t)被稱為衝激響應

(δ*h)(t)=δ(τ)h(tτ)dτ=h(t)

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

y(t)=(x*h)(t)  x(tτ)h(τ)dτ=x(τ)h(tτ)dτ

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

fU+V(x)=fU(y)fV(xy)dy=(fU*fV)(x)

图解

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

周期卷积

Template:Main article Template:Multiple image 两个T周期的函数hT(t)xT(t)的“周期卷积”定义为[10][11]

t0t0+ThT(τ)xT(tτ)dτ

这里的t0是任意参数。

任何Template:En-links(t),都可以通过求函数s(t)的所有整数倍P平移总和,从而制作出具有周期P周期函数 sP(t),这叫做Template:En-link

sP(t)m=s(t+mP)=m=s(tmP),m

对于无周期函数hx,其周期T的周期求和分别是hT(t)xT(t)hx的周期卷积,可以定义为h(t)xT(t)的常规卷积,或x(t)hT(t)的常规卷积,二者都等价于hT(t)xT(t)的周期积分:

(h*xT)(t)   h(τ)xT(tτ)dτ = t0t0+ThT(τ)xT(tτ)dτ
(h*xT)(t)=(x*hT)(t)

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

xT(t)=x(tmod T),t

而积分的界限可以缩简至函数h的长度范围[0,T]

(h*xT)(t)=0Th(τ)x((tτ)mod T) dτ

离散卷积

离散卷积示意图

对于定义在整數上且得出复数值的函数f[n]g[n],离散卷积定义为[13]

(f*g)[n]   m=f[m]g[nm]=m=f[nm]g[m]

這裡一樣把函數定義域以外的值當成零,所以可以擴展函數到所有整數上(如果本來不是的話)。两个有限序列的卷积的定义,是将这些序列扩展成在整数集合上有限支撑的函数。在这些序列是两个多项式的系数之时,这两个多项式的普通乘积的系数,就是这两个序列的卷积。这叫做序列系数的柯西乘积

g[n]支撐集為有限長度的{M,M+1,,M1,M}之时,上式會變成有限求和

(f*g)[n]=m=MMf[nm]g[m]

多维离散卷积

Template:Main

用离散二维卷积对图像进行Template:En-link处理的动画

类似于一维情况,使用星号表示卷积,而维度体现在星号的数量上,M维卷积就写为M个星号。下面是M维信号的卷积的表示法:

y(n1,n2,...,nM)=h(n1,n2,...,nM)*M*x(n1,n2,...,nM)

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

k1=k2=...kM=h(k1,k2,...,kM)x(n1k1,n2k2,...,nMkM)

结果的离散多维卷积所支撑的输出区域,基于两个输入信号所支撑的大小和区域来决定。

在两个二维信号之间的卷积的可视化

离散周期卷积

对比离散无周期卷积(左列)与离散圆周卷积(右列)

对于离散序列和一个参数N,无周期函数hx的“周期卷积”是为:

(h*xN)[n]  m=h[m]xN[nm]k=x[nmkN] = m=0N1(k=h[mkN])xN[nm]

这个函数有周期N,它有最多N个唯一性的值。hx的非零范围都是[0,N1]的特殊情况叫做圆周卷积

(h*xN)[n]=m=0N1h[m]xN[nm]=m=0N1h[m]x[(nm)modN]

离散圆周卷积可简约为矩阵乘法,这里的积分变换的核函数是循环矩阵:

[y0y1yN1]=[h0hN1h1h1h0h2hN1hN2h0][x0x1xN1]

圆周卷积最经常出现的快速傅里叶变换的实现算法比如雷德演算法之中。

性质

代数

Template:Main 各种卷积算子都满足下列性质:

交换律
f*g=g*f
结合律
f*(g*h)=(f*g)*h
分配律
f*(g+h)=(f*g)+(f*h)
数乘结合律
a(f*g)=(af)*g=f*(ag)

其中a为任意实数(或复数)。

复数共轭
f*g=f*g
微分有关
(f*g)=f*g=f*g
积分有关
如果F(t)=tf(τ)dτ,并且G(t)=tg(τ)dτ,则有:
(F*g)(t)=(f*G)(t)=t(f*g)(τ)dτ

积分

如果fg是可积分函数,则它们在整个空间上的卷积的积分,简单的就是它们积分的乘积[14]

n(f*g)(t)dnt=(nf(t)dnt)(ng(t)dnt)

这是富比尼定理的结果。如果fg只被假定为非负可测度函数,根据托内利定理,这也是成立的。

微分

在一元函数情况下,fg的卷积的导数有着:

ddt(f*g)=dfdt*g=f*dgdt

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

ti(f*g)=fti*g=f*gti

这就有了一个特殊结论,卷积可以看作“光滑”运算:fg的卷积可微分的次数,是fg的总数。

这些恒等式成立的严格条件,为fg是绝对可积分的,并且至少二者之一有绝对可积分(L1)弱导数,这是Template:En-link的结论。

在离散情况下,差分算子Δ[f](n)=f(n+1)f(n)满足类似的关系:

Δ(f*g)=(Δf)*g=f*(Δg)

卷积定理

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

设两个函数g(x)h(x),分别具有傅里叶变换G(s)H(s)

G(s){g}(s)=g(x)ei2πsxdx,sH(s){h}(s)=h(x)ei2πsxdx,s

这里的算子指示傅里叶变换

卷积定理声称:

{g*h}(s)=G(s)H(s),s
{gh}(s)=G(s)*H(s),s

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

(g*h)(s)=1{GH},s
(gh)(s)=1{G*H},s

这里的算符指示逐点乘法。

这一定理对拉普拉斯变换双边拉普拉斯变换Z变换梅林变换Template:En-link等各种傅里叶变换的变体同样成立。在调和分析中还可以推广到在局部紧致的阿贝尔群上定义的傅里叶变换。

周期卷积

对于周期为P的函数gP(x)hP(x),可以被表达为二者的Template:En-link

gP(x) m=g(xmP),mhP(x) m=h(xmP),m

它们的傅里叶级数系数为:

G[k]{gP}[k]=1PPgP(x)ei2πkx/Pdx,kH[k]{hP}[k]=1PPhP(x)ei2πkx/Pdx,k

这里的算子指示傅里叶级数积分

逐点乘积gP(x)hP(x)的周期也是P,它的傅里叶级数系数为:

{gPhP}[k]=(G*H)[k]

周期卷积(gP*h)(x)的周期也是P,周期卷积的卷积定理为:

{gP*h}[k]= PG[k] H[k]

离散卷积

对于作为两个连续函数采样序列g[n]h[n],它们具有离散时间傅里叶变换G(s)H(s)

G(s){g}(s)=n=g[n]ei2πsn,sH(s){h}(s)=n=h[n]ei2πsn,s

这里的算子指示离散时间傅里叶变换(DTFT)。

离散卷积的卷积定理为:

{g*h}(s)= G(s)H(s)

离散周期卷积

对于周期为N序列gN[n]hN[n]

gN[n] m=g[nmN],m,nhN[n] m=h[nmN],m,n

相较于离散时间傅里叶变换G(s)H(s)的周期是1,它们是按间隔1/N采样G(s)H(s),并在N个采样上进行了逆离散傅里叶变换(DFT-1或IDFT)的结果。

离散周期卷积(gN*h)[n]的周期也是N。离散周期卷积定理为:

{gN*h}[k]= {gN}[k]G(k/N){hN}[k]H(k/N),k,n

这里的算子指示长度N离散傅里叶变换(DFT)。

它有着推论:

(gN*h)[n]= 1{{gN}{hN}}

对于其非零时段小于等于Ngh,离散圆周卷积的卷积定理为:

(gN*h)[n]= 1{{g}{h}}

推广

卷积的概念还可以推广到数列测度以及广义函数上去。函数f,g是定義在n上的可測函數(measurable function),fg存在卷积并记作f*g。如果函數不是定義在n上,可以把函數定義域以外的值都規定成零,這樣就變成一個定義在n上的函數。

G是有某m 测度(例如豪斯多夫空间哈尔测度局部紧致拓扑群),对于Gm-勒贝格可积实数复数函数fg,可定义它们的卷积:

(f*g)(x)=Gf(y)g(xy1)dm(y)

对于这些群上定义的卷积同样可以给出诸如卷积定理等性质,但是这需要对这些群的表示理论以及调和分析的彼得-外尔定理

离散卷積的計算方法

計算卷積f[n]*g[n]有三種主要的方法,分別為

  1. 直接計算(Direct Method)
  2. 快速傅立葉轉換(FFT)
  3. 分段卷積(sectioned convolution)

方法1是直接利用定義來計算卷積,而方法2和3都是用到了FFT來快速計算卷積。也有不需要用到FFT的作法,如使用數論轉換

方法1:直接計算

  • 作法:利用卷積的定義
y[n]=f[n]*g[n]=m=0M1f[nm]g[m]
  • f[n]g[n]皆為實數信號,則需要MN個乘法。
  • f[n]g[n]皆為更一般性的複數信號,不使用複數乘法的快速演算法,會需要4MN個乘法;但若使用複數乘法的快速演算法,則可簡化至3MN個乘法。
因此,使用定義直接計算卷積的複雜度為O(MN)

方法2:快速傅立葉轉換

  • 概念:由於兩個離散信號在時域(time domain)做卷積相當於這兩個信號的離散傅立葉轉換在頻域(frequency domain)做相乘:
y[n]=f[n]*g[n]Y[f]=F[f]G[f]
,可以看出在頻域的計算較簡單。
  • 作法:因此這個方法即是先將信號從時域轉成頻域:
F[f]=DFTP(f[n]),G[f]=DFTP(g[n])
,於是
Y[f]=DFTP(f[n])DFTP(g[n])
,最後再將頻域信號轉回時域,就完成了卷積的計算:
y[n]=IDFTPDFTP(f[n])DFTP(g[n])
總共做了2次DFT和1次IDFT。
  • 特別注意DFT和IDFT的點數P要滿足PM+N1
  • 由於DFT有快速演算法FFT,所以運算量為O(Plog2P)
  • 假設P點DFT的乘法量為af[n]g[n]為一般性的複數信號,並使用複數乘法的快速演算法,則共需要3a+3P個乘法。

方法3:分段卷積

  • 概念:將f[n]切成好幾段(section),每一段分別和g[n]做卷積後,再將結果相加。
  • 作法:先將f[n]切成每段長度為L的區段(L>M),假設共切成S段:
f[n](n=0,1,...,N1)f1[n],f2[n],f3[n],...,fS[n](S=NL)
Section 1: f1[n]=f[n],n=0,1,...,L1
Section 2: f2[n]=f[n+L],n=0,1,...,L1
Section r: fr[n]=f[n+(r1)L],n=0,1,...,L1
Section S: fS[n]=f[n+(S1)L],n=0,1,...,L1
f[n]為各個section的和
f[n]=r=1Sfr[n+(r1)L]
因此,
y[n]=f[n]*g[n]=r=1Sm=0M1fr[n+(r1)Lm]g[m]
每一小段作卷積則是採用方法2,先將時域信號轉到頻域相乘,再轉回時域:
y[n]=IDFT(r=1Sm=0M1DFTP(fr[n+(r1)Lm])DFTP(g[m])),PM+L1
  • 總共只需要做P點FFT 2S+1次,因為g[n]只需要做一次FFT。
  • 假設P點DFT的乘法量為af[n]g[n]為一般性的複數信號,並使用複數乘法的快速演算法,則共需要(2S+1)a+3SP個乘法。
  • 運算量:NL3(L+M1)[log2(L+M1)+1]
  • 運算複雜度:O(N),和N呈線性,較方法2小。
  • 分為 Overlap-Add 和 Overlap-Save 兩種方法。

分段卷積: Overlap-Add

欲做x[n]*h[n]的分段卷積分,x[n] 長度為 Nh[n] 長度為 M,

Step 1: 將x[n]L 分成一段

Step 2: 再每段 L 點後面添加 M1 個零,變成長度 L+M1

Step 3: 把 h[n] 添加 L1個零,變成長度 L+M1h[n]

Step 4: 把每個 x[n] 的小段和 h[n] 做快速卷積,也就是IDFTL+M1{DFTL+M1(x[n])DFTL+M1(h[n])},每小段會得到長度 L+M1 的時域訊號

Step 5: 放置第 i 個小段的起點在位置 L×i 上, i=0,1,...,NL1

Step 6: 會發現在每一段的後面 M1 點有重疊,將所有點都相加起來,顧名思義 Overlap-Add,最後得到結果

舉例來說:

x[n]=[1,2,3,4,5,1,2,3,4,5,1,2,3,4,5], 長度 N=15

h[n]=[1,2,3], 長度 M=3

L=5

L=5

切成三段,分別為

x0[n],x1[n],x2[n]

, 每段填

M1

個零,並將

h[n]

填零至長度

L+M1

將每一段做

IDFTL+M1{DFTL+M1(x[n])DFTL+M1(h[n])}

若將每小段擺在一起,可以注意到第一段的範圍是

06

,第二段的範圍是

511

,第三段的範圍是

1016

,三段的範圍是有重疊的

最後將三小段加在一起,並將結果和未分段的卷積做比較,上圖是分段的結果,下圖是沒有分段並利用快速卷積所算出的結果,驗證兩者運算結果相同。

分段卷積: Overlap-Save

欲做x[n]*h[n]的分段卷積分,x[n] 長度為 Nh[n] 長度為 M,

Step 1: 將 x[n] 前面填 M1 個零

Step 2: 第一段 i=0, 從新的 x[n]L×i(M1)×i 取到 L×(i+1)(M1)×i1 總共 L 點當做一段,因此每小段會重複取到前一小段的 M1 點,取到新的一段全為零為止

Step 3: 把 h[n] 添加 LM 個零,變成長度 Lh[n]

Step 4: 把每個 x[n] 的小段和 h[n] 做快速卷積,也就是IDFTL{DFTL(x[n])DFTL(h[n])},每小段會得到長度 L 的時域訊號

Step 5: 對於每個 i 小段,只會保留末端的 L(M1) 點,因此得名 Overlap-Save

Step 6: 將所有保留的點合再一起,得到最後結果

舉例來說:

x[n]=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], 長度 N=15

h[n]=[1,2,3], 長度 M=3

L=7

x[n]

前面填

M1

個零以後,按照 Step 2 的方式分段,可以看到每一段都重複上一段的

M1

再將每一段做

IDFTL{DFTL(x[n])DFTL(h[n])}

以後可以得到

保留每一段末端的

L(M1)

點,擺在一起以後,可以注意到第一段的範圍是

04

,第二段的範圍是

59

,第三段的範圍是

1014

,第四段的範圍是

1516

,四段的範圍是沒有重疊的

將結果和未分段的卷積做比較,下圖是分段的結果,上圖是沒有分段並利用快速卷積所算出的結果,驗證兩者運算結果相同。

至於為什麼要把前面

M1

丟掉?

以下以一例子來闡述:

x[n]=[1,2,3,4,5,6,7,8,9,10], 長度 L=10

h[n]=[1,2,3,4,5], 長度 M=5,

第一條藍線代表

y

軸,而兩條藍線之間代表長度

L

,是在做快速摺積時的週期

當在做快速摺積時

IDFTL{DFTL(x[n])DFTL(h[n])}

,是把訊號視為週期

L

,在時域上為循環摺積分,

而在一開始前 M1 點所得到的值,是 h[0],h[6],h[7],h[8],h[9]x[0],x[6],x[7],x[8],x[9] 內積的值,

然而 h[6],h[7],h[8],h[9]M1 個值應該要為零,以往在做快速摺積時長度為 L+M1 時不會遇到這些問題,

而今天因為在做快速摺積時長度為

L

才會把這

M1

點算進來,因此我們要丟棄這

M1

點內積的結果

為了要丟棄這

M1

點內積的結果,位移

h[n] M1

點,並把位移以後內積合的值才算有效。

應用時機

以上三種方法皆可用來計算卷積,其差別在於所需總體乘法量不同。基於運算量以及效率的考量,在計算卷積時,通常會選擇所需總體乘法量較少的方法。

以下根據f[n]g[n]的長度(N,M)分成5類,並列出適合使用的方法:

  1. M為一非常小的整數 - 直接計算
  2. MN - 分段卷积
  3. MN - 快速傅里叶变换
  4. MN - 分段卷积
  5. N為一非常小的整數 - 直接計算

基本上,以上只是粗略的分類。在實際應用時,最好還是算出三種方法所需的總乘法量,再選擇其中最有效率的方法來計算卷積。

例子

Q1:當N=2000,M=17,適合用哪種方法計算卷積?

Ans:

方法1:所需乘法量為3MN=102000
方法2:PM+N1=2016,而2016點的DFT最少乘法數a=12728,所以總乘法量為3(a+P)=44232
方法3:
若切成8塊(S=8),則L=250,PM+L1=266。選P=288,則總乘法量為(2S+1)a+3SP=26632,比方法1和2少了很多。
但是若要找到最少的乘法量,必須依照以下步驟
(1)先找出L:解L : NL3(L+M1)[log2(L+M1)+1]L=0
(2)由PL+M1算出點數在P附近的DFT所需最少的乘法量,選擇DFT的點數
(3)最後由L=P+1M算出Lopt
因此,
(1)由運算量對L的偏微分為0而求出L=85
(2)PL+M1=101,所以選擇101點DFT附近點數乘法量最少的點數P=96P=120
(3-1)當P=96a=280,L=P+1M=80S=25,總乘法量為(2S+1)a+3SP=21480
(3-2)當P=120a=380,L=P+1M=104S=20,總乘法量為(2S+1)a+3SP=22780
由此可知,切成20塊會有較好的效率,而所需總乘法量為21480。
  • 因此,當N=2000,M=17,所需總乘法量:分段卷積<快速傅立葉轉換<直接計算。故,此時選擇使用分段卷積來計算卷積最適合。

Q2:當N=1024,M=3,適合用哪種方法計算卷積?

Ans:

方法1:所需乘法量為3MN=9216
方法2:PM+N1=1026,選擇1026點DFT附近點數乘法量最少的點數,P=1152,a=7088
因此,所需乘法量為3(a+P)=24342
方法3:
(1)由運算量對L的偏微分為0而求出L=5
(2)PL+M1=7,所以選擇7點DFT附近點數乘法量最少的點數P=8P=6P=4
(3-1)當P=8a=4,L=P+1M=6S=171,總乘法量為(2S+1)a+3SP=5476
(3-2)當P=6a=4,L=P+1M=4S=256,總乘法量為(2S+1)a+3SP=6660
(3-3)當P=4a=0,L=P+1M=2S=512,總乘法量為(2S+1)a+3SP=6144
由此可知,切成171塊會有較好的效率,而所需總乘法量為5476。
  • 因此,當N=1024,M=3,所需總乘法量:分段卷積<直接計算<快速傅立葉轉換。故,此時選擇使用分段卷積來計算卷積最適合。
  • 雖然當M是個很小的正整數時,大致上適合使用直接計算。但實際上還是將3個方法所需的乘法量都算出來,才能知道用哪種方法可以達到最高的效率。

Q3:當N=1024,M=600,適合用哪種方法計算卷積?

Ans:

方法1:所需乘法量為3MN=1843200
方法2:PM+N1=1623,選擇1026點DFT附近點數乘法量最少的點數,P=2016,a=12728
因此,所需乘法量為3(a+P)=44232
方法3:
(1)由運算量對L的偏微分為0而求出L=1024
(2)PL+M1=1623,所以選擇1623點DFT附近點數乘法量最少的點數P=2016
(3)當P=2016a=12728,L=P+1M=1417S=1,總乘法量為(2S+1)a+3SP=44232
由此可知,此時切成一段,就跟方法2一樣,所需總乘法量為44232。
  • 因此,當N=1024,M=600,所需總乘法量:快速傅立葉轉換 = 分段卷積<直接計算。故,此時選擇使用分段卷積來計算卷積最適合。

应用

高斯模糊可被用来从半色调印刷品复原出光滑灰度数字图像。

卷积在科学、工程和数学上都有很多应用:

参见

引用

Template:Reflist

延伸阅读

外部链接

Template:Commons category

Template:Differentiable computing

  1. Template:Cite book
  2. Template:Cite book
  3. Dominguez-Torres, p 2
  4. on page 505 of his book entitled Treatise on differences and series, which is the last of 3 volumes of the encyclopedic series: Traité du calcul différentiel et du calcul intégral, Chez Courcier, Paris, 1797–1800. Dominguez-Torres, p 4
  5. Template:Citation
  6. Template:Citation
  7. Template:Citation
  8. Template:Harv
  9. Template:Citation
  10. Template:Cite book
  11. 11.0 11.1 Template:Cite book
  12. Template:Cite book
  13. Template:Harvnb
  14. Template:Cite web
  15. Template:Cite web
  16. Template:Cite journal
  17. Template:Cite journal
  18. Template:Cite journal