0

I am using freq_from_crossings from here (I haven't changed the code). My input is an audio file with an acoustic guitar E2 note and nothing else (as my microphone is pretty bad, the sound is not very clear).

This is the waveform:

waveform And this is the spectrogram I am getting:

spectrogram

From the spectrogram it is pretty clear that the loudest harmonic corresponds to the E2 note. However, freq_from_crossings returns 415.461966359 which is not at all the pitch played. What components could have gone wrong?

Thanks

4

2 回答 2

1

不是单个纯正弦波的波形在每个音调周期中的过零次数可能多于一次。在一个时期内,它可以包括许多过零的“摆动”。吉他音符频谱图的谐波内容表明,总波形远非单一的纯正弦波。它也在随着时间而改变。

因此,从零交叉估计音高频率不适用于这些类型的吉他声音。

于 2017-05-08T21:52:11.263 回答
1

以我的经验,过零和自相关是尝试音高检测的糟糕方法——即使是在单声道信号上也是如此。考虑使用采用 FFT 或 DFT 变换的方法来获取初始频率活动。

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

https://github.com/CreativeDetectors/PitchScope_Player

于 2017-05-11T20:05:19.503 回答