|
|
|
Datenpunkte sinnvoll reduzieren |
|
| Trash_84 |

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 16.11.15
|
 |
|
 |
Wohnort: Berlin
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.09.2017, 18:01
Titel: Datenpunkte sinnvoll reduzieren
|
 |
| |
 |
|
Hallo liebe Matlabfreunde
ich stehe derzeit vor dem Problem mit großen Datenmengen umzugehen.
Ich möchte die Datenpunkte gern sinnvoll reduzieren um zB. einen vernüftigen "surface-plot" darzustellen.
Ich habe hier im Forum schon verschiedene Möglichkeiten angeschaut, allerdings habe ich zu meiner Idee bisher noch keinen Ansatz gefunden.
Und zwar möchte ich gern Datenpunkte durch Mittelwerte ersetzen und die Anzahl der zu mittelnden Werte über eine maximale absolute Abweichung definieren. Das heißt, wenn zB. die Messwerte lange um den Wert 0,5 "Schwingen" dann möchte ich viele Werte mitteln und durch eben den Mittelwert ersetzen, wenn aber ein starker Anstieg des Signals passiert, möchte ich die Werte nicht manipulieren.
Ich hoffe mein Ansatz ist einigermaßen verständlich
Da ich mit Matlab noch nicht soviel Erfahrung habe, würde ich mich über Ideen und Vorschläge freuen wie ich das am besten umsetzen kann - bevor ich mich "stundenlang in eine Sackgasse programmiere"
Ich danke euch auf jeden Fall schonmal - und wenn noch Fragen bestehen, werde ich die natürlich so schnell wie möglich beantworten!
Grüße -der Trash-
|
|
|
|
|
|
| Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.09.2017, 20:00
Titel:
|
 |
Guck Dir mal den Douglas-Peucker-Algorithmus an. Der tut zwar nicht das, was Du beschrieben hast, aber das Ergebnis sieht sehr ähnlich aus (in meinem Kopf ;-)).
Musst aber mal gucken, ob der überhaupt für Flächen definiert ist. Je mehr ich darüber nachdenke, desto eher denke ich, dass das keinen Sinn macht. Aber für Linienzüge ist der wirklich sehr hilfreich...
|
|
|
|
| Trash_84 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 16.11.15
|
 |
|
 |
Wohnort: Berlin
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 07:49
Titel:
|
 |
Hey Epfi,
vielen Dank für den Hinweis! -der Ansatz klingt auf jeden Fall schon gut, da ich ja im ersten Schritt die Punkte verschiedener Linienzüge reduzieren will um dann im zweiten Schritt mit Hilfe von surf eine 3D-Darstellung zu erzeugen.
Ich werde mir das ab Mo dann mal genauer anschauen - vlt. gibt es ja bis dahin noch weitere Ideen / Ansätze von euch?
Na dann mal allen hier ein schönes WE!
|
|
|
|
| Trash_84 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 16.11.15
|
 |
|
 |
Wohnort: Berlin
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 17:20
Titel:
|
 |
| |
 |
|
Soo - jetzt hab ich mir den Ansatz mit dem Douglas-Peucker-Algorithmus doch schonmal angeschaut - und das funktioniert soweit auch echt gut! (ich konnte die Datenpunkte etwa um Faktor 40 reduzieren ohne nennenswerte Informationen der Messdaten zu verlieren.
Nun sind allerdings die Datenreihen zwar weiterhin noch zeitsynchron (also Anfang und Ende stimmen), allerdings nicht mehr gleich lang, bzw. gleichmäßig aufgeteilt...
-dh. Start und Endzeit stimmen weiterhin überein, nur dazwischen sind jetzt abhängig von dem Algorithmus mal mehr und mal weniger Datenpaare (Messwert, Zeit) eliminiert worden.
Um nun also einen 3D plot erstellen zu können müsste ich die Vektoren erst wieder alle auf die gleiche Länge bringen, wo mir jetzt ein bisschen "die Luft ausgeht"
Meine Idee ist im ersten Schritt alle Vektoren zu vergleichen und den längsten Vektor als Bezug zu nehmen.
Im zweiten Schritt würde ich jetzt bei allen anderen Vektoren soviele Elemente ergänzen bis die Länge gleich dem Bezugsvektor ist. -hier stellt sich mir jedoch die Frage wie ich das anstellen soll bzw. ob das grundsätzlich überhaupt geht / Sinn macht, oder ob ich dann am Ende wieder genauso viele Elemente habe wie vor der "Datenreduktiuon mit dem Algorithmus"?
Mein Problem ist, das ich nicht weiß nach welchem Prinzip ich die fehlenden Elemente in den "zu kurzen" Vektoren auffüllen kann. Und mir ist auch nicht ganz klar ob es das Problem löst wenn die Vektoren alle gleich lang sind, oder ob der x- (Zeit) Vektor für alle Vektoren identisch sein muss?
Am Ende will ich insgesamt 36 parallel gemessene Signalverläufe mit einem surfaceplot darstellen. Das ginge zwar grundsätzlich auch mit dem kompletten Datensatz - allerdings ist dann die Grafik äußerst unschön (siehe angehängte Grafiken für nur 2 Signalverläufe).
Ich würde mich echt freun vlt. nochmal einen Tipp von euch zu bekommen
| Beschreibung: |
|
 Download |
| Dateiname: |
surf_oL.jpg |
| Dateigröße: |
17.96 KB |
| Heruntergeladen: |
419 mal |
| Beschreibung: |
|
 Download |
| Dateiname: |
surf_mL.jpg |
| Dateigröße: |
21.81 KB |
| Heruntergeladen: |
428 mal |
| Beschreibung: |
|
 Download |
| Dateiname: |
plot3.jpg |
| Dateigröße: |
24.22 KB |
| Heruntergeladen: |
417 mal |
|
|
|
|
| Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 17:39
Titel:
|
 |
Ja, das Problem ist mir auch schon durch den Kopf geschossen. Spontan dachte ich mir: muss man halt alle x-Vektoren aneinanderhängen, nach Größe sortieren und alle doppelten rauswerfen. An all diesen Punkten soll jede Kurve einen Wert haben. Die fügt man durch lineare Interpolation (oder besser: mit Daten aus dem original-Datensatz) hinzu.
Und wenn man Pech hat, passiert genau das, was Du gesagt hast: am Ende hat man so viele Daten, wie vorher. Vielleicht schlaf ich nachher noch ne Runde und mir fällt ein, wie es dann weitergehen könnte ;-)
|
|
|
|
| Trash_84 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 16.11.15
|
 |
|
 |
Wohnort: Berlin
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 17:46
Titel:
|
 |
Hehe - ja ich wäre für nen Ansatz echt dankbar...
-primär geht es zwar jetzt erstmal "nur" um die grafische Darstellung, da die Messreihen aber eher länger werden und die Datenmengen dann sehr schnell auch sehr sehr groß werden, finde ich den Ansatz mit dem Algorithmus echt cool um auch die eigentliche Datenauswertung damit zu machen - wenn man jetzt nur noch am Ende wieder "vernüftige" Vektoren bekommen würde...
|
|
|
|
| Trash_84 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 16.11.15
|
 |
|
 |
Wohnort: Berlin
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 18:37
Titel:
|
 |
Hey Epfi
ich hab den Ansatz "alle Zeitstempel in einen Vektor, sortieren, doppelte löschen" jetzt grad mal umgesetzt - und ich würde so am Ende dann nur noch auf eine Reduktion der Messpunkte um den Faktor 2 kommen (meine Testdaten waren jetzt etwa 230T Messpunkte für ca. 8 min, und so würde ich die MP auf etwa 107T reduzieren -was vor allem für eine gute "surf Darstellung" noch zuviel ist ...)
Hmm, na vlt. hast du (oder ein anderer Experte) ja noch eine Idee?
|
|
|
|
| Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 18:48
Titel:
|
 |
Wenn es nicht so ganz 100% korrekt sein muss, könntest Du x-Punkte, die eng beieinander liegen verschmelzen. In den Daten verschiebst Du die Punkte, die nicht exakt sondern nur so ungefähr auf einem der vorgegebenen x-Werte liegen auf genau diese x-Werte.
Dadurch wird alles ein bisschen falsch, aber wenn es um ein Bild geht, reicht es ja vielleicht aus...
Würde vorher aber mal den x-vektor plotten und schauen, ob es überhaupt viele Punkte gibt, die sehr eng nebeneinander liegen.
|
|
|
|
| Trash_84 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 16.11.15
|
 |
|
 |
Wohnort: Berlin
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 19:23
Titel:
|
 |
ja "dicht" ist nun relativ... -und mit gutem Gewissen würden nochmal etwa 1000 Punkte wegfallen - da ist also nicht soviel zu holen...
Ich würde das Thema jetzt aber mal unter einer neuen Überschrift weiterführen, da ja die "sinnvolle Datenreduzierung" schonmal erledigt ist
Soweit auf jeden Fall vielen Dank Epfi!
|
|
|
|
| Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 19:47
Titel:
|
 |
Falls das alles nicht zielführend sein sollte: Du könntest auch zuerst mit Deinen gleich langen Ausgangslinienzügen die Fläche (drei Vektoren mit jeweils x, y und z-Wert) aufspannen und in jedem Punkt die Krümmung berechnen. Punkte mit kleiner Krümmung wirfst Du raus, Punkte mit großer Krümmung behältst Du bei.
Das kommt auch in etwas aufs gleiche raus und weil Du direkt mit der Fläche arbeitest, sollte es keinen Ärger mit falschen Vektorlängen geben...
|
|
|
|
| Trash_84 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 16.11.15
|
 |
|
 |
Wohnort: Berlin
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 19:54
Titel:
|
 |
Hmm das klingt auf jeden Fall nach nem interessanten Ansatz! -allerdings hab ich grad 0-Plan wie ich eine Krümmung in einem Punkt berechnen kann?
- da würde dann vermutlich die Länge der Ausgangsvektoren gleich bleiben, aber eben die grafische Darstellung besser werden oder? -was ja auf jeden Fall passen würde
Vlt. kannst du mir - wenns nicht zu aufwändig ist, ein Beispiel geben wie ich das mit den Krümmungen angehen könnte?
|
|
|
|
| Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 20:11
Titel:
|
 |
Habe gerade mal die Definition der Gausschen Krümmung gelesen (-> https://de.wikipedia.org/wiki/Gaußsche_Krümmung ) und ich glaube, die bringt uns nicht weiter. Sobald die Krümmung in einer Hauptrichtung (x, y) null ist, ist die Gaussche Krümmung in dem Punkt nämlich auch null. Wenn man sich als Fläche die Klippen von Calais vorstellt ( -> http://wordpress.fandf.ch/wp-conten.....eastbourn-und-seaford.jpg ) hätten die Punkte entlang der Kante alle die Krümmung 0 und würden rausfliegen. Das wäre nicht sehr zielführend.
Du könntest dann eher mit dem Maximum aus den Beträgen der Krümmungen entlang der x- und y- Achse rechnen. Wie man die Krümmung berechnet, findest Du z.B. hier: http://www.mathepedia.de/Kruemmung.aspx (Explizite Darstellung).
Wenn Du Daten mit Rauschen hast (aus einer Messung z.B.), könnte das ganze aber auch ziemlich schief gehen.
|
|
|
|
| Trash_84 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 16.11.15
|
 |
|
 |
Wohnort: Berlin
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 20:24
Titel:
|
 |
Oh je - vielen Dank für deine Hilfe
Aber ich glaub da steht dann Aufwand und Nutzen nicht mehr wirklich im Verhältnis...
Ich werd jetzt mal Schluss machen, vlt. fällt mir ja morgen noch irgendwas ein
|
|
|
|
| Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.09.2017, 21:32
Titel:
|
 |
|
Ein gutes Bild braucht eben seine Zeit :-)
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|