Prima che qualcuno mi grida mi rendo pienamente conto che questa domanda è stata posta più volte. Ti assicuro che ho letto le domande e le risposte esistenti ma sono ancora confuso su parte del problema.
Ho una fonte sonora che suona musica (A) in un ambiente chiuso. Ho un microfono che sto usando per registrare A. Mi rimangono due file wav che condividono le stesse caratteristiche e lunghezza (numero di campioni).
Il mio obiettivo è calcolare il tempo impiegato da A per raggiungere il microfono.
Sto cercando di eseguire il calcolo usando la correlazione incrociata (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))
Ottengo costantemente valori nell'intervallo di 300.000 cm. La distanza tra l'altoparlante e il microfono è di circa 2 piedi.
Tutto questo è abbastanza nuovo per me, quindi sono sicuro che mi manchi qualcosa di ovvio.
Grazie in anticipo.
numpy.correlate
posto dinumpy.convolve
? Per stimare il ritardo, si desidera correlare in modo incrociato i segnali, non coinvolgerli. Probabilmente finirai con un ritardo molto più grande convolvendo.