Vergleichen von Audioaufnahmen

8

Ich habe 5 WAV-Dateien aufgenommen. Ich möchte die neu eingehenden Aufnahmen mit diesen Dateien vergleichen und feststellen, welcher es am meisten ähnelt.

Im fertigen Produkt muss ich es in C ++ unter Linux implementieren, aber jetzt experimentiere ich in Matlab. Ich kann FFT-Plots sehr leicht sehen. Aber ich weiß nicht, wie man sie vergleicht.

Wie kann ich die Ähnlichkeit zweier FFT-Plots berechnen?

Bearbeiten: Es gibt nur Sprache in den Aufnahmen. Eigentlich versuche ich die Antwort von Anrufbeantwortern einiger Telekommunikationsunternehmen zu identifizieren. Es genügt, zwei Nachrichten zu unterscheiden, "diese Person ist im Moment nicht erreichbar" und "diese Nummer wird nicht mehr benutzt"

    
mustafa 16.08.2011, 12:30
quelle

3 Antworten

4

Dies hängt sehr von Ihrer Definition von "ähnelt den meisten" ab. Abhängig von Ihrem Anwendungsfall kann dies eine Menge sein. Wenn Sie nur die reinen Spektren der gesamten Datei vergleichen wollen, können Sie einfach die Werte der beiden fts korrelieren.

Allerdings ändern sich die Spektren stark, wenn sich die Dateien rechtzeitig verziehen. Um den Unterschied zu erkennen, müssen Sie ein Fenster fft machen und die Spektren für jedes Fenster vergleichen. Dies definiert dann Ihre Differenzfunktion, die Sie in einem dynamischen Time Warping-Algorithmus verwenden können.

Wenn Sie Wahrnehmungsähnlichkeit brauchen, bekommt Sie eine FFT wahrscheinlich nicht, was Sie brauchen. Ein MFCC der Aufnahmen ist diesem Problem wahrscheinlich sehr viel näher. Auch hier müssen Sie möglicherweise Fenster MFCCs anstelle von MFCCs der gesamten Aufnahme berechnen.

Wenn Sie wieder Musikaufnahmen machen, brauchen Sie völlig andere Ansätze. Es gibt einen Blogeintrag, in dem beschrieben wird, wie Shazam funktioniert, so dass Sie dies möglicherweise auf Google finden können. Oder, wenn Sie echte musikalische Ähnlichkeit wollen, schauen Sie sich dieses Buch

an

BEARBEITEN :

Die beste Lösung für das oben angegebene Problem wäre die hier beschriebene ("Shazam-Algorithmus" wie oben erwähnt). Dies ist jedoch ein wenig kompliziert zu implementieren und einfacher Lösung kann es gut genug.

    
LiKao 16.08.2011 12:54
quelle
1

Wenn Sie wissen, dass es nur fünf verschiedene mögliche eingehende Dateien gibt, würde ich vorschlagen, zuerst etwas so einfach wie die euklidische Entfernung zwischen den beiden Signalen zu versuchen (zeitlich oder fourier). Es ist wahrscheinlich, Ihnen ein gutes Ergebnis zu geben.

Edit: Versuchen Sie also bei verschiedenen möglichen Starts eine Autokorrelation und sehen Sie, welche Datei den höheren Peak hat.

    
JohnCastle 16.08.2011 13:08
quelle
0

Ich schlage vor, dass Sie einfache Klangparameter wie die Grundfrequenz berechnen. Es gibt mehrere Methoden, um diesen Wert zu erhalten - ich habe Autokorrelation und Cepstrum ausprobiert und für Sprachsignale haben sie gut funktioniert. Mit dieser Funktion können Sie eine Zeitanalyse durchführen und zwei Signale (Basis - mit der Sie vergleichen, in der Sie übereinstimmen möchten) auf der gegebenen Intervallfrequenz vergleichen. Wenn Sie anhand dieser Kriterien mehrere Intervalle vergleichen, können Sie feststellen, welches Basisbeispiel mit dem besten übereinstimmt.

Natürlich hängt alles davon ab, was Sie meinen ähnelt . Um die Funktion zu vergleichen, können Sie weitere Parameter wie Lautstärke, Rauschen, Klicks, Tonhöhen usw. eingeben.

    
Mateusz Chromiński 16.08.2011 13:21
quelle