离散傅立叶变换-快速找到基本原理?


9

首先,我很抱歉,因为我是一名软件开发人员,而且很长一段时间以来我还没有深入研究纯数学,所以我的问题似乎很愚蠢。我希望不是。

背景是音乐中的音高识别。

如果您记下音符,然后对其进行傅立叶变换,则对于给定的频率,您将获得无限的振幅总和。例如,如果我在任何乐器上演奏基音为的音符,则在进行傅立叶变换后,我将在处产生谐波。每个频率都会有一个给定的幅度,该幅度定义了乐器的音色(钢琴,声音,小号……都遵循此律,但是每个谐波的幅度都不同)F 2 F 3 F n FFF2F3FñF

现在我想要做的是从给定的音频信号,找到。只是。这比看起来要复杂得多,因为您将始终有背景噪声等等。此外,不一定是振幅最高的频率!˚FFF

因此,我找到想法是应用DFT(实际上实际上是FFT以获得速度)并找到频率,以便在FFT输出中最大。F F + 2 F + 3 F + + n FFFF+2F+3F++ñF

您认为这完全有可能吗?您认为在很短的时间内(例如<5毫秒)有可能吗?


可能这可能是答案:edaboard.com/thread197897.html

好吧,是的,但这是另一种方法,不是吗?恕我直言,它更容易但可靠得多,因为它无法区分谐波声音和非谐波声音...
Dinaiz 2011年

Answers:


6

您所描述的内容与本斯坦福CCRMA论文中列出的基音估计的谐波积谱方法非常相似。

FFT不会给您“振幅的总和”,而是有限数量的结果仓,具体取决于FFT的长度。

5 mS只是200 Hz音符的1个周期,并且只是200 Hz以下的周期的一小部分。音乐音调识别通常需要听到或分析音调的周期性的多个周期。许多音乐使用G2以下的音符。如果您有足够的数据长度,则从该数据计算音高估计值可能只需要几微秒的数量级,而在现代PC或移动设备上则只需几毫秒。


好点子。但是,如果您已经拥有2F和3F,则您实际上并不需要F,对吗?在您的示例中,2F = 400hz和3F = 600hz,因此即使没有听到足够的声音来听到5毫秒的时间,您也可能发现F为200。我也听说过小波变换。您认为这样做是更好的方法吗?
Dinaiz 2011年

@Dinaiz:取决于音调的来源以及泛音频率的那些片段是否实际上是静止的。小波是一个完全独立的问题。
hotpaw2 2011年

因此,该方法不适合“几乎实时”找到f0。在目前的技术水平下,是否有可能用任何仪器在不到几毫秒的时间内找到f0,或者这是一个迷失的原因,我应该放弃寻找吗?:D
Dinaiz
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.