实时以接近人类的准确性提取音频信号频率分量的最有效方法
我正在尝试找出如何(如果可能)以类似FFT的方式提取任意音频样本(通常是音乐)的频率分量,但是在我对FFT算法的研究中,我了解到它遭受了一些困扰为此目的有严格的限制。 FFT存在3个问题: 因为FFT二进制分辨率等于您的窗口大小,所以要获得相当合理的精度(例如1 Hz),您需要一个不合理的长窗口(例如1秒)。这意味着您无法快速检测到瞬态或新引入的频率。这也意味着使用更快的CPU和更高的采样率无法解决问题-限制本质上与时间有关。 人们对数地感知频率,但是FFT仓是线性间隔的。例如,在我们听力的低端,相差20hz 很大,而在高端处,相差20hz是不可察觉的。因此,要获得低频所需的精度,我们必须计算的远远超过高频所需的精度。 这些问题中的一些可以通过在FFT区间之间进行插值来解决。这可能适用于许多音乐音频,因为频率通常会相隔很远,因此不会有超过1个频率泄漏到一对音槽中。但这并非总是如此,特别是对于打击乐器之类的非谐音。因此,插值实际上只是猜测。 根据我对DFT / FFT算法的了解,输出(仓幅度)实际上是每个仓频率下正弦/余弦的相关性。令我吃惊的是,如果可以重新设计算法,使bin频率非线性地间隔(即,我们将一组不同的正弦/余弦相关联),那么我们就可以在所有频率上达到听觉相等的分辨率。这是可能的,还是基于我对所涉及数学的不完全理解而做的梦pipe以求? 我想我也可以通过在每个感兴趣的频率上关联正弦/余弦来用蛮力解决问题。这可能吗?什么样的效率?能解决我的问题吗? 是否有其他方法可以实现信号的更准确,实时的频率分解?CPU效率是一个关注点,但不是主要关注点-我对在理论上是否可以做到这一点感兴趣。但是,在现代台式机上实时可行的方法是理想的。