線性卷積與圓周卷積
1.圓周卷積(circular convolution)
圓周卷積,也叫迴圈卷積,兩個長度為N的有限場序列和的迴圈卷積定義為
即迴圈卷積相當於週期延拓後的序列和做週期卷積後再取主值區間,若x(n)和h(n)的離散傅立葉變換為和,則有
即時域中的迴圈卷積對應於其離散傅立葉變換的乘積,迴圈卷積的結果y(n)長度為N
關於圓周卷積的計算,可以看另一篇的圖解計算
2.線性卷積(linear convolution)
通常所說的卷積就是指線性卷積,設x(n)、h(n)長度分別為M和N,則它們的線性卷積結果為
得到的y(n)長度為M+N-1,同樣,根據卷積定理可以知道,時域卷積等於頻域相乘
注意,現在只是頻域DTFT相乘相等,而離散傅立葉變換相乘並不相等,DFT是在DTFT基礎上再進行了頻域取樣,即對 離散化。
要讓線性卷積的時域結果與頻域相乘的逆變換相等,首先容易想到的就是對H( )和X()做相同的頻域取樣,也就是對x(n)、h(n)做相同點數的DFT,即讓兩序列在時域做圓周卷積,那麼現在問題是,做多少點數的DFT能讓圓周卷積等於線性卷積呢?
線性卷積最常見,直接套用公式計算,這裡就不圖解。
結論:利用迴圈卷積計算線性卷積的條件為迴圈卷積長度
利用迴圈卷積計算線性卷積的具體步驟為:
1. 將序列和補零延長,使其長度,若採用基-2 FFT,還應使為不小於的2的最小整數次冪;
2. 做和的長度為的FFT得到和,並求它們的積;
3. 求的iFFT並取前點,獲得線性卷積的結果
說的好像很簡單的樣子,那就用程式碼驗證下
x1 = [1,7,8,9,5,4,6,3,2];
x2 = [5,8,9,6,3,4,8,2,1,7,5,6,7];
conv(x1,x2)
L = 21;
ifft(fft(x1,L).*fft(x2,L))
上面程式中x1的長度為9,x2的長度為13,用matlab的conv函式直接計算出時域線性卷積,然後我們再驗證下頻域相乘,改變L值使分別L=13、21、23看看,與conv的結果對比,可以驗證,只有當L>=9+13時才會得到與conv一樣的結果。
那為什麼要講線性卷積轉化為迴圈卷積呢,那是因為時域中的迴圈卷積對應於其離散傅立葉變換的乘積,在兩個卷積項非常長且長度相差不大時,轉換到頻域利用FFT計算量會大大減小。
當兩個卷積項長度相差很大時,又該怎麼辦呢,這又引出了下一個問題,重疊相加法與重疊保留法