我已经针对一些音频样本实现了一个简单的自相关例程,速率为 44100.0,块大小为 2048。
我遵循的一般公式如下所示:
r[k] = a[k] * b[k] = ∑ a[n] • b[n + k]
我已经在蛮力嵌套循环中实现了它,如下所示:
for k = 0 to N-1 do
for n = 0 to N-1 do
if (n+k) < N
then r[k] := r[k] + a(n)a(n+k)
else
break;
end for n;
end for k;
我在 r 中寻找最大幅度并确定它有多少样本并计算频率。
为了帮助调整调谐器的结果,我使用循环缓冲区并每次返回中值。
蛮力计算有点慢 - 有没有一种众所周知的更快的方法来做它们?
有时,调谐器并不像需要的那样准确。我可以在这里应用什么类型的启发式方法来帮助改进结果?
有时 OCTAVE 是不正确的 - 有没有办法更准确地磨练正确的八度?