Yin algorithm(Pitch detection) - 差分函数的替代
编程 65
我已经实现了 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
包含特定窗口大小的音频数据。
如您所见,随着数据大小(窗口大小)的增加,此函数变慢。
如果有更快的差分函数替代方法,请告诉我。我想朝着正确的方向前进。
我对信号处理很陌生,非常感谢您的帮助。