[MATLAB] Autokorrelation

Ken Masters

Lt. Junior Grade
Registriert
Dez. 2006
Beiträge
334
Hallo an alle,

ich bin ein Neuling in Matlab, d.h. ich hab so gut wie fast keine Ahnung davon und arbeite mich langsam hinein. Alleine schaffe bzw. verstehe ich das nicht so richtig. Auch aus Tutorials wurde ich nicht schlau. bevor ich völlig deprimiert aufgebe, dachte ich mir, dass ich als letztes mein Problem hier poste. vielliecht kann mir ja jmd. das verständlich rüberbringen. :(

Zu meinem Problem/Frage: ich habe einen datensatz (excel-datei), aus 5 spalten und 279.322 zeilen.
die 1. spalte behinhaltet die zeitpunkte, 2. - 4. winkel bzgl. x-,y- und z-achse und die 5. die varianz.
ich möchte nun bei den winkeln mit einer autokorrelation nach hinweisen auf peridodizität suchen.
mein 1. problem ist, dass ich nicht mal den kompletten datensatz in matlab bekomme, also wenn ich m = xls('test.xls, 1, 'A1:E5000') eingebe, dann bekomme ich fast alle 5000 zeilen (also von beginn der 1. zeile an bis zur 5000. zeile). Wenn ich m = xls('test.xls, 1, 'A1:E10000') eingebe, dann bekomm ich bisschen mehr als 5000 zeilen, aber halt die letzten 5000 zeilen. die 1. bis zur 5000. zeile fehlen. bei m = xls('test.xls, 1, 'A1:E50000') gibt er die zahlen sogar falsch aus. also da sind die kommas verschoben, anstatt 225.493 steht dann da 2.25493

ich denke mal das bei matlab ca. 5000 zeilen bzw. spalten die grenze erreicht ist. könnte auch sein dass ich was falsch mache, ich weiss es nicht. das 2. problem ist halt mit der autokorrelation. das habe ich gar nicht verstanden, also wie ich da vorgehen muss etc. :rolleyes:

der syntax lautet:

autocorr(Series,nLags,M,nSTDs)
[ACF,lags,bounds] = autocorr(Series,nLags,M,nSTDs)

trifft diese formel bei meiner problemstellung überhaupt zu? es gibt auch andere. ich brauche wirklich dringend hilfe

danke für im voraus für die antworten/hilfen.
 
Heisst die korrekte Funktion zum einlesen nicht xlsread?

http://www.mathworks.ch/help/techdoc/ref/xlsread.html

Hast du mal versucht, das ganze ohne Bereichsangabe einzulesen:

m=xlsread('test.xls')

Ev. noch unter Angabe des Worksheets (falls mehrere vorhanden).


Du könntest zudem noch probieren, die Daten via Wizard (File > Import Data) einzulesen.
 
Zuletzt bearbeitet:
Ich kenne mich mit der Verbindung zwischen Excel und Matlab nicht so aus, aber was spricht denn gegen ein Auslesen der Excel-Datei in 5000er-Blöcken und anschließendes zusammenfügen? Du kannst doch anscheinend problemlos jeweils 5000 Datensätze einlesen, und die kannst du dann jeweils an Position 5000*Schleifendurchlauf(+1 oder so ;-) ) setzen in dem Vektor, der alle Daten enthalten soll.
 
hallo noobnoob,

ja sry, haste natürlich recht. ich habe auch xlsread eingegeben. habe es oben falsch geschrieben. mit dem wizard habe ich es zwar importiert, aber können im command window nicht alle zeilen angezeigt werden. im workspace steht bei der importierten datei "too many elements". wenn ich drauf klicke öffnet sich der variable editor. dort sind alle zeilen zu sehen. aber es werden spalten mit NaN angezeigt.

was eher wichtig ist das mit der autokorrelation. wenn es mit dem einlesen nicht anders geht, dann müsste/würde ich auch es stückweise machen.
Ergänzung ()

@totaleclipse:

auf deine frage kann ich leider nicht antworten, weil ich es selber nicht weiss.
 
Aber du kannst es doch ausprobieren, oder nicht?
 
ja klar könnte man das ausprobieren. überlege gerade seit ein paar minuten nur wie? und vor allem bei matlab.

also ich soll mehrere schleifendurchgänge machen, wobei immer sagen wir 5000 zeilen eingelesen werden, die packt er dann in ein feld und beginnt eine neue schleife ab der zeile 5001 und liest ->packt sie dann weiter in das feld... immer so weiter bis der keine werte mehr hat oder was? (hab ich das richtig verstanden)
klingt kompliziert.
 
Schau dir mal im Excel die Zellen an, wo "Nan" drin steht. NaN = "Not a Number". Ist die Zahl dort irgendwie falsch formatiert? Punkt statt Komma (oder umgekehrt)? Irgendwelche fremde Zeichen drin? Alle Spalten in Excel als "Nummer" formatiert?

NaN kann Matlab nicht lesen (auch nicht via mehrere Schleifendurchgänge).

Bei der Autokorrelation selber kann ich dir leider nicht weiterhelfen, das liegt bei mir ein paar Jährchen zurück :rolleyes:
 
Zuletzt bearbeitet:
Ken Masters schrieb:
ja klar könnte man das ausprobieren. überlege gerade seit ein paar minuten nur wie? und vor allem bei matlab.

also ich soll mehrere schleifendurchgänge machen, wobei immer sagen wir 5000 zeilen eingelesen werden, die packt er dann in ein feld und beginnt eine neue schleife ab der zeile 5001 und liest ->packt sie dann weiter in das feld... immer so weiter bis der keine werte mehr hat oder was? (hab ich das richtig verstanden)
klingt kompliziert.

%Datenarray preallokieren
daten(1:%AnzahlDatensaetze%) = 0;

maxIteration = (%anzahldatensaetze%/5000)-1;
for i = 0 : maxIteration
daten(5000*i +1 : 5000*(i+1)) = %BefehlZumAuslesenVon5000DatensaetzenAbIndex(5000*i + 1)%;
end

%Liest den 'Ueberhang' ein
rest = mod(%anzahldatensaetze%, 5000);
daten(maxIteration*5000 + 1: (maxIteration*5000) + rest) = %BefehlZumAuslesenDerRestdatensaetze%;

So in etwa müsste das funktionieren, aber ohne Gewähr, ich verhau mich gerne mal bei den Indexgrenzen um 1.
Wirklich kompliziert ist das aber eigentlich nicht und bisschen mit Schleifen umgehen sollte man schon können, wenn man mit Matlab arbeitet.
 
dankeschön. werde es mir heute abend genauer anscheuen und testen. muss jetzt weg. melde mich nochmal.
 
Zurück
Oben