我正在开始一个关于Python的项目,我需要开发一个音高检测系统,基本上我要做的就是录制来自吉他弦的声音,然后识别哪个是那个声音的音调。 / p>
我已经通过网站阅读和搜索(包括stackoverflow),因此我可以理解重要事项的主要思想,如:FFT,时间制,频率域,谐波,音高检测算法,八度音程等。< / p>
在我的研究之后,我发现我可以使用HPS(谐波产品频谱)算法,并且该算法属于频率域方法,这意味着我必须(在一般步骤中):
我的问题从最后一步开始,我已经阅读了HPS的说法和一些关于此的讲座,但我仍然无法理解它并开发自己的功能。
我错过了一些我不理解的东西,我想我会这样做? 我找不到编写自己的HPS算法的方法。
答案 0 :(得分:1)
在HPS问题中:
How to get the fundamental frequency using Harmonic Product Spectrum?,
考虑的谐波数为5(R = 5);在通过连续谐波比进行下采样后,5个谐波频谱在hps2到hps5(加上原始FFT频谱)。
然后将5个下采样频谱相加。
然后搜索整个HPS求和阵列长度,以找出总和5次谐波中的峰值或最大值所在的位置。
在该示例中,可能无法以最佳方式完成下采样和搜索最佳HPS估计。但这是一个不同的Q&amp; A(其中一些已经在上述SO问题的答案中)。
答案 1 :(得分:0)
之前我已经通过几种方式完成了这项工作(无论是在频域工作还是在自相关工作的FFT和在时域工作的AMDF)。 对我个人而言,Autocorrelation是最受欢迎的,因为它实现简单明了,在您的使用案例中,分析吉他弦,以100%的准确度工作。所以我可以推荐给你。 我以前分享过我的代码,您可以在以下链接中找到它: Android: Finding fundamental frequency of audio input