阴算法(音高检测) - 差分函数的替代

Yin algorithm(Pitch detection) - Alternative to Difference Function

本文关键字:函数 高检测 检测 算法      更新时间:2023-10-16

我已经实现了阴算法来检测音高。

我的问题是差分函数的性能(公式6(

差分功能:

static std::vector<double> difference(const std::vector<double> &data)
{
int index, tau;
double delta;
int yin_buffer_size = signed(data.size() / 2);
std::vector<double> yin_buffer(yin_buffer_size, 0.0);
for (tau = 1; tau < yin_buffer_size; tau++) {
for (index = 0; index < yin_buffer_size; index++) {
delta = data[index] - data[index + tau];
yin_buffer[tau] += delta * delta;
}
}
return yin_buffer;
}

其中data包含特定窗口大小的音频数据。

如您所见,随着数据大小(窗口大小(的增加,此函数会变慢。

请让我知道是否有更快的差分函数的替代方案。我想朝着正确的方向前进。

我对信号处理很陌生,非常感谢您的帮助。

好吧,尹论文描述了我们可以使用等式7而不是等式6。 公式7可以使用FFT得出,FFT要快得多。

一个简单的在线搜索提供了许多实现示例来实现这一点。

JAVA中的实现可以在这里找到,由一个名为JorenSix的用户完成。 JorenSix,如果你正在阅读这篇文章,谢谢。