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

Datensätze zusammenfügen

 

jasmin_89
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2022, 16:42     Titel: Datensätze zusammenfügen
  Antworten mit Zitat      
Hallo,

ich habe vier Datensätze. Es handelt sich um Daten von einem Industrieroboter, die mit 4ms aufgenommen wurden.

Ich möchte nun die 4 Datensätze in Matlab einlesen und in einer gemeinsamen Matrix darstellen und verschieden Spalten plotten, wobei Spalte 1 die Zeit darstellt.

Nur bin ich nicht sicher wie ich die Daten zusammenfügen kann. Das Problem ist dass jeder der vier Dateien bei einer Zeit von 0ms wieder startet. Ich möchte aber dass nur die Erste Datei bei 0ms startet und diese dann fortaufen bis zu dem Letzten Datensatz. Ist das möglich bzw. wie bekomme ich das hin die Datensätze in Matlab zu verbinden sodass die Zeit immer fortlaufend ist? Im Anhang sind die Datensätze.


Bin für einen Tipp dankbar Smile

Code:

M = readmatrix('11')


subplot(4,1,1)
plot(M(:,1)/1000,M(:,2))
hold on
plot(M(:,1)/1000,M(:,3))
hold on
plot(M(:,1)/1000,M(:,4))
hold on

legend('Fx','Fy','Fz')
grid on
h_xlabel = xlabel ({ '$t$\,/\,s'});
set(h_xlabel,'Interpreter','latex');
h_ylabel = ylabel ({'$F$\,/\,N'});
set(h_ylabel,'Interpreter',' latex');

subplot(4,1,2)
plot(M(:,1)/1000,M(:,5))
hold on
plot(M(:,1)/1000,M(:,6))
plot(M(:,1)/1000,M(:,7))
legend('Mx','My','Mz')
grid on
h_xlabel = xlabel ({ '$t$\,/\,s'});
set(h_xlabel,'Interpreter','latex');
h_ylabel = ylabel ({'$M$\,/\,Nmm'});
set(h_ylabel,'Interpreter',' latex');
 grid on

subplot(4,1,3)
plot(M(:,1)/1000,M(:,20))
hold on
plot(M(:,1)/1000,M(:,21))
plot(M(:,1)/1000,M(:,22))
legend('X','Y','Z')
grid on

subplot(4,1,4)

plot(M(:,1)/1000,M(:,22))
legend('Z')
grid on


 h_xlabel = xlabel ({ '$t$\,/\,s'});
set(h_xlabel,'Interpreter','latex');
h_ylabel = ylabel ({'$Weg$\,/\,mm'});
set(h_ylabel,'Interpreter',' latex');
 


daten.zip
 Beschreibung:

Download
 Dateiname:  daten.zip
 Dateigröße:  28.3 KB
 Heruntergeladen:  153 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.04.2022, 18:04     Titel:
  Antworten mit Zitat      
Hallo,

Du kannst die Matrizen mit [ ; ] untereinanderhängen. Die Zeit müsstest du selbst anpassen, z.B. für die ersten beiden Dateien:
Code:
M1 = readmatrix('11');
M2 = readmatrix('22');
M2(:,1) = M2(:,1) + M1(end,1);
M = [M1; M2];


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2022, 19:27     Titel:
  Antworten mit Zitat      
Hallo,

Danke das ist genau was ich gesucht habe. Habe es noch erweitert für alle Datensätze:
Code:
M1 = readmatrix('11');
M2 = readmatrix('22');
M3 = readmatrix('22');
M4 = readmatrix('22');
M2(:,1) = M2(:,1) + M1(end,1);
M3(:,1) = M3(:,1) + M2(end,1);
M4(:,1) = M4(:,1) + M3(end,1);
M = [M1; M2; M3; M4];





Nur ein kleiner Fehler ist mir aufgefallen. Bei dem Übergang von ein Datensatz in den nächsten steht bei der Zeit der selbe Wert. Es müsste hier beim übergang um den Wert 4 höher sein. Also als Beispiel Datensatz 1 am Ende:

Code:
612   8.28227796000000   2.97550168000000   -0.676748470000000...


Übergang zum Datensatz zwei:

Code:
612   -0.302723460000000   0.0381150900000000   -0.111476890000000...


Statt der Zeit 612 müsste also stehen 616. Kann ich das noch berücksichtigen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.04.2022, 19:47     Titel:
  Antworten mit Zitat      
Hallo,

die 4 addieren?
Code:
M2(:,1) = M2(:,1) + M1(end,1) + 4;

Bei M3 und M4 solltest du noch auf den Dateinamen achten. Wink

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2022, 17:48     Titel:
  Antworten mit Zitat      
Stimmt, ich dachte mir schon dass da etwas nicht stimmt. Vielen Dank für deine Unterstützung Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2022, 20:57     Titel:
  Antworten mit Zitat      
Hallo, habe hierzu noch eine Frage. Ist es möglich die Daten Zeitlich zu plotten? Also damit meine ich folgendes:

Ich habe die Daten mit einem Sensor mit 4ms aufgenommen. Ich möchte die Daten nun so Zeitlich ablaufen lassen dass diese auch so visualisiert werden. Also dass ich im Plot diagramm sehe wie sich die Werte pro Sekunden laufend verändern.

Ist so was in Matlab möglich?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.05.2022, 22:39     Titel:
  Antworten mit Zitat      
Hallo,

versuche es mal mit animatedLine .
Wenn dir das nicht weiterhilft: mein Eindruck ist, dass du eine Art Animation möchtest - mir ist aber nicht klar, was genau. Dann müsstest du das genauer beschreiben. Sollen insbesondere nur am Ende der Kurven neue Punkte hinzukommen oder auch Punkte am Anfang wieder entfernt werden, so dass man quasi immer ein Fenster der letzten x Sekunden sieht?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2022, 10:51     Titel:
  Antworten mit Zitat      
Ja ich denke animatedline geht in die richtige Richtung.

Die gemessenene Werte stellen Kräfte dar. Ich habe den Ablauf des Versuches am realen Aufbau mit einer Video-Kamera festgehalten. Nun möchte ich eben den Matlab plot so ablaufen lassen als wenn ich die Daten direkt messen würde. Also ich möchte mein Video ablaufen lassen und paralell dazu den Matlab plot. Sodass ich am Video sehe was geschieht und am Matlab-Plot wie die Kräfte sich real verändern.

Es sollen also keine Neuen Punkt hinzukommen sondern der plot sollte sich so in Echtzeit verändern wie die Messung vorgenommen wurde.

11.JPG
 Beschreibung:

Download
 Dateiname:  11.JPG
 Dateigröße:  81.2 KB
 Heruntergeladen:  125 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.05.2022, 11:20     Titel:
  Antworten mit Zitat      
Hallo,

möchtest du also die Animation auf Echtzeit "einbremsen"? Das kannst du mit pause erreichen.

Wenn du immer nur die momentane Kraft sehen möchtest, könnte bar die bessere Wahl sein.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2022, 22:23     Titel:
  Antworten mit Zitat      
Ich habe nun fast das genau hinbekommen was ich haben möchte. Mein plot wird nun animiert. Jedoch stimmt die Zeit nicht mit der realen Zeit zusammen.

Also die Daten wurden in einem Abstand von 4 millisekunden aufgenmmen. Wenn ich nun mein plot animieren lasse stimmt diese Zeit nicht mit der "realen" Zeit zusammen. Ich möchte genau dass in meinem plot genau 1 Sekunde auch 1 Sekunde in der "realen" Welt ist. Momentan läuft der plot langsam ab. Danke für eine Hilfe.

Hier mein code:

Code:
% clean up
clc;clear all;close all;

% read data in
M = readmatrix('11');

% Plot force data
subplot(4,1,1);box on; hold on; grid on;
an1=animatedline(M(1,1)/1000,M(1,2));
an2=animatedline(M(1,1)/1000,M(1,3));
an3=animatedline(M(1,1)/1000,M(1,4));

legend('Fx','Fy','Fz')
h_xlabel = xlabel ({ '$t$\,/\,s'});
set(h_xlabel,'Interpreter','latex');
h_ylabel = ylabel ({'$F$\,/\,N'});
set(h_ylabel,'Interpreter',' latex');

% Plot torque data
subplot(4,1,2);box on; hold on; grid on;
an4=animatedline(M(1,1)/1000,M(1,5));
an5=animatedline(M(1,1)/1000,M(1,6));
an6=animatedline(M(1,1)/1000,M(1,7));

legend('Mx','My','Mz')
h_xlabel = xlabel ({ '$t$\,/\,s'});
set(h_xlabel,'Interpreter','latex');
h_ylabel = ylabel ({'$M$\,/\,Nmm'});
set(h_ylabel,'Interpreter',' latex');


% Plot cartesian data X-Y
subplot(4,1,3);box on; hold on; grid on;
an7=animatedline(M(1,1)/1000,M(1,20)-84.84);
an8=animatedline(M(1,1)/1000,M(1,21)-105.74);
%plot(M(:,1)/1000,M(:,22))
legend('X','Y','Z')
h_xlabel = xlabel ({ '$t$\,/\,s'});
set(h_xlabel,'Interpreter','latex');
h_ylabel = ylabel ({'$Weg$\,/\,mm'});
set(h_ylabel,'Interpreter',' latex');

% Plot Z
subplot(4,1,4);box on; hold on; grid on;
an9=animatedline(M(1,1)/1000,M(1,22));

legend('Z')
h_xlabel = xlabel ({ '$t$\,/\,s'});
set(h_xlabel,'Interpreter','latex');
h_ylabel = ylabel ({'$Weg$\,/\,mm'});
set(h_ylabel,'Interpreter',' latex');

%% Initialize video
myVideo = VideoWriter('myVideoFile'); %open video file
myVideo.FrameRate = 10;  %can adjust this, 5 - 10 works well for me
open(myVideo)

set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
set(gcf,'color','w');
%% Live plot
set(gcf, 'Position', get(0, 'Screensize'));
for i=2:size(M,1)

        % Plot force data
        addpoints(an1,M(i,1)/1000,M(i,2));
        addpoints(an2,M(i,1)/1000,M(i,3));
        addpoints(an3,M(i,1)/1000,M(i,4));
       
        % Plot torque data
        addpoints(an4,M(i,1)/1000,M(i,5))
        addpoints(an5,M(i,1)/1000,M(i,6));
        addpoints(an6,M(i,1)/1000,M(i,7));
       
        % Plot cartesian data X-Y
        addpoints(an7,M(i,1)/1000,M(i,20)-84.84);
        addpoints(an8,M(i,1)/1000,M(i,21)-105.74);
       
        % Plot Z
        addpoints(an9,M(i,1)/1000,M(i,22));
        drawnow;
       
        tic;pause(0.004) ;toc;
       
            frame = getframe(gcf); %get frame
    writeVideo(myVideo, frame);
end
close(myVideo)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.05.2022, 23:05     Titel:
  Antworten mit Zitat      
Hallo,

falls es dir um das fertige Video geht: müsste die Frame Rate nicht 1/0.004 = 250 sein?

falls es dir um das geht, was man bei der Erzeugung des Videos siehst: mit pause(0.004) pausierst du ja zu lange, weil das Verändern des Plots ja auch eine gewisse Zeit braucht. Ich würde also am Anfang der for-Schleife tic setzen und am Ende
Code:

Sollte eine Iteration länger als 0.004 Sekunden benötigen, sehe ich nur die Möglichkeit, mehrere Iterationen zusammenzufassen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2022, 07:49     Titel:
  Antworten mit Zitat      
Wie kann ich denn da die Framerate auf 250 in dem Video einstellen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.05.2022, 09:04     Titel:
  Antworten mit Zitat      
Hallo,

dein Code enthält
Code:
myVideo.FrameRate = 10;

Die 10 in 250 abändern.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2022, 15:00     Titel:
  Antworten mit Zitat      
Achso stimmt. Vielen Dank ich habe es nun hinbekommen
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.