Bevor mich jemand anschreit, wird mir klar, dass diese Frage schon oft gestellt wurde. Ich versichere Ihnen, dass ich die vorhandenen Fragen und Antworten durchgelesen habe, aber ich bin immer noch verwirrt über einen Teil des Problems.
Ich habe eine Tonquelle, die Musik (A) in einer geschlossenen Umgebung abspielt. Ich habe ein Mikrofon, mit dem ich A aufnehme. Ich habe zwei WAV-Dateien mit denselben Eigenschaften und derselben Länge (Anzahl der Samples).
Mein Ziel ist es, die Zeit zu berechnen, die A benötigt hat, um das Mikrofon zu erreichen.
Ich versuche, die Berechnung mit Kreuzkorrelation (numpy) durchzuführen:
# 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))
Ich erhalte konstant Werte im Bereich von 300.000 cm. Der Abstand zwischen Lautsprecher und Mikrofon beträgt ungefähr 2 Fuß.
Das ist alles ziemlich neu für mich, also bin ich mir sicher, dass mir etwas Offensichtliches fehlt.
Danke im Voraus.
numpy.correlate
anstelle von verwenden solltennumpy.convolve
? Um die Verzögerung abzuschätzen, möchten Sie Ihre Signale kreuzkorrelieren und nicht falten. Sie werden möglicherweise eine viel größere Verzögerung haben, wenn Sie sich falten.