Kreuzkorrelation < Sonstiges < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 10:31 Fr 11.03.2005 | Autor: | pimbolie1979 |
Hi @ all
ich habe eine Kreuzkorrelation mit matlab durchgeführt. Dabei benutze ich eine Signal, deren Werte ich aus einer Textdatei auslese. Ingesamt besteht dieses Signal aus 2000 diskreten Werten. Das Muster, das über das Signal laufen soll habe ich in einer zweiten Textdatei gespeichert. Die Länge des Musters beträgt 200 diskrete Werte und ist ein Bereich aus dem Signal. So wie ich die Kreuzkorrelation verstanden habe, wird das Muster über das Signal gelegt und Punkt für Punkt miteinander multipliziert. Anschließend wird aus den Produkten die Summe gebildet und danach das Signal oder das Muster um einen diskreten Wert verschoben und danach erneut die Summe der Produkte gebildet. Jedoch verstehe ich das Ergebnis nicht, das Matlab mir liefert (habe die Funktion xcorr(x1,x2) benutzt, wobei x1 das Signal und x2 das Muster ist). Denn das Ergebnis besteht mit aus 4000 diskreten Summen. Wie kommt denn diese Anzahl zustande? Nach meiner Meinung muss das Maximum der Kreuzkorrelationsfunktion an der Stelle 500 liegen, warum leigt es jetzt an der Stelle 2500 und wieso geschieht schon an der Stelle 1800 etwas?
Die Kreuzkorrelation habe ich auf meiner Homepage dargestelllt.
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
www.gastgeber-deutschland.de
Dateianhänge: Anhang Nr. 1 (Typ: gif) [nicht öffentlich]
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 11:53 Mo 22.10.2007 | Autor: | Pinsel |
Hallo zusammen,
ich habe das gleiche Problem wie pimbolie1979, leider wurde hier nichts mehr berichtet.
Zu meinem Vorhaben.
Ich will von 2 Sensoren Messwerte einlesen. Die Messwerte sollen dann in Matlab mit Korrelation auf Ähnlichkeit überprüft werden.
Für Testzwecke habe ich nun ein Signal1 mit 1000 Werten und ein Signal2 mit 100 Messwerten (Signal2 ist ein Ausschnitt aus Signal1) in Matlab angelegt.
Nachem ich den Befehl xcorr(Signal1, Signal2) ausgeführt habe bekomme ich das gleiche Ergebnis wie pimbolie1979.
Bin in Matlab leider nicht so tief drin.
Es gibt noch einige andere Korrelationsbefehle. Ist xcorr prinzipiell für mich der richtige?
Wenn ja, was mache ich falsch?
Am Anfang blieb die Korrelationsfunktion auf 0, aber warum fällt sie zum Schluss nicht wieder auf 0 zurück nachdem Signal2 an seinem "Abbild" aus Signal1 vorbeigelaufen ist?
Hoffe jemand kann mir helfen.
MFG
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:20 Mi 24.10.2007 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Hallo,
ich habe mir mit 'help xcorr' mal angeguckt, was Matlab dazu sagt:
XCORR Cross-correlation function estimates.
C = XCORR(A,B), where A and B are length M vectors (M>1), returns
the length 2*M-1 cross-correlation sequence C. If A and B are of
different length, the shortest one is zero-padded. C will be a
row vector if A is a row vector, and a column vector if A is a
column vector.
Also: Deine beiden Vektoren sind offensichtlich unterschiedlich lang, daher
wird der kürzerer zero-gepadded. Das kenne ich nicht, aber ich könnte mir vorstellen, dass einfach 0 eingefügt wird.
Dann erklärt sich auch, warum die Kreuzkorreliert länger ist als 2000 und ebenfalls warum das erwartete Maximum an einer anderen Stelle liegt.
Wenn dir das nicht weiterhilft, würde ich erstmal mit der Funktion xcorr experimentieren, indem du kurze Sequenzen nimmst, bei denen du die Kreuzkorrelierte per Hand ausrechnen kannst. Vielleicht erstmal mit gleich langen Signalen beginnen und dann unterschiedlich lange nehmen und gucken was passiert.
Falls noch Fragen sind, schreibe mal welche Erfahrungen du mit kurzen Sequenzen gemacht hast und was komisch ist. Ansonsten hilft vielleicht auch die Matlab Hilfe, in der häufig auch Beispiele sind.
Gruß
marthasmith
|
|
|
|