我正在阅读本文,而作者对Goertzel算法对“频率分辨率”的广泛使用让我有些困惑。

基本问题:使用Goertzel算法是否确实可以为您提供更高的频率分辨率还是仅在指定的目标频段上有效地计算FFT,而只是以采样频率除以样本数指定的相同频率分辨率有效地计算FFT?

例如,假设$ F_s $为100 KHz(固定),数据样本$ N $的数量为10000。(也固定)。如果我计算正常的FFT,其中FFT长度也是$ N $,那么我的频率分辨率就可以预期为$ \ frac {F_s} {N} $,它等于10 Hz。这意味着我的垃圾箱被分隔了10 Hz,从-50,000 Hz到50,000 Hz。

现在让我们说我想使用Geortzel算法仅查看例如20,000- 21,000赫兹。如果我对采样数使用相同的$ N $,对FFT大小使用相同的$ N $,那么我的频率分辨率是多少?还是10 Hz?还是$ \ frac {21,000-20,000} {10000} = 0.1 $ Hz?

我有一种感觉,我并没有真正提高频率分辨率,而是简单地通过使用相同的$ N $来估算主瓣上的插值点,来评估21,000至20,000我从0到50,000。

这是正确的理解吗?

#1 楼

您的理解是正确的。

Goertzel算法提供的结果几乎与1箱DFT或FFT的长度相同或样本数相同(并且FFT旋转因子是由Trig递归生成的) ),用于Goertzel长度上正好为整数周期的频率。但是许多形式的Goertzel算法仅提供幅度,而不提供FFT 1 bin结果的复数结果或相位。同样,在计算上,通用的Goertzel在数值上可能比通用FFT的稳定性稍差。对于非整数周期孔径频率,结果等于相同长度的DFT或FFT的仓之间的正弦插值(与更典型的FFT抛物线插值相比,插值的精度可能更高)。

插值可以说是通过图形的方式(更多的绘图点)提高分辨率,或者可以更轻松地在视觉上发现最大值,但在信息理论上则不然,也不能更好地分离2条紧密间隔的光谱线,作为2个独立的峰。

评论


$ \ begingroup $
第二段:很好地说hotpaw2。我认为这使很多人感到困惑。是的,因此,似乎Goertzel Algo是在选定子带上计算FFT的快速方法,并且如果您将所有内容都保持与正常情况一样,还内置F域插值FFT。
$ \ endgroup $
–太空
2012年10月10日下午4:12

#2 楼

我无法访问您所指的文章,但我认为您可能会发现这很有趣。作者介绍了他们的Goertzel算法版本,该算法可用于查找给定信号中基频非整数倍频率上的振幅和相位。这意味着他们的算法确实提高了频率分辨率。本文包含数学证明和算法代码。