每日精学 143|Goertzel单频递推

2026-09-25

雷达 · 通信 · 电子战 / 基础精学 143

Goertzel算法用二阶实系数递推求取指定DFT频点,在只需少量频率时可减少完整FFT及其存储开销。

01
模型与符号

长度N有限记录,指定整数DFT索引k,角频率 ω=2π k/N;递推状态起始为零。

s[n]:二阶递推状态(幅度)

ω:目标频率(rad/sample)

N:记录长度(sample)

X[k]:目标DFT值(幅度谱)

02
从模型到公式

二阶递推

采用

s[n]=x[n]+2\cos(\omega)s[n-1]-s[n-2],\quad s[-1]=s[-2]=0.

其传递函数为 1/(1−2cos(ω)z−1+z−2),分母因式为

(1-e^{\mathrm j\omega}z^{-1})(1-e^{-\mathrm j\omega}z^{-1})


末端组合

处理N个样本后定义

v=s[N-1]-e^{-\mathrm j\omega}s[N-2].

对应有限冲激响应求和可得

v=\sum_{m=0}^{N-1}x[m]e^{\mathrm j\omega(N-1-m)}

故

X[k]=e^{-\mathrm j\omega(N-1)}v.

整数k时该前因子等于

e^{\mathrm j\omega}

不能在需要绝对相位时遗漏。


幅度平方

实输入状态为实数,前因子模为1,因此

|X[k]|^2=s[N-1]^2+s[N-2]^2-2\cos(\omega)s[N-1]s[N-2].

只需要功率时可避免末端复数旋转,但仍需正确处理状态增长。

有限记录状态增长而非渐近稳定

Goertzel 二阶递推的极点位于单位圆。其状态冲激响应可写成

h_s[n]=\frac{\sin((n+1)\omega)}{\sin\omega},\qquad \sin\omega\ne0.

长度 N 的输入若满足 |x[n]|≤ X,三角不等式给出保守状态界

|s[n]|\le\frac{(n+1)X}{|\sin\omega|},\qquad 0\le n<N.

状态需求随块长增长,并在接近直流或 Nyquist 时使该界变松。

有限块内可正确完成频点求和,不意味着递推可无限运行而保持有界。块开始清零与末端相位组合都是定义的一部分,不能把跨块残留状态当成新的独立 DFT 结果。


03
物理含义

递推谐振器积累指定频率的相干贡献,有限记录结束时再组合状态消去不需要的另一极点。

04
固定参数算例

N=96、k=16时系数 2cosω=1,以显式递推比较直接复指数内积的复值和功率,检查末端相位因子。

固定参数数值验证结果
量数值
length96
bin16
recursion coefficient1
complex value error9.87117515866e-14
power identity error9.09494701773e-13
state peak56.0507860065
omitted phase error rad1.0471975512
图 1:Goertzel单频递推的理论关系与固定参数验证图 1:Goertzel单频递推的理论关系与固定参数验证

图 1 Goertzel单频递推的理论关系与固定参数验证

表中数值和图中曲线由 MATLAB 实际运行得到,随机种子为 20261062;运行版本与完整结果另存为独立文件。

05
数字实现的边界

RTL实现 s← x+s1−s2,对应 ω=π/3 的Goertzel状态更新,并输出最新两个状态;

末端复数相位旋转由外部完成。 RTL 采用同步有效信号和异步低有效复位;空拍保持状态且输出无效。除另有说明外,输入为16位有符号整数,结果为64位有符号整数,测试范围内不截断或饱和。

输出在采样时钟上升沿更新。自检覆盖连续样本、空拍和复位;未进行器件布局布线、时序收敛或功耗验证。

独立自检程序已在 Icarus Verilog 13.0 中实际运行并通过。该结果不包含器件综合、静态时序分析或板级测试。

06
适用范围

Goertzel递推适用于少量已知频点的幅度测量和基础音调检测。目标频点数量很少时,可避免计算和保存其余频谱。若需要绝对相位、非整数频率或跨块相干比较,则末端相位因子和记录起点必须明确保留。

07
工程上需要注意

极点在单位圆上,无限时长运行不构成BIBO稳定滤波器。

每个有限块必须按约定复位。

频率接近直流或Nyquist时内部状态可能显著增长。

Goertzel算法用二阶实系数递推求取指定DFT频点,在只需少量频率时可减少完整FFT及其存储开销。

内容依据:每日精学第 143 课《Goertzel单频递推》。图表沿用原课固定参数数值结果,属于数值验证,不代表设备实测。

阅读8
分享
写评论...