gpt4 book ai didi

c++ - Yin algorithm(Pitch detection) - 差分函数的替代

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:41:14 28 4
gpt4 key购买 nike

我已经实现了 Yin Algorithm检测音高。

我的问题是差分函数(等式 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 包含特定窗口大小的音频数据。

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

如果有更快的差分函数替代方法,请告诉我。我想朝着正确的方向前进。

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

最佳答案

好的,Yin 论文描述了我们可以使用方程式 7 而不是方程式 6。公式 7 可以使用更快的 FFT 得到。

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

可以找到 JAVA 中的实现 here由名为 JorenSix 的用户完成。JorenSix,如果您正在阅读本文,谢谢。

关于c++ - Yin algorithm(Pitch detection) - 差分函数的替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50606082/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com