我开始了一个关于Python的项目,我需要开发一个音高检测系统,基本上我要做的是记录一个来自吉他弦的声音,然后识别出那个声音的音调。
我已经阅读和搜索网站(包括堆叠溢出),以便我能够理解重要的想法,如: FFT,时间域,频率域,谐波,基音检测算法,倍频程误差等。
经过我的研究,我发现我可以使用HPS (谐波乘积谱)算法,该算法属于频率域方法,这意味着我必须(一般步骤):
我的问题从最后一步开始,我已经阅读了HPS的评价和一些有关这方面的讲座,但是我仍然无法理解它并开发我自己的功能。
我是不是错过了一些我不明白的东西?我只是找不到一种方法来编程我自己的HPS算法。
发布于 2016-09-09 22:16:49
在HPS的婚礼上:
How to get the fundamental frequency using Harmonic Product Spectrum?,
所考虑的谐波数为5次(R =5),经序贯谐波比下采样后,5次谐波谱通过hps2 hps5 (加上原始的hps5谱)进行下采样。
然后对5个下采样谱进行了求和。
然后对整个HPS求和阵列长度进行搜索,找出5次谐波之和中的峰值或最大值在哪里。
在该示例中,对最优HPS估计的下采样和搜索可能不是最优的。但这是一个不同的问题(其中一些已经在对上述问题的答案中)。
发布于 2016-09-09 12:32:02
我以前做过几种方式( FFT,在频域或自相关,和AMDF,在时间域工作)。对我个人来说,自相关是最受欢迎的,因为它是简单和清晰的实现,在你的用例中,分析吉他弦,工作的100%的准确性。所以我可以推荐给你。我以前共享过我的代码,您可以在下面的链接中找到它的全部解释:Android: Finding fundamental frequency of audio input
https://stackoverflow.com/questions/39397804
复制相似问题