Antes que alguém grite comigo, percebo perfeitamente que essa pergunta já foi feita inúmeras vezes. Garanto-lhe que li as perguntas e respostas existentes, mas ainda estou confuso sobre parte do problema.
Eu tenho uma fonte de som que toca música (A) em um ambiente fechado. Eu tenho um microfone que estou usando para gravar A. Fico com dois arquivos wav que compartilham as mesmas características e comprimento (número de amostras).
Meu objetivo é calcular o tempo que levou para A chegar ao microfone.
Estou tentando executar o cálculo usando correlação cruzada (numpy):
# Delay estimation
corr = numpy.convolve(original_audio, recorded_audio, 'full')
delay = int(len(corr)/2) - numpy.argmax(corr)
distance = delay / sample_rate * 343 # sample_rate == 22050, m/s = speed of sound
print("Distance full: %.2f cm" % (distance * 100))
Eu sempre obtenho valores na faixa de 300.000 cm. A distância entre o alto-falante e o microfone é de aproximadamente 2 pés.
Isso tudo é muito novo para mim, então tenho certeza de que estou perdendo algo óbvio.
Desde já, obrigado.
numpy.correlate
vez denumpy.convolve
? Para estimar o atraso, você deseja correlacionar seus sinais, não envolvê-los. Você pode acabar com um atraso muito maior por convolução.