您可以在不增加窗口大小的情况下提高FFT的频率分辨率吗?


12

我想使用STFT进行多音高分析。我意识到检测信号中存在的部分仅仅是开始。我还是有问题。

假设我已经以“ CD”频率采样了信号44100Hz。在1024样本窗口中,我得到的频点分辨率为22500Hz/512=43Hz。这仅足以识别诸如C5 = 523.251Hz和的高钢琴音符 C#5 = 554.365

我曾经认为这1024是一个很大的窗口。但是也许不是,通常使用较大的窗口来检测局部图像吗?

除了增加窗口大小之外,是否可以使用其他方法来提高频率分辨率,这会使时间分辨率恶化?我想到了两种方法:

方法1:

  1. 使用带通滤波器将信号划分为多个频带(例如0-11.25Hz11.25-22.5Hz)。
  2. 对较高的频段进行下采样,以使原来的高频现在变为低频(第二个频段也是如此11.25-22.5Hz -> 0Hz-22.5Hz)-不确定是否可行。
  3. Concat生成的带有已调整标签的垃圾箱集。

方法2:

  1. 使用限制不断增加的一系列低通滤波器。
  2. 在增加的频率范围上执行FFT。
  3. 对于每个频率,请使用最佳分辨率(来自包含该频率的第一个FFT的仓)。
  4. 这将使低频具有更好的分辨率,但是我认为这是可以的,因为对于更高的音符,频率差异会更大。

对于这个问题,我将不胜感激。

我也在这里阅读: 窗口大小,采样率如何影响FFT基音估计? 关于改善峰提取结果的方法。我认为会尝试使用它。


如果您知道只有一个正弦分量,则可以将抛物线拟合到峰的相邻区间,然后进行插值以找到“真”峰。不知道这与@pichenettes描述的相位方法相比如何。
endolith

Answers:


9

如果您真的坚持使用FFT(而不是参数方法,而不会受到时间/频率折衷的影响),则可以通过使用相位信息为每个FFT单元恢复瞬时频率来伪造更好的分辨率。然后,可以通过在函数中找到平稳部分来检测部分,该函数给出瞬时频率作为FFT bin索引的函数。如本文所述,此技术的常见实现方式将“花费”您一个额外的STFT(通过对信号STFT和信号导数的STFT进行操作可以恢复瞬时频率)。

例如,在此Matlab实现中对音频信号进行正弦建模的ifgram函数。

请注意,这将无助于解决掉落在相邻FFT分档中的两个部分。与仅将频谱峰值的FFT bin索引转换为频率相比,它将提供更加准确的频率估计。


参数方法是什么意思?另外,您是否在几个月前就提到了一种类似FFT的算法,但该算法具有倍频程刻度,而不是统一的频率刻度?
吉姆·克莱

参数化方法是统计信号分析方法,其假设信号是由一组参数描述的特定过程生成的,并根据观测值计算这些参数的最小二乘估计。例如,如果您假设信号是N个指数阻尼正弦波+噪声的总和,则可以使用ESPRIT或MUSIC之类的算法来推断N个复振幅和脉动。
pichenettes 2012年

2
您可能是指常数Q转换。需要注意的是,它在计算方面没有FFT高效。而反转这种变换是一个不平凡的优化问题。
pichenettes 2012年

@JimClay:也许应该在这里会迁移?
endlith 2012年

1
说参数方法不受时间/频率折衷的困扰是令人误解的。参数化方法的核心是对系统进行建模,并使用该模型提取有意义的数据。但是性能仅与模型一样好。假设选择了“最佳”模型(极点数或信号空间特征向量数),则这些方法的性能对数据记录长度仍然非常敏感。
布赖恩2012年

2

术语“分辨率”具有多种含义。通常,您无法通过使用相同的数据窗口长度进行插值来提高分离(或“分辨”)间隔很小的光谱峰的能力。但是,通过各种插值方法,您可以估算出比FFT区间间隔更好的分辨率(有时更好的分辨率),这些孤立的平稳频谱峰的频率远高于本底噪声。

用于更高分辨率估计的常见FFT结果插值方法包括抛物线插值,Sinc插值,将数据零填充到更长的FFT中以及使用(略微)偏移重叠窗口的相位声码器方法。

FFT本质上是一组带通滤波器,对于给定的FIR滤波器内核长度,每个带通滤波器都有非常陡峭的过渡,但阻带纹波却很多。这样,这些滤波器对非周期性窗口内噪声没有很大的噪声抑制。如果您怀疑这种类型的干扰是一个问题,那么开窗FFT或自定义滤波器组可能会更好。


1

经过吉姆·克莱Jim Clay)问题和小插图回答的进一步研究后,我发现我的Method2是由Kashima和Mont-Reynaud所描述的被重塑的有界Q变换(我不确定我可以链接到本文,文件看上去很破译) 。

他们的方法在算法上效率更高,因为它们从最大的频率范围开始,并反复将其降采样2,直到达到最低的八度。

Q-变换的好处也受到布朗例如探索这里。它可能不如单次FFT高效,但是具有一个优点,它不需要在不需要此功能的高频带上计算粗FFT。

感谢您提供所有答案,评论和链接。


您所描述的内容听起来非常像小波变换,这似乎已被this证实。我意识到这是一篇过时的文章,但未来的读者也可能希望阅读小波。但是,正如我在回答中指出的那样,您不能更改时频不确定性原理,但是对数据的了解可以使您作弊。
orodbhen

1

如果您保留输入的“历史记录”,并使用它与DFT重叠,则它将提供更多信息来提取光谱内容。当然,这取决于信号的时变性质。它的形式类似于概率分布函数。

这将使您在时间上间隔更近的DFT。但是,这仍然会增加每个DFT的时间不确定性,这受自然法则的约束:时间和光谱行为的确切值无法同时确定。

但是,如果频率内容在窗口内变化不大,那应该没问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.