用DFT計算線性卷積
兩有限長序列之間的卷積
我們知道,兩有限長序列之間的卷積可以用圓周卷積代替,假設兩有限長序列的長度分別為\(M\)和\(N\),那么卷積后的長度為\(L=M+N-1\),那么用圓周卷積計算線性卷積的具體過程為:
- 首先將兩序列在尾部補零,延拓成長度為L=M+N-1的序列
- 將兩序列進行圓周卷積,卷積后的結果即為線性卷積的結果

而圓周卷積的實現可以通過下圖實現

現討論\(X[k]\)的\(IDFT\)使用\(DFT\)實現
上圖可以改進為

所以線性卷積可以完全使用\(DFT\)實現,而\(DFT\)可以使用其快速算法\(FFT\)大大降低計算量。
有限長序列與無限長序列卷積
或者說有限長序列與另一長度遠大於其長度的序列進行卷積,如果按照上面直接用\(DFT\)計算的話,有兩個問題。
- 必須知道無限長序列的全部元素,才能進行計算
- 用DFT計算卷積可能還不如直接進行卷積運算來得快
為解決上述的問題,可以將無限長序列划分為短序列,將短序列與有限長序列進行卷積,然后對結果進行處理,主要由兩種方法:重疊相加法和重疊保留法。
重疊相加法
假設有限長序列\(h[n]\)的長度為\(M\),無限長序列\(x[n]\)將其以長度\(N\)進行分割,則
其中
\(x_m[n]\)表示將划分的第\(m\)段的起點移到原點。如下

則卷積
記\(y_m[n]=h[n]*x_m[n]\),則上式可寫為
該式表示卷積結果等於\(h[n]\)與\(x_m[n]\)卷積,然后將這些卷積結果移位相加。

可知\(mN\backsim mN+M-2\)共\(M-1\)點是重疊的,這些點要加起來,所以具體算法是:將\(x[n]\)以\(N\)為長度划分為若干組\(x_m[n]\),將這些組分別與\(h[n]\)進行卷積得到\(y_m[n]\),然后將這些卷積結果進行移位,重疊部分要相加,這就是重疊相加法。
上述提到的\(x_m[n]\)與\(h[n]\)的卷積,均可使用上面提到的\(DFT\)實現。
重疊保留法
同樣將\(x[n]\)以長度\(N\)進行划分,一般取\(N>M\),這時以\(N\)點進行圓周卷積。實際卷積的長度\(l=N+M-1\),由圓周卷積與線性卷積的關系,知圓周卷積的后\(2N-l=N-M+1\)個點與線性卷積的結果是一致的。

取
將\(x_m[n]\)與\(h[n]\)進行\(N\)點圓周卷積得到\(y_m[n]\),只取后\(N+M-1\)個點,其余重疊的前\(M-1\)個點舍棄(保留)。然后進行移位相加,得到的結果就是進行線性卷積的結果。

由上圖知,要使得到的結果表示\(y[n]\),應使得\(L-M-2=N-2+1 \Rightarrow L=N-M+1\)
同理上面提到的圓周卷積均可用\(DFT\)進行實現。