0

我想从歌声中提取音高。有问题的曲目仅包含一个声音,没有其他声音。

我想知道给定时间点的响度和感知的音高频率。所以类似于以下内容:

0.0sec 400Hz -20dB
0.1 秒 401Hz -9dB
0.2秒 403Hz -10dB
0.3秒 403Hz -10dB
0.4 秒 404Hz -11dB
0.5秒 406Hz -13dB
0.6 秒 410Hz -15dB
0.7 秒 411Hz -16dB
0.8 秒 409Hz -20dB
0.9 秒 407Hz -24dB
1.0秒 402Hz -34dB

我怎样才能实现这样的输出?我对相对于特定音符值的频率轻微变化感兴趣。我有一些 DSP 知识,可以用 C++ 和 python 编程,但如果可能的话,我想避免重新发明轮子。

4

2 回答 2

1

我建议你阅读这篇文章 http://audition.ens.fr/adc/pdf/2002_JASA_YIN.pdf 。这是最简单的音高检测方法之一,而且效果很好。此外,为了测量信号的瞬时功率,您只需将信号的绝对值除以 1/√2(给出 RMS 值),然后对其进行平滑处理(通常是一阶低通滤波器)。我希望这有帮助。祝你好运!

于 2011-11-13T19:57:59.873 回答
1

请注意,以 Hz 为单位的频率的轻微变化和感知的音高可能不是一回事。感知的音高分辨率似乎随绝对频率、持续时间和响度而变化。如果您想要比这更高的准确性,可能会有一些关于估计每个声门闭合之间的时间的研究论文(可能使用反卷积或模式匹配技术),这会给您某种音高周期。最简单的音高估计可能是某种形式的加权自相关,有很多固定算法和代码可供使用。

由于 dB 是对数标度,因此该测量可能更接近于感知响度,但必须在某些测量持续时间内使用一些感知频率响应曲线进行频谱加权。

似乎有关于这两个主题的研究论文,以及许多关于人类音频感知以及常见音频 DSP 技术的教科书。

于 2011-03-16T18:36:39.157 回答