如果信号的频率位于两个 bin 中心之间,则获取信号的峰值

信息处理 fft 离散信号 信号分析 估计 峰值检测
2021-12-26 07:28:43

请假设以下情况:

  • 信号基频的频率已使用 FFT 和一些频率估计方法进行了估计,并且位于两个 bin 中心之间
  • 采样频率固定
  • 计算工作不是问题

知道频率,估计信号基波相应峰值的最准确方法是什么?

一种方法可能是将时间信号补零以增加 FFT 分辨率,从而使 bin 中心更接近估计的频率。在这种情况下,我不确定的一点是我是否可以尽可能多地进行零填充,或者这样做是否有一些缺点。另一个是在零填充之后我应该选择哪个 bin 中心作为我从中获得峰值的那个(因为即使在零填充之后,也可能不会准确地达到感兴趣的频率)。

但是,我也想知道是否有另一种方法可以提供更好的结果,即使用周围两个 bin 中心的峰值来估计感兴趣频率处的峰值的估计器。

4个回答

想到的第一个算法是Goertzel 算法该算法通常假设感兴趣的频率是基频的整数倍。但是,本文将(广义)算法应用于您感兴趣的案例。


另一个问题是信号模型不正确。它使用2*%pi*(1:siglen)*(Fc/siglen). 它应该2*%pi*(0:siglen-1)*(Fc/siglen)用于相位正确输出。

我也认为频率Fc=21.3非常低存在问题。当涉及到相位/频率估计问题时,低频实值信号往往会表现出偏差。

我还尝试对相位估计进行粗网格搜索,它给出的答案与 Goertzel 算法相同。

下图显示了两种不同频率的两种估计(Goertzel:蓝色,粗略:红色)的偏差:(Fc=21.3实线)和Fc=210.3(虚线)。如您所见,较高频率的偏差要小得多。

剧情X-axis 是从 0 变为的初始相位2π.

在此处输入图像描述

如果您愿意使用多个相邻的 FFT bin,而不仅仅是 2 个,则复数 bin 结果之间的加窗 Sinc 插值可以产生非常准确的估计,具体取决于窗口的宽度。

Windowed Sinc 插值通常出现在高质量的音频上采样器中,因此关于该主题的论文将具有合适的插值公式和误差分析。

如果您使用 Flanagan [1],它是根据连续相位谱 Δφ(瞬时频率)的相位差计算得出的,如果您使用正确的因子(瞬时幅度)[2] 重建幅度,则使用归一化的 sinc 函数:

(πX)(πX)
最后使用峰值幅度附近的抛物线插值可以获得惊人的结果,今天我认为这是最好的方法,我一直在使用它,结果总是非常可靠:-)

[1] JL Flanagan 和 RM Golden,“相位声码器”,贝尔系统技术杂志,第一卷。45,第 1493-1509 页,1966 年。

[2] K. Dressler,“使用多分辨率 FFT 的有效实现进行正弦提取”,Proc。第九国际。会议。关于数字音频效果 (DAFx-06),加拿大蒙特利尔,2006 年 9 月,第 247–252 页。

一种方法是找到最大值并围绕它拟合一条抛物线,然后使用抛物线的最大值作为频率和幅度估计。您可以在这里阅读所有相关信息:https ://ccrma.stanford.edu/~jos/sasp/Sinusoidal_Peak_Interpolation.html