我的吉他调谐器出问题了。我用自相关算法来找出声音的频率。它几乎成功了。问题从300 in以上的高频开始。有时候,当我演奏E4(329‘m)字符串时,它不确定是329’m还是109‘m,我想是次谐波问题。现在我在问如何消除这些次谐波?有什么诡计吗?
这是我的自动相关代码:
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);
}发布于 2016-02-12 21:12:56
这是关于一个不变的音高的标准八度不确定性问题。如果一个周期与静止信号中的下一个周期接近,那么N个周期也将是与下一个N个周期的密切匹配,从而在频率螺距和/或八度下降的几个子倍数处产生几乎相同的自相关。噪音的微小变化会导致一个音高次倍数比另一个音高更好或更差,尽管人类可能听不到音高上的任何差别。
要“修复”这个问题,您必须从许多几乎相同的相关峰中选择一个。您可以使用与另一个峰值候选人完全相同的自相关性来加权一个峰值候选人,从而实现这一点。例如,在选择较低的峰值之前,可以要求较低的自相关峰候选值至少比代表频率倍数的任何峰值高出x%,其中x%可以通过实验确定(例如,在人类盲测试面板实际听到较低音调之前)。这个数值可能会随着乐器或音色的类型以及所演奏的八度而变化。
另一个窍门是观察声音的和声演变,因为大弦乐上低音的泛音可能与较高弦或音符的谐波不同。
https://stackoverflow.com/questions/35366219
复制相似问题