【发布时间】:2016-05-23 19:35:25
【问题描述】:
我的吉他调音器有问题。我正在使用自相关算法来查找声音频率。它几乎可以工作。问题始于 300hz 以上的高频。有时我在弹 E4(329hz)弦时不确定是 329hz 还是 109hz,我认为是次谐波问题。现在我在问如何消除那些次谐波?有什么技巧吗?
这是我的自相关代码:
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);
}
【问题讨论】:
-
我认为找到声音的频率并不容易。自相关算法对于这项任务来说太天真了。即使使用傅里叶变换,有时也很难区分谐波。
-
是的。这非常困难..我已经尝试解决这个问题一个月了..我也尝试过 FFT 但你猜怎么着..我在使用 FFT 时遇到低频问题 :D 也许我必须以某种方式使用这两种技术。
-
从这个Wiki页面en.wikipedia.org/wiki/Pitch_detection_algorithm,据说“目前还没有一个理想的PDA”,所以你可能应该满足于只在某些情况下工作的东西......跨度>
标签: algorithm audio signal-processing frequency pitch