用于查找基频的 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 深度优先搜索(DFS)算法在递归和非递归模式下的实现示例,用于图扩展和路径查找。