我有两个音乐文件:一个是无损的,声音间隔很小(此时只是静音,但可以是任何东西:正弦波或只是一些噪音)和一个mp3:
In [1]: plt.plot(y[:100000])
Out[1]:
^{pr2}$
这个列表是相似的,但不完全相同,所以我需要缩小这个差距,以找到一个列表在另一个列表中的第一次出现,且增量误差最小。在
下面是我的解决方案(5.7065秒):
^{3}$有什么Python式的方法可以解决这个问题吗?在
编辑: 在计算特殊点之间的平均距离(例如,数据==0.5)后,我将搜索区域从25000减少到2000。这给了我0.3871s的合理时间:
a = np.where(y[:100000].round(1) == 0.5)[0]
b = np.where(y2[:100000].round(1) == 0.5)[0]
mean = int((a - b[:len(a)]).mean())
delta = 1000
error = []
for i in range(mean - delta, mean + delta):
...
你要做的是这两个信号的cross-correlation。在
使用} 可以轻松完成此操作:
scipy
库中的^{您可能想看看类似问题的this答案。在
让我们先生成一些数据
在这些数据中,}的前10%是空的(类似于您的示例)
y1
和y2
几乎是相同的(注意添加的小噪声),但是{我们现在可以计算两个向量之间的绝对差,并找到第一个绝对差值低于灵敏度阈值的元素:
^{pr2}$如果重叠部分确实“几乎完全相同”,则此方法有效。如果相似度较低,您将不得不考虑更聪明的对齐方式。在
我想你要找的是相关性。这里有一个小例子。在
输出:
^{pr2}$所以这会返回时间差,两个信号之间的相关性达到最大值。如您所见,在这个例子中,时差应该是8,但这取决于您的数据。。。 还要注意两个信号的长度相同。在
相关问题 更多 >
编程相关推荐