Kreuz-Korrelation in matlab ohne Verwendung der eingebauten Funktion?
kann mir jemand sagen, wie man die Kreuz-Korrelation der beiden Sprachsignale (jeweils 40.000 Proben) in MATLAB ohne Verwendung der built-in Funktion xcorr
und der Korrelationskoeffizient?
Vielen Dank im Voraus.
- Wie, aber auch nicht wie, stackoverflow.com/questions/7036628/...
- Vielen Dank Alex für die Antwort.
- wenn diese Hausaufgaben, Kennzeichnen Sie bitte als solche
- Verwandte Frage: Berechnen Autokorrelation mittels FFT in matlab
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie tun cross-Korrelationen mit
fft
. Die Kreuz-Korrelation der beiden Vektoren ist einfach das Produkt der jeweiligen Fourier-Transformationen, mit einer der Transformationen, konjugierte.Beispiel:
Vergleichen Sie die Ergebnisse:
xcorr
zunächst. An welchem Punkt Sie denken, dass es ok ist eingebauten Funktionen? Ist2+2
erlaubt? Wie wäreplus(2,2)
? Sie sollten erklären, warum Sie diese Einschränkungenxcorr
. Wenn ich die oben mit 40.000 samples für beidea
undb
auf meinem Rechner, es dauert etwa 0,7 Sekunden. Und wenn ich einfach nur halbieren (also etwa 20.000) Proben, es dauert nur 0,04 Sekunden und ist in der Nähe von instant-in 0.006 Sekunden, für 10.000 Proben.Wenn es manchen guten Grund, warum Sie nicht verwenden können, den Ausgang, können Sie eine Faltung statt. Kreuz-Korrelation ist einfach eine Faltung ohne die Umkehr, also zu 'undo' die Umkehrung der Korrelation der integralen können Sie zunächst eine weitere rückwärts auf einem Ihrer Signale (welche Abbrechen, in der convolution).
Gut yoda gab eine gute Antwort, aber ich dachte, ich erwähne dies sowieso nur für den Fall. Kommen wir zurück zu der definition der diskreten Kreuz-Korrelation können Sie berechnen Sie ohne Verwendung von (zu viel) eingebaute Matlab-Funktionen (welche sollten das sein, was Matlab zu tun mit
xcorr
). Natürlich gibt es noch Raum für Verbesserung, wie ich habe nicht versucht zu Vektorisieren dies:Dem match das Ergebnis der
xcorr
Funktion.UPDATE: vergessen zu erwähnen, dass meiner Meinung nach Matlab ist nicht das geeignete Werkzeug für das tun von Echtzeit-cross-Korrelation von großen Datensätzen, würde ich eher versuchen, es in C oder anderen Programmiersprachen, die kompiliert werden.