从歌声中提取音高

时间:2011-03-16 10:43:58

标签: audio signal-processing voice-recording pitch

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

我想知道给定时间点的响度和感知音高频率。如下所示:

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

我如何实现这样的输出?我对频率的微小变化感兴趣,因为它与特定音符值相关。我有一些DSP知识,我可以用C ++和python编程,但我想尽可能避免重新发明轮子。

2 个答案:

答案 0 :(得分:1)

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

由于dB是对数刻度,因此该度量可能稍微接近感知响度,但必须在一定的测量持续时间内通过一些感知频率响应曲线进行频谱加权。

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

答案 1 :(得分:1)

我建议你阅读这篇文章 http://audition.ens.fr/adc/pdf/2002_JASA_YIN.pdf 。这是最简单的音调检测方法之一,效果非常好。 另外,为了测量信号的瞬时功率,你可以取信号的绝对值并除以1 /√2(给出RMS值)然后平滑它(通常是一阶低通滤波器)。我希望这有帮助。祝你好运!