Zanim ktokolwiek na mnie krzyczy, w pełni zdaję sobie sprawę, że to pytanie zadawano wiele razy. Zapewniam cię, że przeczytałem istniejące pytania i odpowiedzi, ale nadal jestem zdezorientowany co do części problemu.
Mam źródło dźwięku, które odtwarza muzykę (A) w zamkniętym środowisku. Mam mikrofon, którego używam do nagrywania A. Pozostały mi dwa pliki wav, które mają te same cechy i długość (liczba próbek).
Moim celem jest obliczyć czas, w którym A dotarł do mikrofonu.
Próbuję wykonać obliczenia przy użyciu korelacji krzyżowej (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))
Konsekwentnie uzyskuję wartości w zakresie 300 000 cm. Odległość między głośnikiem a mikrofonem wynosi około 2 stóp.
To dla mnie całkiem nowe, więc jestem pewien, że brakuje mi czegoś oczywistego.
Z góry dziękuję.
źródło
numpy.correlate
zamiastnumpy.convolve
? Aby oszacować opóźnienie, chcesz skorelować swoje sygnały, a nie je konwertować. Prawdopodobnie skończysz ze znacznie większym opóźnieniem przez zwoje.Odpowiedzi:
Czy na pewno nie powinieneś używać
numpy.correlate
zamiastnumpy.convolve
? Aby oszacować opóźnienie, chcesz skorelować swoje sygnały, a nie je konwertować. Prawdopodobnie skończysz ze znacznie większym opóźnieniem przez zwoje.Próbowanie czegoś prostego:
źródło