首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自相关算法在高频下失效

自相关算法在高频下失效
EN

Stack Overflow用户
提问于 2016-02-12 15:25:28
回答 1查看 152关注 0票数 1

我的吉他调谐器出问题了。我用自相关算法来找出声音的频率。它几乎成功了。问题从300 in以上的高频开始。有时候,当我演奏E4(329‘m)字符串时,它不确定是329’m还是109‘m,我想是次谐波问题。现在我在问如何消除这些次谐波?有什么诡计吗?

这是我的自动相关代码:

代码语言:javascript
复制
for (int i = 0; i < length; i++) {
    double diff = 0;
    for (int j = 0; j < length; j++) {
        diff += Mathf.Abs (buffer [j] - buffer [i + j]);
    }

    double dx = prevDiff - diff;

    if (dx < 0 && prevDx > 0) {

        if (diff < (0.3 * maxDiff)) {

            if (sampleLen == 0) 
            {
                sampleLen = i - 1;
            }
        }
    }

    prevDx = dx;
    prevDiff = diff;
    maxDiff = Mathf.Max ((float)diff, (float)maxDiff);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-12 21:12:56

这是关于一个不变的音高的标准八度不确定性问题。如果一个周期与静止信号中的下一个周期接近,那么N个周期也将是与下一个N个周期的密切匹配,从而在频率螺距和/或八度下降的几个子倍数处产生几乎相同的自相关。噪音的微小变化会导致一个音高次倍数比另一个音高更好或更差,尽管人类可能听不到音高上的任何差别。

要“修复”这个问题,您必须从许多几乎相同的相关峰中选择一个。您可以使用与另一个峰值候选人完全相同的自相关性来加权一个峰值候选人,从而实现这一点。例如,在选择较低的峰值之前,可以要求较低的自相关峰候选值至少比代表频率倍数的任何峰值高出x%,其中x%可以通过实验确定(例如,在人类盲测试面板实际听到较低音调之前)。这个数值可能会随着乐器或音色的类型以及所演奏的八度而变化。

另一个窍门是观察声音的和声演变,因为大弦乐上低音的泛音可能与较高弦或音符的谐波不同。

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

https://stackoverflow.com/questions/35366219

复制
相关文章

相似问题

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