音高检测结果错误

时间:2017-05-08 20:09:24

标签: python signals signal-processing pitch-tracking

我正在使用here中的freq_from_crossings(我没有更改代码)。我的输入是audio file,带有原声吉他E2音符,没有别的(因为我的麦克风非常糟糕,声音不是很清晰)。

这是波形:

waveform 这是我得到的频谱图:

spectrogram

从频谱图可以清楚地看出,最响亮的谐波对应于E2音符。但是,freq_from_crossings返回415.461966359,这根本不是播放的音高。哪些组件可能出错?

由于

2 个答案:

答案 0 :(得分:1)

不是单个纯正弦波的波形可以比每个基音周期具有更多的过零点。在一个时期内,它可以包括许多过零的“摆动”。吉他音谱图的谐波含量表明,总波形远不是单个纯正弦波。它也随着时间而变化。

因此,从过零点估算音高不会对这些类型的吉他声音起作用。

答案 1 :(得分:1)

根据我的经验,零交叉和自相关是尝试音调检测的可怕方法 - 即使在单声道信号上也是如此。考虑使用采用FFT或DFT变换来获取初始频率活动的方法。

https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection

https://github.com/CreativeDetectors/PitchScope_Player