卷積

卷積

維基百科,自由的百科全書

跳轉至: 導航、 搜索

圖示兩個方形脈衝波的卷積。其中函數 "g" 首先對 \tau=0 反射,接着平移 "t" ,成爲 g(t-\tau) 。那麼重疊部份的面積就相當於 "t" 處的卷積,其中橫座標代表待積變量 \tau 以及新函數 f\ast g 的自變量 "t" 。

圖示方形脈衝波和指數衰退的脈衝波的卷積(後者可能出現於 RC電路中),同樣地重疊部份面積就相當於 "t" 處的卷積。注意到因爲 "g" 是對稱的,所以在這兩張圖中,反射並不會改變它的形狀。

泛函分析中,卷積(捲積)、旋積摺積,是通過兩個函數f 和g 生成第三個函數的一種數學算子,表徵函數f與經過翻轉和平移的g 的重疊部分的累積。如果將參加卷積的一個函數看作區間指示函數,卷積還可以被看作是“滑動平均”的推廣。

目錄

簡單介紹

卷積是分析數學中一種重要的運算。設: f(x) ,g(x)\mathbb{R}上的兩個可積函數,作積分:

\int_{-\infty}^{\infty} f(\tau) g(x - \tau)\, \mathrm{d}\tau

可以證明,關於幾乎所有的 x \in (-\infty,\infty) ,上述積分是存在的。這樣,隨着 x 的不同取值,這個積分就定義了一個新函數h(x),稱爲函數f 與g 的卷積,記爲h(x)=(f*g)(x)。我們可以輕易驗證:(f * g)(x) = (g * f)(x),並且(f * g)(x) 仍爲可積函數。這就是說,把卷積代替乘法,L^1(R^1) 空間是一個代數,甚至是巴拿赫代數

卷積與傅里葉變換有着密切的關係。例如兩函數的傅里葉變換的乘積等於它們卷積後的傅里葉變換,利用此一性質,能簡化傅里葉分析中的許多問題。

由卷積得到的函數 f*g 一般要比 f 和 g 都光滑。特別當 g 爲具有緊支集的光滑函數,f 爲局部可積時,它們的卷積 f * g 也是光滑函數。利用這一性質,對於任意的可積函數 f ,都可以簡單地構造出一列逼近於 f 的光滑函數列 f_s ,這種方法稱爲函數的光滑化或正則化。

卷積的概念還可以推廣到數列、測度以及廣義函數上去。

定義

函數f 與g 的卷積記作f * g,它是其中一個函數翻轉並平移後與另一個函數的乘積的積分,是一個對平移量的函數。

(f * g )(t) = \int f(\tau) g(t - \tau)\, d\tau

積分區間取決於f 與g 的定義域

對於定義在離散域的函數,卷積定義爲

(f * g)[m] = \sum_n {f[n] g[m - n]}

圖解卷積

  1. 首先將兩個函數都用\tau來表示。
  2. 對其中一個函數做水平翻轉: g(\tau) →g(-\tau).
  3. 加上一個時間偏移量,讓 g(t-\tau) 能沿着 \tau 軸滑動。
  4. t從-∞滑動到+∞。兩函數交會時,計算交會範圍中兩函數乘積的積分值。 換句話說,我們是在計算一個滑動的的加權平均值。也就是使用g(-\tau).當做加權函數,來對f(\tau)取加權平均值。
最後得到的波形(未包含在此圖中)就是fg的卷積。

如果f(t)是一個單位脈衝,我們得到的乘積就是g(t)本身,稱爲衝激響應 。

Convolution3.PNG

計算卷積的方法

當 f[n] 爲有限長度 N , g[n] 爲有限長度 M 的信號,計算卷積 f[n]*g[n] 有三種主要的方法,分別爲 1.直接計算(Direct Method) 2.快速傅里葉轉換(FFT) 和 3.分段卷積 (sectioned convolution)。方法1是直接利用定義來計算卷積,而方法2和3都是用到了FFT來快速計算卷積。也有不需要用到FFT的作法,如使用數論轉換

方法1 直接計算
  • 作法: 利用卷積的定義
y[n] = f[n]*g[n] = \sum_{m=0}^{M-1} f[n-m]g[m]
  • f[n] 和 g[n] 皆爲實數信號,則需要 MN 個乘法。
  • f[n] 和 g[n] 皆爲更一般性的複數信號,不使用複數乘法的快速算法,會需要 4MN 個乘法;但若使用複數乘法的快速算法,則可簡化至3MN 個乘法。
因此,使用定義直接計算卷積的複雜度爲 O(MN) 。
方法2 快速傅里葉轉換(FFT)
  • 概念:由於兩個離散信號在時域(time domain)做卷積相當於這兩個信號的離散傅里葉轉換在頻域(frequency domain)做相乘:

,可以看出在頻域的計算較簡單。
  • 作法: 因此這個方法即是先將信號從時域轉成頻域:

,於是

,最後再將頻域信號轉回時域,就完成了卷積的計算:

總共做了 2 次 DFT 和 1 次 IDFT。
  • 特別注意 DFT 和 IDFT 的點數 P 要滿足 P \ge M+N-1 。
  • 由於 DFT 有快速算法 FFT,所以運算量爲 O(P\log_{2}P)
  • 假設P 點 DFT 的乘法量爲 a ,f[n] 和 g[n] 爲一般性的複數信號,並使用複數乘法的快速算法,則共需要3a + 3P 個乘法。
方法3 分段卷積(sectioned convolution)
  • 概念: 將 f[n] 切成好幾段,每一段分別和 g[n] 做卷積後,再將結果相加。
  • 作法: 先將 f[n] 切成每段長度爲 L 的區段 (L > M),假設共切成S段:

Section 1: f_1[n] = f[n] , n=0,1,...,L-1
Section 2: f_2[n] = f[n+L], n=0,1,...,L-1
\vdots
Section r: f_r[n] = f[n+(r-1)L], n=0,1,...,L-1
\vdots
Section S: f_S[n] = f[n+(S-1)L], n=0,1,...,L-1
f[n]爲各個section的和
因此,
每一小段作卷積則是採用方法2,先將時域信號轉到頻域相乘,再轉回時域:
  • 總共只需要做P 點 FFT 2S+1 次,因爲 g[n] 只需要做一次FFT。
  • 假設P 點 DFT 的乘法量爲 a ,f[n] 和 g[n] 爲一般性的複數信號,並使用複數乘法的快速算法,則共需要(2S+1)a+3SP 個乘法。
  • 運算量: \frac{N}{L}3(L+M-1)[\log_{2}(L+M-1)+1]
  • 運算複雜度: O(N) ,和 N 呈線性,較方法2小。

應用時機

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

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

  1. M 爲一非常小的整數 - 直接計算
  2. M \ll N - 快速傅里葉轉換
  3. M \approx N - 分段卷積
  4. M \gg N - 快速傅里葉轉換
  5. N 爲一非常小的整數 - 直接計算

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

例子

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

Ans:

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

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

Ans:

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

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

Ans:

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

按照翻轉、平移、積分的定義,還可以類似的定義多元函數上的積分:

(f * g )(t_1,t_2,\cdots,t_n) = \int\int\cdots\int f(\tau_1,\tau_2,\cdots,\tau_n) g(t_1 - \tau_1,t_2 - \tau_2,\cdots,t_n - \tau_n,)\, d\tau_1 d\tau_2 \cdots d\tau_n

性質

各種卷積算子都滿足下列性質:

交換律
f * g = g * f \,
結合律
f * (g * h) = (f * g) * h \,
分配律
f * (g + h) = (f * g) + (f * h) \,
數乘結合律
a (f * g) = (a f) * g = f * (a g) \,

其中a爲任意實數(或複數)。

微分定理
\mathcal{D}(f * g) = \mathcal{D}f * g = f * \mathcal{D}g \,

其中Df 表示f微分,如果在離散域中則是指差分算子,包括前向差分與後向差分兩種:

  • 前向差分:\mathcal{D}^+f(n) = f(n+1) - f(n)
  • 後向差分:\mathcal{D}^-f(n) = f(n) - f(n-1)

卷積定理

卷積定理指出,函數卷積的傅里葉變換是函數傅里葉變換的乘積。即,一個域中的卷積相當於另一個域中的乘積,例如時域中的卷積就對應於頻域中的乘積。

\mathcal{F}(f * g) = \mathcal{F} (f) \cdot \mathcal{F} (g)

其中\mathcal{F}(f)表示f 的傅里葉變換

這一定理對拉普拉斯變換雙邊拉普拉斯變換Z變換Mellin變換Hartley變換(參見Mellin inversion theorem)等各種傅里葉變換的變體同樣成立。在調和分析中還可以推廣到在局部緊緻的阿貝爾羣上定義的傅里葉變換。

利用卷積定理可以簡化卷積的運算量。對於長度爲n的序列,按照卷積的定義進行計算,需要做2n-1組對位乘法,其計算複雜度\mathcal{O}(n^2);而利用傅里葉變換將序列變換到頻域上後,只需要一組對位乘法,利用傅里葉變換的快速算法之後,總的計算複雜度爲\mathcal{O}(n\log n)。這一結果可以在快速乘法計算中得到應用。

在羣上的卷積

若 G 是有某 m 測度(例如豪斯多夫空間哈爾測度局部緊緻拓撲羣),對於G 上 m-勒貝格可積實數複數函數f 和g,可定義它們的卷積:

(f * g)(x) = \int_G f(y)g(xy^{-1})\,dm(y) \,

對於這些羣上定義的卷積同樣可以給出諸如卷積定理等性質,但是這需要對這些羣的表示理論以及調和分析的彼得-外爾定理

應用

卷積在工程和數學上都有很多應用:

  • 統計學中,加權的滑動平均是一種卷積。
  • 概率論中,兩個統計獨立變量X與Y的和的概率密度函數是X與Y的概率密度函數的卷積。
  • 聲學中,回聲可以用源聲與一個反映各種反射效應的函數的卷積表示。
  • 電子工程與信號處理中,任一個線性系統的輸出都可以通過將輸入信號與系統函數(系統的衝激響應)做卷積獲得。
  • 物理學中,任何一個線性系統(符合疊加原理)都存在卷積。

參見

外部鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章