9-3 Convolution (嚙諛積)

對於任意的訊號 x[n],我們可以將其表示成為單位脈衝訊號(Unit Impulse Signal)的組合,如下:

x[n] = Sk=0x[k]d[n-k]
上述式子可以看成是「k 代表時間,x[k] 固定不動,d[n-k] 隨不同的 n 而移動」。 同理,上式也可以寫成:
x[n] = Sk=0x[n-k]d[k]
此時可以看成是「k 代表時間,d[k] 固定不動,x[n-k] 隨不同的 n 而移動」。

因此對於一個 LTI 系統 L{•},當其輸入為 x[n] 時,其輸出為 y[n],可用下列關係式來描述:
y[n]=L{x[n]}
=L{Sk=0x[k]d[n-k]}
=Sk=0x[k]L{d[n-k]}
=Sk=0x[k]h[n-k]
其中 h(n-k)=L{d(n-k)} 是系統對於位於 n=k 的單位脈衝訊號所產生的響應(Response)。換句話說,一個 LTI 系統的輸出,完全可以由輸入訊號 x[n] 和系統的脈衝響應(Impulse Response) h[n] 來決定。換句話說,一個 LTI 系統的脈衝響應就決定了這個系統的全部特性!

上述公式,可用下列示意圖來說明:

Example 1: convolution01.m% Plot the operation of convolution n = -7:7; x = [0 0 0 0 0 0 0 1 2 3 0 0 0 0 0]; subplot(4,2,7); stem(n, x); limit=[min(n), max(n), 0, 5]; axis(limit); title('Input x[n]'); subplot(4,2,1); x0=0*x; x0(8)=x(8); stem(n, x0); axis(limit); h=text(0, x0(8), 'x[0]'); set(h, 'horiz', 'center', 'vertical', 'bottom'); subplot(4,2,2); y0=0*x; index=find(x0); for i=index:length(n) y0(i)=x0(index)*exp(-(i-index)/2); end stem(n, y0); axis(limit); h=text(0, x0(8), 'x[0]*h[n-0]'); set(h, 'vertical', 'bottom'); subplot(4,2,3); x1=0*x; x1(9)=x(9); stem(n, x1); axis(limit); h=text(1, x1(9), 'x[1]'); set(h, 'horiz', 'center', 'vertical', 'bottom'); subplot(4,2,4); y1=0*x; index=find(x1); for i=index:length(n) y1(i)=x1(index)*exp(-(i-index)/2); end stem(n, y1); axis(limit); h=text(1, x1(9), 'x[1]*h[n-1]'); set(h, 'vertical', 'bottom'); subplot(4,2,5); x2=0*x; x2(10)=x(10); stem(n, x2); axis(limit); h=text(2, x2(10), 'x[2]'); set(h, 'horiz', 'center', 'vertical', 'bottom'); subplot(4,2,6); y2=0*x; index=find(x2); for i=index:length(n) y2(i)=x2(index)*exp(-(i-index)/2); end stem(n, y2); axis(limit); h=text(2, x2(10), 'x[2]*h[n-2]'); set(h, 'vertical', 'bottom'); subplot(4,2,8); stem(n, y0+y1+y2); axis(limit); title('Output y[n] = x[0]*h[n-0] + x[1]*h[n-1] + x[2]*h[n-2]');

如果採用本節的第二個方程式,則 y[n] 可以表示成
y[n]=L{x[n]}
=L{Sk=0x[n-k]d[k]}
=Sk=0x[n-k]L{d[k]}
=Sk=0x[n-k]h[k]}

由於上述的運算常被用到,因此我們將之定義成「旋積」(Convolution): y[n] = x[n]*h[n] = Sk=0x[k]h[n-k]} = Sk=0x[n-k]h[k]}
旋積運算具有下列特性:

  1. 交換律: x[n]*y[n] = y[n]*x[n]
  2. 結合律: (x[n]*y[n])*z[n] = x[n]*(y[n]*z[n])
  3. 分配律: x[n]*(y[n]+z[n]) = x[n]*y[n]+x[n]*z[n]
  4. 延遲性質: y[n]=x[n]*h[n] → y[n-n1-n2]=x[n-n1]*h[n-n2]

Audio Signal Processing and Recognition (音訊處理與辨識)