我正在尝试尽可能准确地分析音乐。
我当然尝试了FFT,但是遇到了一些问题。

我发现低频比人类的听力分辨率低。我尝试了很长时间的FFT来解决此问题,但是即使以44100Hz的采样率进行8192个采样/秒的分析(意味着缺乏时间分辨率),在低频上我也没有足够的分辨率。

我发现解决方案很少。

首先,对FFT仓进行二次插值。
但这似乎不是完美的方法。此方法存在以下问题:

1。 “如果我想确定频率仓之间的频率,我应该选择哪三个仓进行插值?”

2。 “即使我这样做,也没有关于结果的实际附加信息。我知道插值是一种棘手的方法。'

其次,以所需的频率提取每个频率仓,因此我可以对数地提取仓。

但是计算成本很高问题:(可能超过)N ^ 2。

第三,LFT(对数傅立叶变换)。

这需要对数间隔的样本,并且给出的结果正是我所寻找的以惊人的速度https://stackoverflow.com/questions/1120422/is-there-an-fft-that-uses-a-logarithmic-division-of-frequency

但是我对这种算法一无所知。我试图理解并实施本文,但由于缺乏英语和数学技能,因此无法实现。

因此,我需要LFT的实施帮助。

#1 楼

最简单,最实用的解决方案是使用大小足够大的常规FFT,以使您在感兴趣的最低频率下获得所需的分辨率。例如。如果您想在最低的感兴趣频率上获得1 Hz的分辨率,则需要一个1秒的FFT窗口,即FFT大小需要等于采样率,例如44100.

请注意,即使您可以实现对数FFT,它仍将受到物理定律(信息论)的约束,并且您仍然需要一个类似的长度采样窗口-您将获得的所有结果会牺牲性能而带来便利(不必汇总出纸槽)。

评论


$ \ begingroup $
这很奇怪。我知道理论上没有更多数据。如果我使用大尺寸FFT,则确实无法分析非常快速的乐器发作。同样,我无法在低频上获得更高的分辨率。但是人类的听力系统呢?该系统如何在时间和频率上获得更高的分辨率?
$ \ endgroup $
–吴智熙
13年1月20日在12:45

$ \ begingroup $
也许您应该考虑采用分层方法,将每个连续的八度音程减少2倍,以便可以在较高频率下使用较短的时间窗口,而在较低频率下使用较长的时间窗口?这在某种程度上类似于听觉滤波器组,其中带宽随频率增加。
$ \ endgroup $
– Paul R
13年1月20日在17:25

$ \ begingroup $
很好的方法。低频时长的鹅蛋,高频时短的鹅蛋?说得通。但是将需要很大的计算成本。
$ \ endgroup $
–吴智熙
13年1月21日在10:21

$ \ begingroup $
尽管它更复杂,但它可能比进行一次大型FFT效率更高。例如。对于4个八度音阶层次结构,您可能需要4 x 2048点FFT和3个低通滤波器来进行x2下采样。在全采样率下,最低FFT的分辨率将与单个16384点FFT一样好,但是由于FFT为O(n log n),因此总的计算成本将大大降低。
$ \ endgroup $
– Paul R
13年1月21日在11:16

$ \ begingroup $
aha,FFT 2048,向下采样x2,FFT 2048,向下采样x2 ....比我同时具有时间和频率分辨率,其成本要比16384 FFT小得多。大。而现在,我有了另一种解决方案:在16384个样本上,goertzel每次加32。因此,通过累加,我可以以较低的成本提取低频和高频。非常感谢。 :)
$ \ endgroup $
–吴智熙
13年1月21日在11:43

#2 楼

如果要执行的分析需要每个仓中信号的频率,则可以使用短时傅立叶变换来实现这一目的。虚构分量-或经过一些操作阶段和幅度。

由于频率= dPhi / dt(Phi ==相位),通过从成对的连续STFT频谱中获取相应的频段,可以计算频率。

DSP Dimension上有一篇很好的文章。

评论


$ \ begingroup $
我正在考虑一个更复杂的问题。我可以使用FFT,但是在音频信号分析中却不适合。
$ \ endgroup $
–吴智熙
13年1月21日在10:24

$ \ begingroup $
看一下短时傅立叶变换的“恒定Q”版本。 STFT的这种安排可提供对数调整的频率分辨率,以适应不同频率范围的要求。
$ \ endgroup $
–user2718
2013年1月21日14:25



$ \ begingroup $
我来看一下。我认为这只是应用于fft结果的简单滤波器组变换操作。
$ \ endgroup $
– Laie
2013年1月21日14:41