從數學上講,卷積就是一種運算。
定義函式 $f,g$ 的卷積 $(f * g)(t)$ 如下
1. 連續形式:
$$(f*g)(t) = \int_^f(\tau)g(t - \tau)d\tau$$
那這個怎麼理解呢?
函式 $g(t)$ 可以理解為衝擊響應,即乙個衝擊訊號經過乙個線性系統後產生的輸出函式,假設它的影象長成下面這個樣子:
在 $0$ 時刻輸入了乙個衝擊訊號,這個作用是瞬時的,但是它產生的影響不是瞬時的,而是乙個持續性的後果,從上圖可以觀察到,$0$
時刻接收到衝擊訊號後立馬產生了乙個 $w_$ 的影響,然後這個影響不斷衰退,直到 $0$,舉個例子:某個時刻打了你一巴掌,一開始很疼,
然後痛感逐漸減弱,$g(t)$ 就是痛感隨時間變化的函式。
假設現在打了你無數個巴掌,那怎麼計算出某個時刻你的痛感呢?先考慮乙個簡單的情形,每次打巴掌的時間間隔大於 $t$,如下圖
這種情況下,因為沒有重疊,所以只要知道打巴掌的時間和效果函式 $g(t)$,就很容易可以得到疼痛感,但假如沒等到 $t$ 就連續打了多個巴掌呢?
在時刻 $0$,$t_$,$t_$ 分別輸入了三個衝擊訊號,即打了三巴掌,現在計算時刻 $a$ 的痛感。
很明顯越早打巴掌,到時刻 $a$ 時痛感越弱。
根據線性系統的性質可知,痛感具有疊加性,於是時刻 $a$ 的痛感為
$$g_(a - 0) + g_(a - t_) + g_(a - t_)$$
回到卷積公式,$g(t - \tau)$ 就表示在 $\tau$ 時刻打了一巴掌,這一巴掌在 $t$ 時刻時的痛感(有衰減)。
現在更進一步,在 $-\infty-+\infty$ 區間的任一時刻,我都可能打你一巴掌,相同的時刻可能連打好幾巴掌,那麼怎麼計算時刻 $t$ 的痛感?
將函式 $f(t)$ 理解為衝擊訊號輸入的速度,即打巴掌的速度,那怎麼求某個時刻 $\tau$ 打了多少巴掌?這裡可以用極限逼近的思想。
設 $\tau - \varepsilon < \tau < \tau + \varepsilon$,當 $\varepsilon \rightarrow 0$ 時,就認為是勻速打巴掌,那麼時刻 $\tau$ 打的巴掌數為
$$\lim_f(\tau) \cdot 2\varepsilon$$
因為痛感可以疊加,所以每個時刻在 $t$ 產生的痛感為
$$\sum \lim_f(\tau) \cdot 2\varepsilon \cdot g(t - \tau) = \int_^f(\tau)g(t-\tau)d\tau$$
2. 離散形式:
$$(f*g)(t) = \sum_^f(\tau)g(t - \tau)$$
模擬於連續的情況,區別是這裡的 $f(\tau)$ 直接理解為衝擊訊號在時刻 $\tau$ 輸入的次數(在時刻 $\tau$ 打的巴掌數),而不是衝擊訊號輸入的速度。
綜上:系統的輸出不僅與系統在 $t$ 時刻的響應有關,還與它在 $t$ 時刻之前的響應有關,不過系統有個衰減過程,$\tau < t$ 時刻的輸入在 $t$ 時刻
對輸出的影
響可以表示為 $f(\tau)g(t-\tau)$,這個過程可能是離散的,也可能是連續的,所以 $t$ 時刻的輸出應該為 $t$ 時刻之前系統響應函式
在 $t$ 時刻響
應的疊加,這便是卷積。
迴圈卷積與線性卷積
迴圈卷積 針對的是兩個長度都為n的序列,對兩個序列做fft,然後再做ifft得到的結果就是迴圈卷積,結果的長度也是n。直接計算步驟 序列a與序列b,長度都是n,新的序列c 1 把b倒過來。翻轉 2 把b向右平移乙個元素。最右側的元素補到左邊。3 計算此時a和b對應元素的積的和。將其加到c的末尾。4 ...
迴圈卷積和線性卷積的關係
迴圈卷積和線性卷積的關係 一般訊號處理濾波器 時域資料 與 濾波器係數的線性卷積,但卷積的運算量比較大,所以用頻域的相乘來替代時域卷積,而頻域的相乘等於時域迴圈卷積,所以要有乙個迴圈卷積和線性卷積轉換的過程,如下matlab例子 x 3 2 1 2 5 y 7 1 8 5 1 n length x ...
C語言實現線性卷積和圓周卷積
已知x n 求x n x n x n x n x n x n include graphics.h include include include include 線性卷積 void conv int x,int y else if m 4 m 0 else y n 1 x m x s 圓周卷積 n...