--- tags: signal, linear algebra --- # 從線性代數之觀點理解信號的卷積 ## 先備知識 線性代數中向量和正交基底的基本概念。 ## 離散信號之基底 訊號可視為**時間的函數**,而離散訊號可視作一個時間序列,在時間點$n \in \mathbb N$ (即非負整數所構成的集合)上,離散訊號$x$的值我們將它記為$x[n]$,當我們定義兩個離散訊號之間的加法以及訊號和純量的乘法,則所有離散訊號所構成的集合即為一個向量空間(為了方便,標記為$V$)。 考慮以下離散訊號所構成的集合: $$ \beta = \{ \delta(k), \delta(k - 1), \cdots\} = \left\{ \delta(n - k) \middle | k \in \mathbb N \right \} $$ 其中 $$ \delta(n) = \begin{cases} 1 & \text{ if } n = 0 \\ 0 & \text{ if } n \neq 0 \end{cases}. $$ 其中為了方便的以index的方式表達$\beta$中的元素,我們定義$\delta_k \overset{\Delta} = \delta(n - k ) \in \beta$。也因此$\beta = \{ \delta_0, \delta_1, \cdots \}$。當我們定義信號$x_1[n]$和$x_2[n]$之間的內積為 $$ \sum_{ n = 0}^\infty x_1[n] \cdot x_2[n] $$ ,則由定義可輕易的證明和想像出以下事實:$\beta$構成了$V$的一組orthonormal basis。也就是說,我們可以透過$\beta$裡面的元素以線性組合的方式完整的去表達任何一個離散訊號$x$: $$ x = \sum_{k=0}^\infty a_k \cdot \delta_k $$ ,上面的$a_k$就是向量$x$在基底向量$\delta_k$上面的分量。而因為 $\{ \delta_0, \delta_1, \cdots \}$是一組orthonormal basis,$a_k$即為$x$在向量$\delta_k$上的投影量$\langle x, \delta_k \rangle$,因此上式可由內積的形式來表達: $$ x = \sum_{k=0}^\infty \langle x, \delta_k \rangle \cdot \delta_k $$ 需要強調的一點,在此式中,$x$和$\delta_k$實際上都是函數空間的元素,亦即它們都是定義域為$\mathbb N$的離散型實函數,但其實這不過就是一種較為抽象的向量而已,而$\langle x, \delta_k \rangle$單純就是只隨index $k$所變化的一個**純量**。當我們想知道$x$這個信號在時間點$n$上所對應的值時,根據我們在這個函數空間中兩元素(信號,即函數)之間加法運算的定義來看,其實就是分別計算每個$\delta_k$在時間點$n$上所對應的值,接著各自乘上對應的純量係數$a_k$之後再加總所得出的實數值: $$ x[n] = \sum_{k=0}^\infty a_k \cdot \delta_k[n] = \sum_{k=0}^\infty x[n] \cdot \delta_k [n] = \sum_{k=0}^\infty x[n] \cdot \delta [ n - k ] $$ 上面的形式即為信號$x$對信號$\delta$在時間點$n$上的**卷積**(convolution)值,記為$(x * \delta)[n]$,也就是說上面的$k$可以當作單純是對基底的index之表達,而非時間($k$與$n$概念上可類比為之後傅立葉轉換中頻域與時域之間的關係)。 ## 卷積運算在線性非時變系統中的詮釋 儘管上面用捲積來表達某一信號在特定時間點上的值好像看似有點多餘,畢竟我們只需在時間點$n$上對信號$x$做取樣不就能獲得$x[n]$的值了,為何還要用捲積的形式來表達呢? 問題的答案其實就藏在線性系統的特性之中:在一個線性系統,假設輸入信號$x_1$和$x_2$所得到的輸出結果分別為$y_1$和$y_2$,而如果我們將系統的輸入改為$a_1 x_1 + a_2 x_2$,則得到的輸出即為$a_1 y_1 + a_2y_2$,當把信號當成向量來對待時,我們可以將此種系統理解為一種**線性變換**。線性代數告訴我們的一件重要的事情是,在線性變換中,只要掌握基底經過變換後的模樣,就能掌握該向量空間中所有元素經過同一線性變換後的樣貌,也因此,當我們將基底信號$\{ \delta_0, \delta_1, \cdots \}$分別丟入線性系統中,會得到一組輸出信號的集合$\{ h_0, h_1, \cdots \}$,結合線性非時變系統的特性以及上個小節中線性組合的概念,我們可以知道輸入信號 $$ x = \sum_{k=0}^\infty a_k \cdot \delta_k $$ 經過該系統之後的輸出會變成 $$ y = \sum_{k=0}^\infty a_k \cdot h_k $$ 此外,當系統是非時變的(time-invariant)時,倘若任一輸入訊號$x[n]$會得到$y[n]$的響應,則若將輸入訊號改為$x[n - k]$,則響應會變成$y[n - k]$,當結合$h[n]$的定義時,我們可以得到 $$ h_k[n] = h[n - k]. $$ 因此,當我們想知道輸出信號$y$在時間點$n$上的值時,等同於計算 $$ y[n] = \sum_{k=0}^\infty a_k \cdot h_k [n] = \sum_{k=0}^\infty a_k \cdot h [n - k] = \sum_{k=0}^\infty x[k] \cdot h [n - k] = (x * h)[n] $$ 其中$h$即為信號$\delta[n]$丟入該系統中所得到的輸出信號。這個重要的結論告訴我們的是,在離散線性非時變系統中,當我們知道impulse function $\delta$丟入線性系統所獲得的響應(輸出)函數$h$之後,即可透過卷積的方式來獲得任意離散信號$x$丟入同一系統中所得到之響應函數$y$,而信號$y$在時間點$n$上所對應的值即為$(x * h) [n]$。這也提供了另一個物理上的角度來理解為何卷積運算是一種將兩個函數變成另一種函數的**算子**(operator)。