定義
卷積是兩個變量在某范圍內相乘后求和的結果。如果卷積的變量是序列x(n)和h(n),則卷積的結果
其中星號*表示卷積。
當時序n=0時,序列h(-i)是h(i)的時序i取反的結果;時序取反使得h(i)以縱軸為中心翻轉180度,所以這種相乘后求和的計算法稱為卷積和,簡稱卷積。
另外,n是使h(-i)位移的量,不同的n對應不同的卷積結果。
如果卷積的變量是函數x(t)和h(t),則上述卷積(和)的計算變為積分:
其中p是積分變量,積分也是求和,t是使函數h(-p)位移的量,星號*表示卷積。
參考《數字信號處理》楊毅明著,p.55、p.188、p.264,
機械工業出版社2012年發行。
圖解卷積
- 首先將兩個函數都用
來表示。 - 對其中一個函數做水平翻轉:
→
- 加上一個時間偏移量,讓
能沿着
軸滑動。 - 讓t從-∞滑動到+∞。兩函數交會時,計算交會范圍中兩函數乘積的積分值。
換句話說,我們是在計算一個滑動的的加權平均值。也就是使用
當做加權函數,來對
取加權平均值。
- 最后得到的波形(未包含在此圖中)就是 f和 g的卷積。
性質
對於長度為n的序列,按照卷積的定義進行計算,需要做2N - 1組對位乘法,其計算復雜度為O(N * N);
而利用傅里葉變換將序列變換到頻域上后,只需要一組對位乘法,利用傅里葉變換的快速算法之后,總的計算復雜度為O(N * log N)。
這一結果可以在快速乘法計算中得到應用。
應用
卷積在工程和數學上都有很多應用:
招展
卷積是一種線性運算,圖像處理中常見的mask運算都是卷積,廣泛應用於圖像濾波。Kenneth R.Castlman的《數字圖像處理》對卷積講得很詳細。
高斯變換就是用高斯函數對圖像進行卷積。高斯算子可以直接從離散
高斯函數得到:
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
g[i*N+j]=exp(-((i-(N-1)/2)^2+(j-(N-1)/2)^2))/(2*delta^2));
sum += g[i*N+j];
}
}
再除以 sum 得到歸一化算子 ,N是濾波器的大小,delta自選
首先,在提到卷積之前,必須提到卷積出現的背景。
信號與線性系統,討論的就是信號經過一個線性系統以后發生的變化(就是輸入 輸出 和所經過的所謂系統,這三者之間的數學關系)。所謂線性系統的含義,就是,這個所謂的系統,帶來的輸出信號與輸入信號的數學關系式之間是線性的運算關系。
因此,實際上,都是要根據我們需要待處理的信號形式,來設計所謂的系統傳遞函數,那么這個系統傳遞函數和輸入信號,在數學上的形式就是所謂的卷積關系。
卷積關系最重要的一種情況,就是在信號與線性系統或數字信號處理中的卷積定理。
C++代碼

