有没有找到无需DFT或FFT的频率的算法?


34

我在Android应用商店中寻找吉他调音器。我发现一个调谐器应用程序声称它比其他应用程序更快。它声称无需使用DFT就可以找到频率(我希望我仍然有该规范的URL)。

我从来没有听说过这个。您可以在不使用DFT或FFT算法的情况下获取音频信号并计算频率吗?

Answers:


29

FFT实际上并不是制作调谐器的好方法。FFT本质上具有有限的频率分辨率,要在不使时间窗口过长的情况下检测很小的频率变化并不容易,这会使它变得笨拙且缓慢。

更好的解决方案可以基于锁相环延迟锁环,自动相关,过零检测和跟踪,最大或最小检测和跟踪以及这些方法的智能组合。

预处理总是有帮助的。


5
FFT是否可以检测到微小的频率变化并不是其固有的长度,而是取决于信噪比。给定足够低的噪声和干扰,FFT结果的内插可以轻松产生子bin单频分辨率。
hotpaw2'2

任何人可以帮助我这个: - stackoverflow.com/questions/42359344/...
dreamBegin

12

FFT报告频谱频率的一个或多个峰值(由FFT仓大小量化),这不同于音高。FFT频谱中可能会完全丢失感知的音调频率。

一些最简单的吉他调音器仅使用低通或带通滤波,并测量过零之间的时间。倒数给出频率估计。

自相关是另一种常见的音高估计方法。滑动相关性或其他自相似性度量有很多变化,例如滑动ASDF(平方差),AMDF(均值差),非线性模式匹配器,仅针对有限范围的滞后进行自适应检查,滞后插值,开窗和自适应窗口选择,各种加权或使用决策理论在多个潜在的滞后历史序列之间进行选择等。大多数自相似性度量的一个问题是选择适当的八度,因为一个八度可能显示出几乎相同的相似性。

其他可能性包括使用PLL,滤波的正交解调器,滤波的希尔伯特变换等。

但是请注意,某些DSP滤波和解调方法在计算上几乎等同于对窗口DFT进行1进制处理,这可能适合也可能不适合您的问题。


8

音高检测可以通过许多通用且好奇的方式完成。一种方法是使用自相关。该给出了它是如何使用的例子。通过使用1位相关器,可以使自相关变得非常简单(由于某种原因,找不到相关的相关论文)。因此,从理论上讲,音调可以比FFT更快地检测到,但是我怀疑如果没有真正聪明的预处理,音调会更精确。


我认为链接断开了吗?...
Spacey 2012年

不,所有作品。我刚刚检查了一下。
声子

7

还可以看一下相对较新的算法定义的希尔伯特-黄变换(HHT)。它可以处理可能与您的应用有关的非平稳非线性信号。


当我找到它时,它是一颗宝石,尽管它并没有给您进行傅立叶分解,而是为您提供了瞬时频率分解。
Spacey 2012年

大多数现实生活中的信号在某种程度上都是不稳定的,即它们的幅度和频率略有不同。HHT对这些变化不太敏感,因此会以更自然的方式分解此类信号,其中各部分与潜在的物理现象关系更密切。
2013年



2

实际上,您可以使用伪频谱来计算信号的频率,该伪频谱查看其自相关矩阵的特征向量。它基本上将您的信号分解为噪声和信号子空间。从那里,您可以找到其频谱。(您也可以限制它,并给它提供检查频率的范围)。它也很抗噪音。当然,这是一种参数化方法,而不是像DFT这样的非参数化方法。



1
@endolith您可以在不涉及任何FFT的情况下进行计算。从相关矩阵中,您可以获得特征向量,然后是噪声子空间。然后,您可以构造自己的频率矢量进行投影,因此无需使用FFT。
Spacey 2012年

1

这一切都取决于要在哪个平台上进行处理,如果需要简单的电路,我建议使用增益爆破信号并将其转换为方波,并使用计时器使用微控制器测量周期。

但是,如果您想看一下信号处理,请查看MUSIC方法:

http://en.wikipedia.org/wiki/Multiple_signal_classification

希望能帮助到你


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.