格策尔算法把离散傅立叶转换看成是一组滤波器,将输入的讯号与滤波器中的脉冲响应做卷积运算,求得滤波器的输出,即得到频率域其中一点的频率
。此算法利用旋转因子
的周期性,将离散傅立叶转换转换为线性的滤波运算。
因为旋转因子
 | | 1 |
可得转换后第k点的频率为
 | | 2 |
定义
为
 | | 3.A |
可将
理解为由两个讯号的卷积运算得出的结果
 | | 3.B |
其中
式输入的N点讯号,另外一个
则被看作是IIR滤波器的脉冲频率响应
 | | 4 |
对比(2)和(3)式,可推知(3.A)进行卷积运算,当n=N时,滤波器的输出
即为
:
 | | 5 |
对(4)进行Z转换,可得一阶IIR转移函数
 | | 6 |
图一为此系统的流程图,其对应的差分方程式为:
 | | 7 |
图一、格策尔一阶滤波器系统示意图
依照此差分方程进行迭代运算,迭代到
时即可依据(5)式得到
。而依照转移函数(6)式进行运算时,可以先将旋转因子
储存起来,每次迭代包含一次复数乘法,则按照(1)式计算N点离散傅立叶转换时则需要
次实数乘法运算和
次加/减法[6],加/减法与乘法运算皆为
次,当N不大时运算效率不佳,若改为接下来改进的的格策尔算法(二阶),所需的实数乘法次数约为原本的一半。
将式(6)上下同乘以
,可得第k点的频率响应转移函数为
| | 8 |
图二、格策尔二阶滤波器系统图
此转移函数所对应的系统流程图如图二所示,复数分析(8)式,可得知此二阶滤波器有一对共轭的极点与一个零点。图二中在计算
的转换结果
时,会有两个步骤:
- 共轭极点迭代计算 依序将输入讯号
放入滤波器做迭代运算,共作N次迭代,计算量是
次实数乘法与
次实数加/减法
- 零点迭代计算 输入讯号
是N点的讯号从
。加入
的边界条件,可以按照图二的流程图计算出
,此即为所求的
离散傅立叶转换
,此步骤的计算量为4次实数乘法与4次实数加/减法。
综合以上步骤,总共的计算量为
次实数乘法运算以及
次实数加法运算,而使用此计算算法只需储存
与
两个参数[7]。