Ich habe zwei Audioaufnahmen desselben Signals von zwei verschiedenen Mikrofonen (z. B. im WAV-Format), aber eine davon ist mit einer Verzögerung von z. B. mehreren Sekunden aufgenommen.
Es ist einfach, eine solche Verzögerung visuell zu erkennen, wenn man diese Signale in einer Art Wellenformbetrachter anschaut - d. h. einfach die erste sichtbare Spitze in jedem Signal ausfindig machen und sicherstellen, dass sie dieselbe Form haben:
(Quelle: <a href="http://www.greycat.ru/temp/time-delay-peaks.png" rel="nofollow noreferrer">grauekatze.ru </a>)
Aber wie kann ich das programmatisch machen - herausfinden, was diese Verzögerung (t) ist? Zwei digitalisierte Signale unterscheiden sich geringfügig (weil die Mikrofone unterschiedlich sind, sich an unterschiedlichen Positionen befinden, aufgrund von ADC-Einstellungen usw.).
Ich habe ein wenig recherchiert und herausgefunden, dass dieses Problem in der Regel "Zeitverzögerungsschätzung" genannt wird und es unzählige Ansätze dafür gibt - zum Beispiel, einer von ihnen .
Aber gibt es einfache und fertige Lösungen, wie z.B. ein Kommandozeilenprogramm, eine Bibliothek oder einen einfachen Algorithmus?
Schlussfolgerung : Ich habe keine einfache Implementierung gefunden und selbst ein einfaches Kommandozeilenprogramm erstellt - verfügbar unter https://bitbucket.org/GreyCat/calc-sound-delay (GPLv3-lizenziert). Es implementiert einen sehr einfachen Suche-nach-Maximum-Algorithmus, der unter Wikipedia .