Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
Praktikant Toolentwicklung Matlab (m/w)
Branche: Beratung, Expertise, Fahrzeugtechnik, Fahrzeugteile, Technische Dienstleistungen
MBtech Group GmbH & Co. KGaA - Fellbach

Abschlussarbeit / Praktikum: Entwicklung Matlab (m/w)
Branche: Informationstechnologie, Elektrotechnik, Elektronik
GIGATRONIK Technologies GmbH - Ulm

Praktikum - Modellerstellung mit Matlab/Simulink
Branche: mehrere
IAV GmbH - Ingenieurgesellschaft Auto und Verkehr - Berlin, Chemnitz

Abschlussarbeit: Entwiclung eines Codegenerators für Steuergeräte-SW
Branche: Informationstechnologie, Elektrotechnik, Elektronik, Fahrzeugtechnik, Fahrzeugteile
GIGATRONIK Stuttgart GmbH - Stuttgart

Werkstudent/in zur Unterstützung in zivilen und militärischen Projekten von Mission Management Systemen
Branche: Informationstechnologie, Elektrotechnik, Elektronik, Wehrtechnik
ESG Elektroniksystem- und Logistik-GmbH - Fürstenfeldbruck

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Vier Datensätze - Zeiten vergleichen

 

jersey
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2017, 12:24     Titel: Vier Datensätze - Zeiten vergleichen
  Antworten mit Zitat      
Guten Tag,

den Titel zu finden, war sehr schwer, aber ich werde versuchen hier mein Problem so gut es geht zu schildern.

Ich habe mehrere Sensoren, genau genommen zwei Laserscanner, ein Seilzugsystem und ein Raddrehzahlsensor (Odometrie), die mir eine X-Position und eine Y-Position ausgeben.

Also habe ich insgesamt drei Matrizen, jeweils in der ersten Spalte die Zeit, in der zweiten Spalte die X-Position und in der dritten Spalte die Y-Position.

Code:

odom = [time_odom,x-pos_odom,y-pos_odom]
laser_1 = [time_laser_1,x-pos_laser_1,y-pos_laser_1]
laser_2 = [time_laser_2,x-pos_laser_2,y-pos_laser_2]
seilzug = [time_seilzug,x-pos_seilzug,y-pos_seilzug]
 


Nun ist mein Problem, dass die Sensoren unterschiedliche Abtastfrequenzen besitzen und somit habe ich eine unterschiedliche Anzahl an Messpunkten. (Weiterhin kommt hinzu, dass die doppelte Abtastfrequenz leider nicht bedeutet, dass ich doppelt so viele Messpunkte habe)

Um diese Sensoren nun vergleichen zu können, würde ich gerne jeweils die Odometrie als Referenz nehmen und die Zeiten der Messwerte von den anderen Sensoren mit den Zeiten der einzelnen Messdatenschritte der Odometrie vergleichen. D.h. die x- und y-Position mit dem geringsten Zeitabstand dann in die jeweilige Zeitzeile (von der Odometrie) einer neuen Matrix schreiben. (Also eine Matrix mit der Zeit der Odometrie in der ersten Spalte, danach dann x- und y-Position der Odometrie, dann die X- und Y-Position des ersten Laserscanners und so weiter.)

Code:


messdaten = [time_odom,  x-pos_odom,y-pos_odom,  x-pos_laser_1,y-pos_laser_1,
  x-pos_laser_2,y-pos_laser_2,   x-pos_seilzug,y-pos_seilzug]

 


Hat irgendwer eine Idee, wie ich das bewerkstelligen kann?

Ich habe keine Ahnung, ob meine Frage verständlich gestellt ist, bei Fragen gerne her damit Cool .
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 10.462
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.08.2017, 17:16     Titel: Re: Vier Datensätze - Zeiten vergleichen
  Antworten mit Zitat      
Hallo jersey,

Zitat:
Ich habe mehrere Sensoren, genau genommen zwei Laserscanner, ein Seilzugsystem und ein Raddrehzahlsensor (Odometrie), die mir eine X-Position und eine Y-Position ausgeben.

Meistens sind solche Details nur verwirrend. Für Matlab sind das alles Zahlen,und mehr muss man für eine Lösung oft nicht wissen.

Du suchst also zu den Zeiten in "odom" die jenigen Zeilen in den anderen Variablen, die den Werten in der ersten Spalte am nächsten liegen - richtig?
Code:
index = 1:size(odom, 1);
laser_1_index = interp1(time_laser_1, index, time_odom, 'nearest');

Das sind die Indices in Bezug auf "laser_1", die den Zeiten von "odom" am nächsten liegen.

Hilft das?

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.08.2017, 11:55     Titel:
  Antworten mit Zitat      
Moin Jan,

danke für deine Antwort, langsam bin ich echt am verzweifeln Sad.
Danke auch für die Anregungen, ich versuche das nun so simpel wie möglich zu halten.

Deine Idee klingt schon mal nicht schlecht: Ich suche für jeden Zeitpunkt der Odometrie eine passende Position des Lasers/Seilzuges, also wo der Abstand der Zeiten am geringsten ist.
Um das mal zu konkretisieren:

Odomdatensätze: 6366
Seilzugdatensätze: 6325 -> Hier sollen jetzt die Datensätze zu den Datensätzen der Odometrie geschrieben werden.

Nun habe ich versucht deine Code-Anregung in mein Programm einzupflegen, Matlab hat mir aber einen Fehler ausgespuckt:

Code:
Error using interp1>reshapeAndSortXandV (line 416)
X and V must be of the same length.

Error in interp1 (line 91)
    [X,V,orig_size_v] = reshapeAndSortXandV(varargin{1},varargin{2});


Und X - also bei mir (hab das mal auf seilzug angewendet) seilzug hat 6325 Datensätze
V - also bei mir size von odom -> 6366
orig_size_V - also bei mir die Zeiten von Odom ->6366 Datensätze

Habe ich da was falsch verstanden?

Vielen Dank schonmal im Vorraus
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 10.462
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.08.2017, 14:19     Titel:
  Antworten mit Zitat      
Hallo jersey,

Odom, Seilzugdatensätze, Laser, ... ???
Mich verwirren diese Details.

Zitat:
Odomdatensätze: 6366

Dir ist sicherlich klar, was "Datensätze bedeutet. Ich kann es zumindest erraten.

Zitat:
Und X - also bei mir (hab das mal auf seilzug angewendet) seilzug hat 6325 Datensätze V - also bei mir size von odom -> 6366
orig_size_V - also bei mir die Zeiten von Odom ->6366 Datensätze

Das verstehe ich nicht.

Offensichtlich enthält mein Code einen Bug. Die ersten beiden Inputs von interp1 müssen die gleiche Anzahl von Elementen haben. Dann:
Code:
index = 1:size(laser_1, 1);
laser_1_index = interp1(time_laser_1, index, time_odom, 'nearest');

Wenn Du statt der Beschreibung als Text die Daten postest, kann man solche Vorschläge leicht testen, bevor man sie abschickt. Ein winziger Datensatz mit 5 Zeiten und Werten würde schon reichen. Wenn die dann "a" und "b" heißen, muss man sich für die Antwort nicht durch Ausdrücke kämpfen, die für fachfremde nur verwirrend aussehen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.08.2017, 14:51     Titel:
  Antworten mit Zitat      
Okay, ich hab mich jetzt nochmal hingesetzt das ganze meiner Meinung nach verständlich aufgeschrieben, was ich genau in einen Matlab-Code übersetzt haben möchte. (ohne verwirrende Worte wie z.b. odom, seilzug Wink , sorry nochmal dafür).
Außerdem packe ich die beiden Datensätze mal als matfile mit in diesen Post.
Nicht erschrecken bei den Zeiten, die Daten wurden in Unixzeit aufgenommen.

Problembeschreibung.pdf
 Beschreibung:
Problembeschreibung

Download
 Dateiname:  Problembeschreibung.pdf
 Dateigröße:  16.27 MB
 Heruntergeladen:  11 mal
data_b.mat
 Beschreibung:
Data_b

Download
 Dateiname:  data_b.mat
 Dateigröße:  69.42 KB
 Heruntergeladen:  9 mal
data_a.mat
 Beschreibung:
Data_a

Download
 Dateiname:  data_a.mat
 Dateigröße:  69.22 KB
 Heruntergeladen:  11 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Lokdog
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 15.08.2017, 07:12     Titel:
  Antworten mit Zitat      
Hallo Jersey,

Ich hätte mehrere Ideen für dein Problem.

Lösung 1: Du könntest den Datensatz mit weniger Daten auf die Länge von dem Datensatz mit mehreren Daten interpolieren.

Lösung 2: Du könntest die deine 2 Matrizen "Mergen" müsste der 'join' Befehl sein, bin mir aber nicht sicher ob das mit unterschiedlichen größen funktioniert. Einfach mal Versuchen.

Lösung3: Du könntest aus deinen 2 Matrizen eine machen, erstmal ganz Stumpf zusammen führen.
-> Spalte 1 von Matrix 1 und Spalte 1 von Matrix 2 = Spalte 1 von Matrix 3. Einfach untereinander.
-> Spalte 2 von Matrix 2 = Spalte 2 von Matrix 3
-> Spalte 2 von Matrix 2 = Spalte 3 von Matrix 3
Final dann die Matrix 3, nach der ersten Spalte, ab-/aufsteigend, sortieren.


Grüße,
Lokdog
Private Nachricht senden Benutzer-Profile anzeigen
 
jersey
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2017, 12:10     Titel:
  Antworten mit Zitat      
Moin,

vielen Dank für eure Anregungen.
Ich habe mich jetzt mal ganz in Ruhe nochmal hingesetzt und mein Problem mit einigen For-Schleifen hinbekommen.

Danke trotzdem nochmal für eure Zeit und Hilfestellungen Very Happy

Ein super Forum indem ich schon sehr viel Hilfestellungen bekommen habe.
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.