阴算法(音高检测) - 差分函数的替代
Yin algorithm(Pitch detection) - Alternative to Difference Function
我已经实现了阴算法来检测音高。
我的问题是差分函数的性能(公式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,如果你正在阅读这篇文章,谢谢。
相关文章:
- 检测使用 CRTP 的类中的成员函数
- 用于检测函数类型是否为否的特征
- 如何检测除整数以外的任何内容是否传递给我的类构造函数?
- 检测是否存在具有给定签名的函数
- 如何检测 Clang AST C++中的静态函数
- 主函数体未检测到对重载可变变量模板化函数C++的调用
- 如何在C++17中使用type_traits检测具有特定名称和签名的函数(NOT类成员)的存在
- C++:实现一个接收lambda作为输入的高阶函数
- 使用SFINAE来检测void返回类型函数的存在
- 如何检测构造函数是否与抛出的析构函数无关
- Clang 无法在赋值运算符/复制构造函数中检测到未初始化的类成员
- Windows资源监视器使用哪些Win32函数来检测已终止进程的磁盘和网络活动
- [C++]构造函数不检测组件
- opencv 中的哪个函数可以检测和去除物体的阴影
- 是否可以从成员函数中检测对象是否为临时对象
- 在析构函数中检测到"Trying to free invalid pointer"错误
- 线程构造函数如何检测右值引用
- 如何从成员函数中检测实例是否为常量
- 在选择函数中检测超时的客户端
- ***堆栈粉碎在使用FEAST返回函数时检测到***错误