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

Unbekannte Variablen zusammenfügen

 

MatlabAndy
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2018, 07:24     Titel: Unbekannte Variablen zusammenfügen
  Antworten mit Zitat      
Hallo zusammen,
ich hoffe, dass ihr mir hierbei weiterhelfen könnt.
Ich habe Messdaten, die ich mit DEWESoft X3 in ein mat-file exportiere.
Dabei macht DEWESoft nicht nur eine Variable pro aufgezeichneten Signal, sondern trennt es (meiner Meinung nach ohne Logik), in mehrere Variablen auf, wobei es zusätzlich Signale erstellt, die den Zeitstempel darstellen und diese immer mit 0 beginnen.

Data1_SignalA
Data1_time_SignalA
Data2_SignalA
Data2_time_SignalA
Data3_SignalA
Data3_time_SignalA

Da ich das ganze Signal verarbeiten will, anfangs nicht weiß, wie die Signale heißen werden und ich es später in einer Listbox auflisten will, hoffe ich, dass ihr mir da helfen könnt.

- Wie finde ich gleiche Signale (Data1_SignalA, Data2_SignalA, Data3_SignalA), ohne dass ich im voraus weiß, wie sie heißen?
- Wie verbinde ich sie am sinnvollsten?
- Ich würde gerne die Signale inklusiven Zeitstempel verbinden, so dass ich ein Signal in der Listbox auswählen kann und anschließend einfach nur auf einen Button zum Plotten klicke.

SG
MatlabAndy
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.06.2018, 11:35     Titel: Re: Unbekannte Variablen zusammenfügen
  Antworten mit Zitat      
Hallo MatlabAndy,

Was sind genau Deine Inputs?
Zitat:
Data1_SignalA
Data1_time_SignalA
Data2_SignalA
Data2_time_SignalA
Data3_SignalA

Was ist das? Ein Text-File, oder sind das die Felder eines Structs?
Welches sind die "zusätzlichen Signale"? Was beginnt mit "0"?
Was ist "das ganze Signal"? Was bedeutet "wie die Signale heißen" in Deinem Beispiel? Meinst Du "A", oder "SignalA" oder "Data1_SignalA"?

Zitat:
- Wie finde ich gleiche Signale (Data1_SignalA, Data2_SignalA, Data3_SignalA), ohne dass ich im voraus weiß, wie sie heißen?

Das kommt ganz darauf an, ob noc h "ungleiche Signale" vorhanden sind. Was bedeutet "im Voraus"? Vor dem Laden des Files?

Zitat:
- Wie verbinde ich sie am sinnvollsten?

Das lässt sich bisher wegen der anderen Unklarheiten noch nicht klären.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabAndy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2018, 12:37     Titel:
  Antworten mit Zitat      
Hallo Jan
Nehmen wir an, dass das Messsignal "distance" heißt und über einen bestimmten Zeitbereich aufgezeichnet wird.

DEWESOFT X3 erstellt beim Exportieren in ein mat-file Signalvektor <324x1 single>

Aus meinem Messsignal werden durch den Export somit leider folgende Vektoren erstellt.
Data1_distance <324x1 single>
Data1_time_distance <324x1 single>
Data2_distance <421x1 single>
Data2_time_distance <421x1 single>
Data3_distance <121x1 single>
Data3_time_distance <121x1 single>

Beim Exportieren startet Data1_time_distance mit dem Wert 0 in der ersten Zelle, genauso wie alle anderen auch.
Data1_time_distance(1)=0
Data2_time_distance(1)=0
Data3_time_distance(1)=0

Wenn ich nun manuell diese Daten zusammenfüge (Zeitstempel wurde dabei schon aufaddiert, d.h. Data2_time_distance =Data1_time_distance) (x=...time_distance y=...distance) erhalte ich einen Plot, der genau meinem Wunsch entspricht.

Mein Wunsch ist es, ohne zu wissen, wie die Signale benannt worden sind, diese Signale wieder automatisch zu einem Signal zusammenzufügen und in diesem Fall einen 2x866 Vektor zu erstellen, so dass erst nach der Zusammenführung die unterschiedlichen Signale in meiner Listbox angezeigt werden und ich das Signal einfach nur auswählen muss und er durch ein Push_button_Event geplottet wird.

Ich hoffe, dass das dir soweit weiterhilft. Bei Fragen bin ich gerne behilflich.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.06.2018, 13:52     Titel:
  Antworten mit Zitat      
Hallo MatlabAndy,

Zitat:
ein mat-file Signalvektor <324x1 single>

Du hast also ein MAT file, in dem sich ein Single-Vector befindet - richtig?

Zitat:
Aus meinem Messsignal werden durch den Export somit leider folgende Vektoren erstellt.
Data1_distance <324x1 single>
Data1_time_distance <324x1 single>...

Jetzt erkläre noch mal ganz genau, was das ist und wo das erscheint. Sinde das Felder eines Structs, oder hast Du eine Einlese-Routine, die dies als einzelne Vektoren in Matlab importiert?
Verwendest Du load ohne die Ausgabe in einer Variablen zu speichern und diese Variables landen im Workspace?

Zitat:
Wenn ich nun manuell diese Daten zusammenfüge...

Kannst Du zeigen, wie Du das machst? Das würde vielleicht schon klären, was Deine Inputs sind.

Ich vermute, die Lösung ist einfach. Data = load('File.mat') und dann hast Du die Namen der Signale als Feldnamen. Falls die Feldnamen dann garantiert dem Muster "Data1_XYZ" folgen, könnte man den XYZ-Teil einfach extrahieren. Aber vielleicht können mehrere solcher Namen auftauchen? Also "Data1_XYZ" und "Data1_ABC"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabAndy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2018, 07:25     Titel:
  Antworten mit Zitat      
Also hier mein manueller Code
Code:
clc
fileList =dir('*.mat');
[filename, filepath] = uigetfile('*.mat','Select MAT File');
y = [filepath, filename];
Data = load(y);

Speed_Signal=[Data.Data1_Speed_kph;Data.Data2_Speed_kph;Data.Data3_Speed_kph];
for TimeActualisation=1:1240
    if TimeActualisation<=652
        SpeedTime(TimeActualisation,1)=Data.Data1_time_Speed_kph(TimeActualisation);
    elseif TimeActualisation<=911
        SpeedTime(TimeActualisation,1)=Data.Data2_time_Speed_kph(TimeActualisation-652)+SpeedTime(652,1);
    else
        SpeedTime(TimeActualisation,1)=Data.Data3_time_Speed_kph(TimeActualisation-911)+SpeedTime(911,1);
    end
end

Speed=[SpeedTime Speed_Signal];
plot(Speed(:,1),Speed(:,2))


Da ich die Daten via load lade, bekomme ich natürlich einen struct mit diversen single und double Vektoren.
In der for-Schleife muss ich die Zeit neu berechnen, da Data.Data2_time_Speed_kph wieder mit 0 beginnt, was am Export von DEWESoft liegt.
Ich weiß, dass ich die for-Schleife mit size(Signalname) machen sollte, aber ich habe es nun so gemacht, dass du siehst wie groß die Vektoren sind.

Nun will ich das ganze automatisieren, so dass es egal ist, welche Messsignale ich noch habe, sei es zurückgelegte Strecke, Drehzahl, ....
Mein Programm soll alle Signale wie im Code dargestellt verbinden, obwohl es nur weiß, dass alle Signale mit Data.Data1, Data.Data2 oder Data.Data3 beginnen.
D.h. es soll die Signalnamen von Data.Data1_... auslesen und mit Data.Data2_... und Data.Data3_... verbinden, wenn der restliche Signalnamen übereinstimmt.

Ich hoffe, dass dir das jetzt weiterhilft
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.06.2018, 17:41     Titel:
  Antworten mit Zitat      
Hallo MatlabAndy,

Das ist ein wirklich dämliches Datei-Format. Bitte kontaktiere den Hersteller und spare nicht mit Kritik.

Code:
[filename, filepath] = uigetfile('*.mat','Select MAT File');
Data = load(fullfile(filepath, filename));
Fields = fieldnames(Data);
Fields1 = Fields(strncmp(Fields, 'Data1_time_', 11));
Vars = strrep(Fields1, 'Data1_time_', '');

Result = struct([]);
for iVar = 1:numel(Vars)
 
end

Sorry, das ist noch nicht fertig. Ohne einen Input-Datensatz wird das auch ziemlich viel Raterei. Kannst Du ein Beispiel-File posten?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabAndy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2018, 07:06     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine Hilfe. Ich habe jetzt mal den Hersteller kontaktiert und warte nun auf eine Rückmeldung.
Im Anhang findest du ein File, das meine Signale beinhaltet.
Die Idee mit dem Aufteilen, hatte ich auch schon, nur weiß ich noch nicht, wie ich damit weiterarbeiten soll.
Es geht mir darum, dass der User beispielsweise das angehängte mat-file lädt. Dann weiß ich ja wie die Signale heißen, aber wenn der User beispielsweise etwas auswerten will, das andere Signalnamen verwendet, müsste ich diese manuell erstmal im Code hinterlegen.
Mein Wunsch ist es, dass mein Programm, sollte es nichts möglich sein die Daten als ein <x*2> Vektor zu exportieren, alle Elemente des Structs durchsucht, verbindet (wenn sie den selben Namen haben, beispielsweise Data1_v_rel, Data2_v_rel, Data3_v_rel und Data1_time_v_rel, Data2_time_v_rel, Data3_time_v_rel) und ich dann über eine Listbox einfach das Signal auswählen und plotten kann.

Gruß Andy

Data.mat
 Beschreibung:

Download
 Dateiname:  Data.mat
 Dateigröße:  31.09 KB
 Heruntergeladen:  149 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.06.2018, 12:44     Titel:
  Antworten mit Zitat      
Hallo MatlabAndy,

Falls ich heute oder am Wochenende Zeit finde, werde ich das mal Programmieren. Mit der Beispiel-Datei kann ich es jetzt ja auch ausprobieren.

Gruß, Jan
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 - 2024 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.