格策爾演算法

格策爾演算法或格茲爾演算法( 英語:Goertzel algorithm )是數位訊號處理的一種運算技巧，此運算技巧提供一個有效率的方式來估計部分區域的離散傅立葉轉換，廣泛的運用在數字電話中的的雙音多頻信號(每個撥號的數字鍵由兩個頻率的音所組成，一個低頻，一個高頻)，此演算法在1958年被所提出。

格策爾演算法與離散傅立葉轉換的相似處在於他們都可以分析某個特定頻段的離散訊號；相反的，它們的不同處在於，格策爾演算法每次疊代的運算都是使用實數的乘法。雖然說在全頻域的計算上，格策爾演算法會比其他的傅立葉轉換快速演算法的複雜度來的高，但是它能區段式的分析每個小區段的頻率組成，因此可以編寫成較簡單的運算架構，實際應用在處理器內的數值計算會更有效率。

格策爾演算法逆向操作生成出弦波，而這個過程只需花費一個乘法和一個加法運算。

演算法 
格策爾演算法把離散傅立葉轉換看成是一組濾波器，將輸入的訊號與濾波器中的脈衝響應做卷積運算，求得濾波器的輸出，即得到頻率域其中一點的頻率。此演算法利用旋轉因子的週期性，將離散傅立葉轉換轉換為線性的濾波運算。

因為旋轉因子

可得轉換後第k點的頻率為

定義為

可將理解為由兩個訊號的卷積運算得出的結果

其中式輸入的N點訊號，另外一個則被看作是IIR濾波器的脈衝頻率響應

對比(2)和(3)式，可推知(3.A)進行卷積運算，當n=N時，濾波器的輸出即為:

對(4)進行Z轉換，可得一階IIR轉移函數

圖一為此系統的流程圖，其對應的差分方程式為:

依照此差分方程進行疊代運算，疊代到時即可依據(5)式得到。而依照轉移函數(6)式進行運算時，可以先將旋轉因子儲存起來，每次疊代包含一次複數乘法，則按照(1)式計算N點離散傅立葉轉換時則需要次實數乘法運算和次加/減法，加/減法與乘法運算皆為次，當N不大時運算效率不佳，若改為接下來改進的的格策爾演算法(二階)，所需的實數乘法次數約為原本的一半。

將式(6)上下同乘以，可得第k點的頻率響應轉移函數為

此轉移函數所對應的系統流程圖如圖二所示，複數分析(8)式，可得知此二階濾波器有一對共軛的極點與一個零點。圖二中在計算的轉換結果時，會有兩個步驟:
 共軛極點疊代計算   依序將輸入訊號放入濾波器做疊代運算，共作N次疊代，計算量是次實數乘法與次實數加/減法
 零點疊代計算   輸入訊號是N點的訊號從。加入的邊界條件，可以按照圖二的流程圖計算出，此即為所求的離散傅立葉轉換，此步驟的計算量為4次實數乘法與4次實數加/減法。
綜合以上步驟，總共的計算量為次實數乘法運算以及次實數加法運算，而使用此計算演算法只需儲存與兩個參數。

相關條目 
 雙音多頻
 Chirp-Z轉換
 頻率偏移調變(FSK)
 相位偏移調變(PSK)

參考資料

延伸閱讀 
 Proakis, J. G.; Manolakis, D. G. (1996), Digital Signal Processing: Principles, Algorithms, and Applications, Upper Saddle River, NJ: Prentice Hall, pp. 480–481

外部連結 
 格策爾演算法網站介紹(英文)
 頻域分析數位訊號數理演算法 (英文)
 格策爾演算法網站介紹 (英文) 作者: Kevin Bank,2002

快速傅立葉轉換演算法
线性滤波器
離散轉換