用于查找基频的 Python 的 YIN 算法

Posted

技术标签:

【中文标题】用于查找基频的 Python 的 YIN 算法【英文标题】:YIN algorithm to python for finding fundamental frequency 【发布时间】:2016-04-20 05:34:43 【问题描述】:

我正在尝试在 python 中使用 YIN 算法找到基频。

我在this document的第2步。

我需要从这段代码中找到 0 值的索引:

def auto(t, lag, samples):
    total_index = len(samples)
    zero_padded = np.append(samples, np.zeros(total_index))

    r = 0
    for j in range(t+1, t+total_index):
        r += zero_padded[j] * zero_padded[j+lag]

    return r

diff = []
rt0 = auto(0, 0, samples)
for lag in range(0, 2700):
    diff.append(rt0 + auto(lag, 0, samples) - (2*auto(0, lag, samples)))

如文档中所述:

但我找不到任何 0 值索引,除了 index(lag) = 0。

    应该修复哪些代码?

并且文件说他们确实进行了累积均值归一化。

    什么是累积平均归一化?

【问题讨论】:

【参考方案1】:

通常,人们会忽略滞后为零或接近零的 AMDF 结果,并寻找具有很小但通常非零差异的非零 AMDF 滞后。选择哪个非零 AMDF 称为倍频程问题,可能涉及加权差分函数。

【讨论】:

不是第2步差分函数吗?文档用 ACF 转换了差分函数,但它说“相反,可以通过形成差分函数找到未知周期:并搜索函数为零的 t 值”所以,我试图找到零滞后没有出现在我的图表上 多种噪音会阻止找到零,而是寻找一些小的东西。

以上是关于用于查找基频的 Python 的 YIN 算法的主要内容,如果未能解决你的问题,请参考以下文章

Python 查找算法_众里寻他千百度,蓦然回首那人却在灯火阑珊处(线性二分,分块插值查找算法)

python常用的简单算法,二分查找冒泡排序数组翻转等

python 深度优先搜索(DFS)算法在递归和非递归模式下的实现示例,用于图扩展和路径查找。

python 在递归和非递归模式下的呼吸优先搜索(BFS)算法实现的示例,用于图形扩展和路径查找。

python算法:二分查找

六大查找算法(Python 语言实现)