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

上下文是音乐中的音高识别。 。例如,如果我在任何乐器上演奏基本音为$ F $的音符,经过傅立叶变换后,我将在$ F,2F,3F,\ ldots,nF $处产生谐波。每个频率都会有一个给定的幅度,该幅度定义了乐器的音色(钢琴,声音,小号……都遵循此律,但是每个谐波的幅度都不同)

现在我想从给定的音频信号中找到$ F $。就是这样。
它比看起来要复杂得多,因为您总是会产生背景噪声等等。而且,$ F $不一定是振幅最高的频率!

所以我找到$ F $的想法是应用DFT(实际上是速度的FFT)并找到一个频率$ F $,这样$ F + 2F + 3F + \ ldots + nF $在FFT输出中最大。

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

评论

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

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

相关dsp.stackexchange.com/a/2524/29

#1 楼

您所描述的与斯坦福CCRMA论文中列出的基音估计的谐波积谱方法非常相似。结果仓的数量取决于FFT的长度。

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

评论


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

$ \ begingroup $
@Dinaiz:取决于音调的来源以及泛音频率的那些片段是否实际上是静止的。小波是一个完全独立的问题。
$ \ endgroup $
– hotpaw2
2011年12月21日在21:07

$ \ begingroup $
因此,该方法不适合“几乎实时”找到f0。在目前的技术水平下,是否有可能用任何仪器在不到几毫秒的时间内找到f0,或者这是一个迷失的原因,我应该放弃寻找吗? :D
$ \ endgroup $
–迪纳兹
2012年7月4日在16:48