Ich möchte den Offset zwischen zwei Arrays von Zeitstempeln finden. Sie könnten beispielsweise den Beginn von Signaltönen in zwei Audiospuren darstellen.
Hinweis : In beiden Tracks können zusätzliche oder fehlende Onsets vorhanden sein.
Ich habe einige Informationen über die Kreuzkorrelation gefunden (zB Ссылка ), die vielversprechend aussah.
Ich nahm an, dass jede Audiospur eine Dauer von 10 Sekunden hat und stellte die Pieptöne als die Spitzen einer "Rechteckwelle" mit einer Abtastrate von 44,1 kHz dar:
%Vor%Dieser Ansatz ist nicht besonders schnell, aber ich konnte ziemlich konsistente Ergebnisse erzielen, selbst bei sehr niedrigen Frequenzen. Allerdings ... ich habe keine Ahnung, ob das eine gute Idee ist! Gibt es eine bessere Möglichkeit, diesen Offset als die Kreuzkorrelation zu finden?
Bearbeiten : Notiz über fehlende und zusätzliche Onsets hinzugefügt.
Wenn track_1
und track_2
Zeitstempel von Signaltönen sind und beide alle Signaltöne erfassen, ist es nicht erforderlich, eine Wellenform zu erstellen und eine Kreuzkorrelation durchzuführen. Finden Sie einfach die durchschnittliche Verzögerung zwischen den zwei Arrays von Signaltonzeitstempeln:
Dies ergibt ca. 0.020
s abhängig von den zufälligen Fehlern und ist ungefähr so schnell wie es geht.
BEARBEITEN: Wenn zusätzliche oder fehlende Zeitstempel behandelt werden müssen, kann der Code wie folgt geändert werden. Wenn der Fehler bei der Timestamp-Zufälligkeit begrenzt ist, dann führen Sie im Wesentlichen eine statistische "Modus" -Funktion für die Verzögerungen zwischen allen Werten aus. Alles innerhalb der Timestamp-Zufälligkeitsgrenze wird zusammen gruppiert und identifiziert, und dann werden die ursprünglich identifizierten Verzögerungen gemittelt.
%Vor%Offensichtlich, wenn zu viele Pieptöne fehlen oder zusätzliche Pieptöne vorhanden sind, beginnt der Code an einem Punkt zu versagen, aber im Allgemeinen sollte es gut funktionieren und viel schneller sein, als zu versuchen, eine ganze Wellenform zu erzeugen und eine Korrelation durchzuführen.
Ja, es macht Sinn. Dies wird üblicherweise in Matlab gemacht. Hier ist ein Link zu einer ähnlichen Anwendung:
Mehrere Überlegungen
Kreuzkorrelation wird häufig für Zeiten verwendet, in denen das betreffende Signal zu viel Rauschen aufweist. Wenn Sie keinen Lärm haben, um den Sie sich sorgen müssen, würde ich eine andere Methode verwenden.
Tags und Links python fft cross-correlation waveform