首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从潜在谐波中确定基频的算法

从潜在谐波中确定基频的算法
EN

Stack Overflow用户
提问于 2011-01-17 18:42:09
回答 3查看 5.5K关注 0票数 17

我试图从一个声源中提取一个基本频率。也许有人在对着麦克风唱A3,所以我想要探测到~110 be

我的方法是:

  • FFT 1024浮点数
  • 使用每个垃圾箱的相位准确地确定其精确频率。
  • 确定峰值(通常是50个左右)
  • 先点最响的

(Peak.power=1063.343750,.freq=2032.715088

(Peak1.power=1047.764893,.freq=3070.605225

(Peak2.power=1014.986877,.freq=5925.878418

(Peak3.power=1011.707825,.freq=6963.769043

(Peak4.power=1009.152954,.freq=4022.363037

(Peak5.power=995.199585,.freq=4974.120605

(Peak6.power=987.243713,.freq=8087.792480

(Peak7.power=533.514832,.freq=908.691833

  • (MARKER1)以最响亮的声音开始,并将其与所有剩余的峰相匹配,所以如果我有N个峰,我将在这一点上有N-1峰对。
  • 检查每个峰值对的谐波度;即它与某个分数a/b的距离有多近(我们能用b<20找到a/b,使峰值A. for /峰B.for a/b<0.0 1)(这将匹配到第20次谐波)
  • 现在,我们有了一个被认为是互相调和的峰的精细化列表。 谐波PeakPair:(0,1)=2/3,误差:0.00468 => f0 @ 1019.946289 谐波PeakPair:(0,2)=1/3,误差:0.00969 => f0 @ 2004.003906 谐波PeakPair:(0,3)=2/7,误差:0.00618 => f0 @ 1005.590820 谐波PeakPair:(0,4)=1/2,误差:0.00535 => f0 @ 2021.948242 谐波PeakPair:(0,5)=2/5,误差:0.00866 => f0 @ 1005.590820 谐波PeakPair:(0,6)=1/4,误差:0.00133 => f0 @ 2027.331543 谐波PeakPair:(0,7)=9/4,误差:0.01303 => f0 @ 226.515106

我的问题是:我怎样才能设计出一种算法,正确地将上述基本值识别为~1000 as?

它不能保证在~1000时会有比~2000或~3000等更高的浓度,甚至不能保证会有任何入口~1000。我们可以有~5000 x一项,~4000 x三项,~3000 x 2条目,以及几个伪值,如上面列表中的226。

我想我可以再次重复这个过程,剔除那些与列表的其他部分不“调和”的基本原理。这至少可以消除那些虚假的价值..。

也许我甚至没有问正确的问题。也许这整个方法糟透了。但我认为挑选最强的峰值并提取与该峰值相关的一组谐波是有意义的。

理论上,如果初始最强峰是三次谐波,那么这组峰应该包含3/1 3/2 3/ 3 /4 3/5 3/6 3/7等。尽管有些人可能失踪了。

现实地说,我有一种感觉,它总是具有最大力量的基本和声或第一和弦。但我不知道我能不能依靠这个..。

太多的因素,它使我的头游泳。我为这样一个混乱的问题事先道歉。希望我能在死后把它整理好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-01 05:14:19

我重新表述了这个问题,并在这里给出了一个答案:如何取一组{301,102,99,202,198,103}的数字,然后扔掉~100?

我看过几种方法,这比我发现的任何方法都要简洁得多。我已经测试过了,而且效果很好。

票数 1
EN

Stack Overflow用户

发布于 2011-01-19 04:27:50

Cepstum (或倒谱分析)和调和乘积谱是从泛音序列中估计激励器频率的两种很好的算法。

如果泛音序列间隔适当,则倒谱(FFT峰值的对数FFT )可用于估计频率间隔的周期,然后可用于估计频率。

谐波乘积谱基本上是比较光谱峰与第n个多拷贝本身,通过抽取谱的多个低整数比,并重叠它们。

票数 9
EN

Stack Overflow用户

发布于 2011-11-21 13:40:01

您可以浏览有关语音识别的文章的链接。

文章:用于语音识别的相空间点分布参数 (订阅全文所需)

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

https://stackoverflow.com/questions/4716620

复制
相关文章

相似问题

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