WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matrizen unterschiedlicher Größe ineinander verschmelzen

 

Zeph
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 18.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2010, 11:48     Titel: Matrizen unterschiedlicher Größe ineinander verschmelzen
  Antworten mit Zitat      
Hallo, ich habe folgendes Problem:

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.
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 08.03.2010, 11:59     Titel:
  Antworten mit Zitat      
Ich glaube, dass das (zunächst) kein MATLAB Problem ist, sondern eine Frage wie man mit der gegebenen Messtechnik mit den Daten seriös umgeht, oder?

Eine zumindest für die Zwischenrechnung möglicherweise speicherplatzintensive Variante stelle ich mir so vor:

Zu jeder Messreihe müssten dann Zwischenwerte kleiner als die Abtastrate interpoliert werden, also z.B. 1 ms (INTERP1).

Die Ergebnisse kann man dann wunderbar zusammenfassen. Abschliessed ist eine Dezimation durchaus wieder vertretbar.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 08.03.2010, 13:14     Titel:
  Antworten mit Zitat      
Hi,

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.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Zeph
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 18.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2010, 13:17     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Zeph
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 18.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2010, 16:26     Titel:
  Antworten mit Zitat      
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

M1 = Matrix_vector{1,1}; %Matrix1 ist Group_0001

for n=2:10
   
    M2 = Matrix_vector{1,n}; %Matrix2 schreiben

    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

    M = sortrows(M); %sortiert nach erster Spalte

    M_size = size(M); %Größe von M ermitteln

    % 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

    M1 = M; %neue Matrix M1 schreiben

end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.