Kreuzkorrelation in Matlab ohne Verwendung der eingebauten Funktion?

7

kann jemand sagen, wie man die Kreuzkorrelation von zwei Sprachsignalen (jeweils 40.000 Samples) in MATLAB durchführt, ohne die eingebaute Funktion xcorr und den Korrelationskoeffizienten?

zu verwenden

Vielen Dank im Voraus.

    
jay 13.09.2011, 04:29
quelle

3 Antworten

26

Sie können Kreuzkorrelationen mit fft durchführen. Die Kreuzkorrelation zweier Vektoren ist einfach das Produkt ihrer jeweiligen Fourier-Transformationen, wobei eine der Transformationen konjugiert ist.

Beispiel:

%Vor%

Ergebnisse vergleichen:

%Vor%     
abcd 13.09.2011 04:46
quelle
3

Wenn es einen guten Grund gibt, warum Sie den eingebauten nicht verwenden können, können Sie stattdessen eine Faltung verwenden. Kreuzkorrelation ist einfach eine Faltung ohne Umkehrung. Um die Umkehrung des Korrelationsintegrals zu "rückgängig machen", können Sie zuerst eine zusätzliche Umkehrung auf eines Ihrer Signale anwenden (das sich in der Faltung aufheben wird).

    
wim 13.09.2011 04:35
quelle
3

Nun, yoda hat eine gute Antwort gegeben, aber ich dachte, ich erwähne das sowieso nur für den Fall. Zurückkommend auf die Definition der diskreten Kreuzkorrelation kann man sie berechnen, ohne (zu viel) eingebaute Matlab-Funktionen zu verwenden (was Matlab mit xcorr tun sollte). Natürlich gibt es noch Raum für Verbesserungen, da ich nicht versucht habe, dies zu vektorisieren:

%Vor%

Dies entspricht dem Ergebnis der Funktion xcorr .

UPDATE: vergaß zu erwähnen, dass Matlab meiner Meinung nach nicht das geeignete Werkzeug für die Echtzeit-Kreuzkorrelation großer Datensätze ist, ich würde es lieber in C oder in anderen kompilierten Sprachen ausprobieren.

    
Aabaz 13.09.2011 16:18
quelle