首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现自己的HPS算法?

如何实现自己的HPS算法?
EN

Stack Overflow用户
提问于 2016-09-08 18:24:51
回答 2查看 1.8K关注 0票数 2

我开始了一个关于Python的项目,我需要开发一个音高检测系统,基本上我要做的是记录一个来自吉他弦的声音,然后识别出那个声音的音调。

我已经阅读和搜索网站(包括堆叠溢出),以便我能够理解重要的想法,如: FFT,时间域,频率域,谐波,基音检测算法,倍频程误差等。

经过我的研究,我发现我可以使用HPS (谐波乘积谱)算法,该算法属于频率域方法,这意味着我必须(一般步骤):

  1. 把吉他的声音录下来(避免外部噪音)。
  2. 使用FFT函数,这样我就可以将音频从一个时域转换成一个频率域(这就是FFT所做的)。
  3. 在我得到数据(一个数组)之后,我必须使用HPS,这样我就可以找到最高的音调,它将是音调字符串的声音。

我的问题从最后一步开始,我已经阅读了HPS的评价和一些有关这方面的讲座,但是我仍然无法理解它并开发我自己的功能。

我是不是错过了一些我不明白的东西?我只是找不到一种方法来编程我自己的HPS算法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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估计的下采样和搜索可能不是最优的。但这是一个不同的问题(其中一些已经在对上述问题的答案中)。

票数 1
EN

Stack Overflow用户

发布于 2016-09-09 12:32:02

我以前做过几种方式( FFT,在频域或自相关,和AMDF,在时间域工作)。对我个人来说,自相关是最受欢迎的,因为它是简单和清晰的实现,在你的用例中,分析吉他弦,工作的100%的准确性。所以我可以推荐给你。我以前共享过我的代码,您可以在下面的链接中找到它的全部解释:Android: Finding fundamental frequency of audio input

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39397804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档