快速傅立葉轉換與譜方法

快速卷積(fast convolution)

快速卷積是卷積定理的實際應用:它是把卷積透過 FFT 來計算、而非硬磨滑動求和定義的實用日常技術。一個殘響外掛能即時把吉他軌與一段十秒的大教堂錄音卷積,一個大整數函式庫能在一眨眼間相乘千位數的數字,靠的都是它。

其流程是卷積定理三步配方的具體化。要把訊號 x(長 M)與濾波器 h(長 L)卷積:選一個至少為 M + L - 1 的轉換長度 N(通常向上湊到方便的 FFT 大小,如 2 的冪);把 x 與 h 都補零到長 N;計算它們的 FFT,逐點相乘兩個頻譜,再取反 FFT。結果就是精確的線性卷積,以 O(N log N) 時間算出,而非 O(M * L)。補零到 M + L - 1 正是防止 FFT 的循環環繞汙染答案的關鍵。當一個輸入是連續串流、另一個是短的固定濾波器時,你把串流分成重疊區塊處理再縫合——即重疊相加(overlap-add)與重疊保留(overlap-save)法——使一段長錄音能以每區塊穩定、有界的工作量被濾波。

快速卷積並非總是贏家,誠實地說這很重要。FFT 路線有固定開銷,所以對「短」濾波器(少數幾個抽頭)而言,直接求和其實更快也更簡單;FFT 法要等濾波器夠長——大約數十個抽頭以上——才划算。它也假設你能緩衝足夠的樣本,這會增加延遲,不適合某些即時迴路。又因為一切以浮點運行,答案帶有正常的捨入;要得到精確的整數結果(如大整數乘法),人們會用數論轉換或謹慎縮放,使捨入能被精確消除。

對一段 100,000 樣本的音訊套用 500 抽頭的濾波器。直接卷積約需 5 * 10^7 次乘加。用 1024 點 FFT 區塊的重疊相加法把它降到幾百萬次運算——快到足以即時運行。大整數乘法用相同想法:數字位成為訊號樣本,一次 FFT 卷積便相乘千位數的數字。

長濾波器與大整數乘積,都敗給以 FFT 為基礎的卷積。

對短濾波器,直接求和勝過 FFT——轉換的固定開銷要超過幾十個抽頭才划算。而浮點的 FFT 卷積是近似的;需要精確整數的應用要用數論轉換或保證可還原的縮放。

又稱
FFT convolutionFFT-based filteringFFT 卷積快速摺積