# 3.2 脈衝響應&卷積
## DT卷積
我們需要一步一步推導出需要的式子。首先,我們要將事情變得複雜一點。考慮任何一個信號$x[n]$,我們都可以利用unit impulse將它改寫成:
$$
x[n] = \sum_{k=-\infty}^{\infty} x[k]\delta[n-k]
$$
回憶一下,$\delta[n-k]$是一根在$n=k$處的柱子,我們給它賦予一個高度,是$x[n]$在此點的值。再將這些柱子加起來,就會得到原本一連串的$x[n]$。注意,**$x[k]$在此是一個常數**,僅有$\delta[n-k]$是信號。
看起來對事情沒什麼幫助。但如果我們考慮將這個信號送進一個LTI系統,有趣的事就發生了:
1. 輸出會等於這一連串的輸入相加(因為線性)。
2. $\delta[n-k]$的輸出會是$\delta[n]$的輸出,只不過有著$k$單位的延遲(因為時不變)。
我們定義:
:::danger
**脈衝響應** (Impulse Response) $h[n]$是一個系統$F$對$\delta[n]$的輸出。也就是:
$$
h[n] \triangleq F\{\delta[n]\}
$$
:::
那麼,我們就可以得到:
$$
F\{x[n]\}=F\{\sum_{k=-\infty}^{\infty} x[k]\delta[n-k]\}=\sum_{k=-\infty}^{\infty} x[k]\cdot F\{\delta[n-k]\}=\sum_{k=-\infty}^{\infty} x[k]h[n-k]
$$
注意到我們只需要知道一個系統會怎樣對待一個unit impulse,我們就可以透過一個很神奇的數學運算,得到它對**任意輸入信號**的輸出。我們定義這樣的運算叫做**卷積**(convolution)。
:::danger
**DT卷積**
$$
(f*g)[n] = \sum_{k=-\infty}^{\infty} f[k]g[n-k]
$$
:::
## CT卷積
我個人認為,對於CT卷積的推導除了複雜以外還沒什麼建設性,還不如直接目測出他的連續對應版。所以我直接說出答案:
:::danger
**脈衝響應** (Impulse Response) $h(t)$是一個系統$F$對$\delta(t)$的輸出。也就是:
$$
h(t) \triangleq F\{\delta(t)\}
$$
:::
:::danger
**CT卷積**
$$
(f*g)(t) = \int_{-\infty}^{\infty} f(\tau)g(t-\tau)\,d\tau
$$
:::
## 卷積的重要性質
最重要的性質就是我們剛剛推導的: **對於LTI系統而言,系統的輸出,等於輸入信號和其脈衝響應的卷積。** 寫成數學式子:
:::danger
$$
y=x*h
$$
:::
另外,我們看最一開始的式子,告訴我們:
:::danger
$$
x=x*\delta
$$
:::
下面的關係式應該也不難驗證:
:::danger
$$
\sum_{k=-\infty}^{n} f[k]=f*u
$$$$
\int_{-\infty}^{t} x(\tau) d\tau=x*u
$$
:::
**以上這三個性質是最重要的**,在後續的推導會用到。其餘的就是一些計算技巧。大多可以從定義出發直接推得,在這邊就略過證明。
1. 交換律: $f*g=g*f$
2. 對加法分配律: $f*(g+h)=f*g+f*h$
3. 對數乘結合律: $a(f*g)=(af)*g=f*(ag)$
4. 結合律: $f*(g*h)=(f*g)*h$
5. 微分/差分/偏微分: $(f*g)'=f'*g=f*g'$
6. 複數共軛: $\overline{f*g}=\bar{f}*\bar{g}$
## 卷積的視覺化
維基百科上的這張圖很好的解釋了卷積「看起來」是什麼樣子: 我們翻轉其中一個信號,然後左右滑動,看看它們相乘起來的積分是多少。

在需要手算的時候,可以畫圖輔助,會幫助很大。
## 範例
這裡我們舉一個CT的例子。考慮:
- $x(t)=t^2,\,(0\le t\le2)$
- $y(t)=3t+2,\,(0\le t\le3)$
其他地方我們都假設為0。
接下來就是一頓計算。我們利用上面的圖,知道$y(t)$現在是被左右翻轉的,而$x(t)$是固定住的。我們慢慢增加$t$值來把$y$向右滑動。
在$0\le t\le 2$時,$x,y$並未完全重疊。而$y$只有$0\sim t$的部分有值。所以是$\int_{0}^t \tau^2(3(t-\tau)+2)\,d\tau$。
在$2\le t\le 3$時,$x,y$並完全重疊。滑動的$y$可以整個包住固定的$x$,所以是$\int_{0}^2 \tau^2(3(t-\tau)+2)\,d\tau$。
在$3\le t\le 5$時,$x,y$並未完全重疊。而$y$已經滑動到超出了$x$的範圍,因此只有$t\sim2$的部分有值。所以是$\int_{t}^2 \tau^2(3(t-\tau)+2)\,d\tau$。
其餘部分,因為$x,y$完全分離,是0。
完整的答案會是:
$$
(x*y)(t) =
$$
\begin{cases}
\frac{1}{4}t^4 + \frac{2}{3}t^3, & 0 \le t \le 2, \\[6pt]
8t - \frac{20}{3}, & 2 < t \le 3, \\[6pt]
8t - \frac{20}{3} - t(t-3)^3 + \frac{3}{4}(t-3)^4 - \frac{2}{3}(t-3)^3, & 3 < t \le 5, \\[6pt]
0, & \text{otherwise.}
\end{cases}
就這麼兩個簡單的函數,卷積完一樣是這坨醜到不行的東西。幸好在之後的課程裡面我們不太會這樣手算一堆卷積。取而代之的是我們要用一些技巧,簡化計算系統輸出的方式。畢竟這樣暴力解卷積一看就不是什麼好方法。
## 其他卷積的例子
有很多我們已經習以為常的運算,其實都用到了卷積的概念。
### 整數乘法
我們在小學二年級第一次學了卷積。考慮以下乘法:
```
3 1
x) 2 5
-------
```
我們在做的其實是一個卷積:
- 個位數: 5x1
- 十位數: 5x3 + 2x1
- 百位數: 2x3
所以其實我們可以把它想成$[3,1]*[2,5]$:
- $(x*y)[0] = x[0]y[0] = 3\times2$
- $(x*y)[1] = x[1]y[0]+x[0]y[1] = 1\times2+3\times5$
- $(x*y)[2] = x[1]y[1] = 1\times5$
### 多項式的乘法
舉例來說,$(x^2+3x+5)(7x^3+6x+2)$,其實就是$[5,3,1]$和$[2,6,0,7]$的卷積。所以如果要問$x^3$的係數是多少? 答案就是這兩個卷積的$n=3$。也就是:
$$
(x*y)[3] = x[0]y[3] + x[1]y[2] + x[2]y[1] + x[3]y[0]
$$$$
= 5\times7+3\times0+1\times6+0\times2=41
$$
貼心提醒,算這些用卷積不會比較快。我也強烈不推薦你先教小學生卷積再教他們二位數乘法。我只是點出卷積的一些例子。