我正在Python上开始一个项目,在那里我需要开发一个音高检测系统,基本上我要做的就是记录来自吉他弦的声音,然后确定声音的音调。

我已经阅读并搜索了网站(包括stackoverflow),因此我可以了解重要内容的主要思想,例如:FFT,时域,频率域,谐波,音调检测算法, Octave 误差等。

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

  • 录制吉他的声音(避免外部噪音)。
  • 使用FFT函数,以便可以从时域转换音频
    到频域(这就是FFT的作用)。
  • 获得数据(数组)后,我必须使用HPS,以便
    找到最高音,这将是音串声音。

  • 我的问题从最后一步开始,我已经阅读了HPS的功能以及一些相关的讲座,但是我仍然无法理解它并开发自己的功能。

    我是否想念一些我不理解的东西?
    我只是找不到编程自己的HPS算法的方法。

    最佳答案

    在此处的HPS问题中:

    How to get the fundamental frequency using Harmonic Product Spectrum?

    所考虑的谐波数为5(R = 5);在按顺序谐波比率下采样后,5个谐波频谱在hps2到hps5之间(加上原始FFT频谱)。

    然后将5个降采样的频谱相加。

    然后,搜索整个HPS求和阵列的长度,以找到求和的5个谐波中的峰值或最大值位于何处。

    在该示例中,可能无法最佳地进行下采样和搜索最佳HPS估计值。但这是不同的问答(其中一些已经在上述SO问题的答案中)。

    10-04 17:34