Python 音频波形匹配

Python 音频波形匹配,python,wav,waveform,Python,Wav,Waveform,我正在匹配两个400毫秒的波形。我正在使用correlate检查移位 cc = correlate(b1,b2,mode="same") n=len(cc) cc=2*cc/n dur=n*dt1/2; d=linspace( -dur, dur, n ) idx = argmax(cc) 我得到了两个波形之间的偏移。但是如何得到两个波形的实际匹配位置呢 您可能需要mode=“full”并需要做更多的数学运算来选择相关峰值并调整序列长度填充 希望此示例有助于说明以下问题: import mat

我正在匹配两个400毫秒的波形。我正在使用correlate检查移位

cc = correlate(b1,b2,mode="same")
n=len(cc)
cc=2*cc/n
dur=n*dt1/2;
d=linspace( -dur, dur, n )
idx = argmax(cc)

我得到了两个波形之间的偏移。但是如何得到两个波形的实际匹配位置呢

您可能需要
mode=“full”
并需要做更多的数学运算来选择相关峰值并调整序列长度填充

希望此示例有助于说明以下问题:

import math
import numpy as np
import matplotlib.pyplot as plt

a = [math.sin(i* math.pi/10) for i in range(300)]
b = [math.cos(i*math.pi/10) for i in range(300)]
plt.plot(a, 'red')
plt.plot(b, 'green')

axb= np.correlate(a,b, mode="full")/100.0
x = range(len(axb))
plt.plot(x, axb)

您得到的偏移量是您需要移动b1的偏移量,以便与b2保持最大的协调关系。我已经附上了图片。两者之间的位移为0.015 ms。我可以移动0.015毫秒,但实际匹配从0.26毫秒开始尝试模式=完全。我没有问题选择相关峰,让他在两个信号之间滞后。如何找到序列长度填充?如何在开始时消除不需要的信号?它看起来像是
mode='same'
包装输入序列,使用哪种模式取决于您的问题、实验设置和预期的信号属性。同样取决于一切,相关性中的多个峰值可能有意义,也可能没有意义。尝试像我的绘图这样的例子可能有助于理解不同的模式,它们的偏移约定,如果在阅读文档时不明显的话。