1. 程式人生 > >數字訊號處理中卷積的圖形化動態解釋

數字訊號處理中卷積的圖形化動態解釋

目錄(?)[+]

卷積


圖示兩個方形脈衝波的卷積。其中函式 "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 \,

相關推薦

數字訊號處理圖形動態解釋

目錄(?)[+] 卷積 圖示兩個方形脈衝波的卷積。其中函式 "g" 首先對  反射,接著平移 "t" ,成為  。那麼重疊部份的面積就相當於 "t" 處的卷積,其中橫座標代表待積變數  以及新函式  的自變數 "t" 。 圖示方形脈衝波和指數衰

數字訊號處理的自相關和互相關計算和物理意義(二)

在訊號處理中,經常要研究兩個訊號的相似性,或者一個訊號經過一段時間延遲後自身的相似性,以便實現訊號檢測、識別與提取等。 可用於研究訊號相似性的方法稱為相關,該方法的核心概念是相關函式和互相關函式。 1 相關函式定義 無限能量訊號,訊號x(n)與y(n)的互相關函式定義為

數字訊號處理均值、方差、均方值、均方差計算和它們的物理意義

1 均值均值表示訊號中直流分量的大小,用E(x)表示。對於高斯白噪聲訊號而言,它的均值為0,所以它只有交流分量。2 均值的平方均值的平方,用{E(x)}^2表示,它表示的是訊號中直流分量的功率。3 均方值均方值表示訊號平方後的均值,用E(x^2)表示。均方值表示訊號的平均功率

影象處理的實現(TensorFlow和OpenCV)

一、用C解釋原理 假設影象(寬6高4),一個卷積核(寬3高3),如下: unsigned char src[24] ={ 1,2,3,4,5,6, 1,1,1,1,1,1, 2,1,2,1,2,1, 4,5,6,1,2,3};float k

數字訊號處理的自相關和互相關計算和物理意義(一)

1.首先說說自相關和互相關的概念。     這個是訊號分析裡的概念,他們分別表示的是兩個時間序列之間和同一個時間序列在任意兩個不同時刻的取值之間的相關程度,即互相關函式是描述隨機訊號x(t),y(t)在任意兩個不同時刻t1,t2的取值之間的相關程度,自相關函式是描述隨機訊號x(t)在任意兩個不同時刻t1,t2

FPGA數字訊號處理(27)編碼器與Viterbi譯碼器設計

卷積編碼與譯碼 訊號在通道間傳輸主要會受到三個方面的影響: 通道本身對訊號產生衰落,這是由於通道本身的頻率響應特性就不理想,對訊號造成破壞; 通道中的各種噪聲,疊加在訊號上改變了訊號的幅度、相位、頻率,造成解調錯誤; 多徑效應,訊號在傳輸過程中的反射、折射、沿

數字訊號處理】線性的三種常見求解方法

例:x(n)=R3(n)={1,1,1};h(n)=(4-n)R4(n)={4,3,2,1};求線性卷積y(n)=x(n)*h(n) 1、時域直接法: a.翻轉:h(n)=h(-m);   b.移位:h(n-m);   c.相乘:x(m)h(n-m);   d.相加

徹底理解數字影象處理-以Sobel運算元為例

連結: 原文出處 作者: FreeBlues 概述 卷積在訊號處理領域有極其廣泛的應用, 也有嚴格的物理和數學定義. 本文只討論卷積在數字影象處理中的應用. 在數字影象處理中, 有一種基本的處理方法:線性濾波. 待處理的平面數字影象可被看

數字訊號處理訊號處理為什麼要用覆信號

【摘要或目錄】:一份講稿,圖文並茂,語言生動詼諧,通俗易懂,從介紹複數的表示,到尤拉公式的數學模型,引出為什麼用複數表示實訊號,通讀全文,讓一個初學者徹底理解在數字通訊系統中為什麼使用正交訊號,正交訊號又是如何節省頻寬的,絕對實用! 訊號是資訊的載體,實際的訊號總是實的,但

深度學習和池的總結

深度學習中卷積和池化的總結 涉及到padding的設定:https://www.jianshu.com/p/05c4f1621c7e 以及strides=[batch, height, width, channels]中,第一個、第三個引數必須為1的解釋。http://www.itdaa

深度學習和池的一些總結

最近完成了hinton的深度學習課程的卷積和池化的這一章節了,馬上就要結束了。這個課程的作業我寫的最有感受,待我慢慢說來。 1:裡面有幾個理解起來的難點,一個是卷積,可以這麼來理解。 這幅圖是對一個5*5的矩陣A進行3*3的矩陣B的卷積,那麼就從最上角到右下角,生成卷積之

訊號處理數字頻率與模擬頻率的關係

1.自然界中存在的頻率基本上都是模擬頻率f,比如心臟1min跳動60下,頻率即為60Hz。 2.訊號處理中,希望把大範圍的模擬頻率轉換到0-2Pi之間的數字頻率w,他們之間轉換公式為w=2*Pi*f;特別地,當存在取樣時,轉換公式變為w=2*Pi*f/fs,fs為系統取樣率

tensorflow /反-池/反池操作詳解

sha ted href ref 操作 int inpu ase 反卷積 Plese see this answer for a detailed example of how tf.nn.conv2d_backprop_input and tf.nn.conv2d_b

CNNfeature map、核、核個數、filter、channel的概念解釋,以及CNN 學習過程核更新的理解

feature map、卷積核、卷積核個數、filter、channel的概念解釋 feather map的理解 在cnn的每個卷積層,資料都是以三維形式存在的。你可以把它看成許多個二維圖片疊在一起(像豆腐皮一樣),其中每一個稱為一個feature map。 feather map 是怎

CNN層的計算細節

原文連結: https://zhuanlan.zhihu.com/p/29119239 卷積層尺寸的計算原理 輸入矩陣格式:四個維度,依次為:樣本數、影象高度、影象寬度、影象通道數 輸出矩陣格式:

數字訊號處理公式變程式(四)——巴特沃斯濾波器(上)

之前搞了一些數字訊號處理演算法程式設計(OC),一直沒來得及整理,現在整理一下,包括FFT、巴特沃斯濾波器(高通、低通、帶通、帶阻)、資料差值(線性、sinc、三次樣條*)、資料壓縮(等距、平均、峰值檢測)和模仿matlab的STFT功能(spectrogram函式三維繪圖)。 注:我比較喜歡使

訊號處理的實訊號與覆信號

轉載:原部落格地址:http://blog.sina.com.cn/s/blog_5dfd405d0101iyq7.html   訊號處理中為什麼用覆信號  (2013-03-24 18:25:55) 標籤:  雜談

數字訊號處理專題(2)——利用FPGA進行基本運算及特殊函式定點運算

一、前言   FPGA以擅長高速並行資料處理而聞名,從有線/無線通訊到影象處理中各種DSP演算法,再到現今火爆的AI應用,都離不開卷積、濾波、變換等基本的數學運算。但由於FPGA的硬體結構和開發特性使得其對很多演算法不友好,之前本人零散地總結和轉載了些基本的數學運算在FPGA中的實現方式,今天做一個系統的總

膨脹、腐蝕、開、閉運算——數字影象處理的形態學

轉自:https://blog.csdn.net/welcome_xu/article/details/6694985 膨脹、腐蝕、開、閉運算是數學形態學最基本的變換。 本文主要針對二值影象的形態學 膨脹:把二值影象各1畫素連線成分的邊界擴大一層(填充邊緣或0畫素內部的孔); 腐蝕:把二

數字影象處理——值濾波

原理:模板中心對準待處理畫素,對模板下的對應畫素進行灰度值排序,將中值賦給當前畫素 Matlab程式碼: clear,clc; car = imread('sport car.pgm'); noise_car = imnoise(car,'salt & pepper',0.02);