mir liegen mehrere Matrizen vor, in denen Messwerte gespeichert sind. Die erste Spalte ist jeweils die Zeit und alle weiteren Spalten sind Messwerte von verschiedenen Sensoren.
Es gibt mehrere Matrizen, da nicht alle Sensoren mit der gleichen Loggingrate gespeichert werden.
Ich habe z.B. eine Matrix in der alle Werte mit 10ms aufgenommen werden (Spaltenlänge 1500 Werte), eine weitere Matrix mit 100ms Auflösung (Spaltgenlänge 150), usw.
Ist es möglich, dass ich diese Matrizen zu einer Großen zusammenfüge? So dass ich als erste Spalte wieder die Zeit habe und dann die Messwerte in den weiteren Spalten.
Auf die Zeitstempel kann ich mich nicht verlassen, das heißt, dass z.B. der Messpunkt zum Zeitpunkt 2s in der 10ms Matrix bei 2.0028s liegt und bei der 100ms Matrix bei 2.0857s
Die unbesetzten Elemente in der neuen Matrix sollten unbesetzt bleibt, oder wenn das nicht geht 0 sein, oder den gleichen Wert wie vorher haben. Da bin ich mir noch nicht sicher was am Besten ist.
die Matrixumwandlung an sich sollte kein großes Problem darstellen, du kannst nicht vorhandene Zeitwerte mit NaN markieren. Ich sehe das eigentlich Problem darin eine zuverlässige gemeinsame Zeitbasis zu finden, wenn die Zeitstempel dermaßen ungenau sind. Wenn die Werte der unterschiedlichen Sensoren untereinander korreliert sind, könnte man versuchen eine gemeinsame Zeitbasis mit Hilfe der Kreuzkorrelation herzustellen. Wenn die Abweichung allerdings toleriebar ist, kann man sich den Aufwand natürlich sparen.
Ich weiß nicht ob ich deine Antwort richtig verstehe. Machst du dir sorgen um die leeren Zellen, die dabei entstehen?
Das wäre erstmal kein Problem, da die weitere verarbeitung in Excel stattfindet und da einfach nur Punkte anstatt Graphen angezeigt werden. Ist zwar nicht schön, aber das reicht mir so aus.
Eine Methode habe ich schon gefunden, wie es evtl. gehen könnte, allerdings fehlt mir jetzt nur noch die Programmierung dazu.
Beispiel:
Ich habe zwei Matrizen A(4x2) und B(8x3) aus diesen beiden würde ich dann eine dritte Matrix machen C(12x5). C müsste dann so aussehen, dass im linken oberen Teil A steht und rechts davon 4x3 Nullen.
Im unteren Teil von C müssten in der ersten Spalte die Werte der 1. Spalte von B stehen. Dann rechts davon eine 8x2 Nullmatrix und dann die "Wertematrix" 8x2 von B.
Wie könnte ich das machen? Und ist das so überhaupt verständlich was ich möchte?
Das Problem ist, dass ich B dabei aufteilen muss, damit ich die 1. Spalte von B auch in der 1. Spalte von C habe. Den Rest sollte ich hinkriegen.
Jetzt hab ich es doch noch selbst geschafft. Ich habe mich für die Methode entschieden die Nullen, die entstehen durch den Messwert vorher zu ersetzen.
Code:
Matrix_vector = {Group_0001 Group_0002 Group_0003 Group_0004 Group_0005 Group_0006 Group_0007 Group_0008 Group_0009 Group_0010};
%Array mit allen Groups (Matrizen) um in der Schleife darauf zugreifen zu
%können
size_M1 = size(M1); %Größe der Matrix M1 ermitteln und abspeichern
size_M2 = size(M2); %Größe der Matrix M2 ermitteln und abspeichern
M1_zeros = zeros(size_M1(1,1),size_M2(1,2)-1); %Größe der Nullmatrix für M1 ermitteln und Nullmatrix erstellen
M1_new = [M1,M1_zeros]; %neuer Matrix-Block mit Nullmatrix
M2_time = M2(:,1); %Zeitspalte von M1 auslesen und extra speichern
M2_zeros = zeros(size_M2(1,1),size_M1(1,2)-1); %Größe der Nullmatrix für M1 ermitteln und Nullmatrix erstellen
M2_values = M2(:,2:size_M2(1,2)); %Matrix mit den reinen Werten ohne Zeitstempel
M2_new = [M2_time,M2_zeros,M2_values]; %neuer Matrix-Block mit Zeitstempel & Nullmatrix
M = [M1_new;M2_new]; %neue gesamte Matrix aus M1 & M2
% Schleifenkonstrukt um Nullen durch vorherigen Wert zu ersetzen for m=2:M_size(1,2) %Spalten durchlaufen
for k=2:M_size(1,1) %Zeilen durchlaufen
if M(k,m)==0 %wenn Element=0 dann
M(k,m)= M(k-1,m); %Elemente = Element von vorher
else M(k,m)=M(k,m); % andernfalls mach nix end end end
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.