| Autor |
Nachricht |
mael15
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.01.2009
Beiträge: 227
|
mael15 Mitglied
16:01:00 12.08.2012 Titel: |
datenreduktion eines xy-signals |
Zitieren |
hallo zusammen,
mein programm zeichnet xy-Werte auf und stellt sie auf dem bildschirm in einem koordinatensystem dar (siehe http://gemini-sites.de/signal.gif). ich habe eine einstellbare samplerate, z.b. 2000 smpl/s. nun möchte ich zum reduzieren der zu speichernden daten relativ unwichtige punkte löschen, z.b. den mittleren auf einer geraden mit drei punkten.
meine idee ist, die für meine zwecke wichtigen extremwerte unverändert zu lassen und irgendwie die restlichen punkte zu reduzieren. gibt es dafür ein geeignetes verfahren?
danke! |
|
|
|
 |
knivil
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.02.2009
Beiträge: 5870
|
knivil Mitglied
20:03:51 12.08.2012 Titel: |
|
Zitieren |
| Zitat: | | gibt es dafür ein geeignetes verfahren | Hunderte ... z.B. stueckweise Approximation mit einer Geraden, Glaettung, Ableitung/Kruemmung betrachten ... Du kannst wahrscheinlich x und y unabhaengig betrachten ... |
_________________ If it were not for laughter, there would be no Tao.
Sie können einen Beitrag nicht so schnell nach Ihrem letzten absenden, bitte warten Sie einen Augenblick.
Zuletzt bearbeitet von knivil am 20:05:01 12.08.2012, insgesamt 1-mal bearbeitet |
|
 |
Mups
Unregistrierter
|
Mups Unregistrierter
10:24:51 13.08.2012 Titel: |
|
Zitieren |
Das kommt darauf an, welche Eigenschaften du erhalten möchtest. Wenn es dir nur auf Extremwerte ankommt, schmeisse doch alles bis auf (lokale) Extremwerte weg. Das Signal sieht danach ganz "eckig" aus, aber vielleicht reicht dir das ja? |
|
|
|
 |
JFB
Unregistrierter
|
JFB Unregistrierter
14:10:44 13.08.2012 Titel: |
|
Zitieren |
Stichwort "Smoothing Spline"? |
|
|
|
 |
mael15
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.01.2009
Beiträge: 227
|
mael15 Mitglied
14:40:24 13.08.2012 Titel: |
|
Zitieren |
danke für eure antworten!
| JFB schrieb: | | Stichwort "Smoothing Spline"? |
klingt gut, hab ich mal zu gegooglt, aber leider nichts umsetzbares gefunden. kann es sein, dass es sich dabei eher um eine technik handelt, mit der man weiche kurven aus wenigen punkten erzeugen kann? als zweiter schritt wäre das gut, aber ich müsste vorher punkte "sinnvoll" reduzieren.
| Mups schrieb: | | Das kommt darauf an, welche Eigenschaften du erhalten möchtest. Wenn es dir nur auf Extremwerte ankommt, schmeisse doch alles bis auf (lokale) Extremwerte weg. Das Signal sieht danach ganz "eckig" aus, aber vielleicht reicht dir das ja? |
das resultat sollte schon recht nach dran am ausgangssignal, also nicht extrem eckig sein.
ich hatte vermutet, dass eine solche datenreduktion häufig gebraucht werden würde und es deshalb schon fertige bibliotheken dafür gibt. kennt jemand eine?
alternativ hatte ich überlegt, punkte umso häufiger zu löschen je weiter sie von wichtigen punkten entfernt sind. vielleicht gibt es dafür schon einen guten algorithmus? wichtig wären neben extremwerten noch die schnittpunkte des signals mit dem roten kreis. |
|
|
|
 |
Mups
Unregistrierter
|
Mups Unregistrierter
14:58:12 13.08.2012 Titel: |
|
Zitieren |
Wenn dir tatsächlich soetwas einfaches reicht, dann ist selber machen vermutlich 100x schneller als Bibliothek installieren, komplilieren, Doku-lesen etc.
Ganz naiv reicht dir vielleicht jeder 100ste Punkt (damit es hübsch aussieht), und die interessanten Punkte nahe des Kreises und die Extrempunkte:
Für lokale Extrema:
§\mbox{Falls } |x_{n-1}| <= |x_{n}| \mbox{ und } |x_{n+1}| <= |x_{n}|: \mbox{ Speichere } x_n§
Der Schnitt mit dem Kreis liegt zwischen zwei Punkten:
§\mbox{Falls } |x_{n-1}| <= R <= |x_{n}|: \mbox{ Speichere } x_n \mbox{ und } x_{n-1}§
Irgendeine komische Bedingung für zusätzliche Punkte:
§\mbox{Falls } n \mbox{ mod } 100=0: \mbox{ Speichere } x_n§
Falls du irgendetwas ausdenken möchtest, um "nah bei wichtigen Punkten" viel zu speichern, und weit weg möglichst wenig, wird die Formulierung umständlicher. Wie wäre es mit soetwas hier:
Falls §x_n§ ein "wichtiger" Punkt ist, speichere die Punkte mit den Indices §n\pm2^0, n\pm2^1, n\pm2^2 ...§
Du kannst dir aber auch beliebig viel klügere Dinge ausdenken. Wenn du einfach Plattenplatz sparen willst, empfehle ich möglicherweise auch WinZip |
|
|
|
 |
Mups
Unregistrierter
|
Mups Unregistrierter
14:59:55 13.08.2012 Titel: |
|
Zitieren |
| Mups schrieb: |
Der Schnitt mit dem Kreis liegt zwischen zwei Punkten:
§\mbox{Falls } |x_{n-1}| <= R <= |x_{n}|: \mbox{ Speichere } x_n \mbox{ und } x_{n-1}§
|
Besser:
Der Schnitt mit dem Kreis liegt zwischen zwei Punkten:
§\mbox{Falls } |x_{n-1}| <= R <= |x_{n}| \mbox{ oder } |x_{n}| <= R <= |x_{n-1}|: \mbox{ Speichere } x_n \mbox{ und } x_{n-1}§ |
|
|
|
 |
mael15
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.01.2009
Beiträge: 227
|
mael15 Mitglied
15:04:48 13.08.2012 Titel: |
|
Zitieren |
| Mups schrieb: | | Wenn dir tatsächlich soetwas einfaches reicht, dann ist selber machen vermutlich 100x schneller als Bibliothek installieren, komplilieren, Doku-lesen etc. |
ok, dann denke ich mir selber etwas aus. das hat mich neulich bei einem anderen problem 5 tage gekostet und konnte im nachhinein schneller mit einer library gelöst werden. deswegen wollte ich in diesem fall lieber erstmal nach einer library fragen.
| Mups schrieb: | Wenn du einfach Plattenplatz sparen willst, empfehle ich möglicherweise auch WinZip  |
winrar habe ich schon versucht, hat im besten fall leider nur 14% gebracht. bisher speichere ich die daten (16 bit mit vorzeichen) binär in eine textdatei.
danke! |
|
|
|
 |
JFB
Unregistrierter
|
JFB Unregistrierter
15:58:09 13.08.2012 Titel: |
|
Zitieren |
Ah, meine Antwort war auf den Post darüber bezogen Gegen Eckigkeit hilft das nämlich ganz gut, wie der Name schon nahelegt. |
|
|
|
 |
JFB
Unregistrierter
|
JFB Unregistrierter
21:29:16 13.08.2012 Titel: |
|
Zitieren |
PS: Unter dem Stichwort "Knotenentfernen" ließe sich aber vielleicht doch etwas basteln. Wenn man nämlich zuerst einen Smoothing Spline mit passendem Glättungsparameter (bzw. Datentreueparameter, den zu finden eher eine Gefühlssache ist, bzw. wenn du wirklich Interpolation brauchst, kannst du ihn eh weglassen) über die Datenpunkte legt und dann mit einem Krümmungsschätzer nur die Knoten behält, bei denen die Krümmung hoch ist (hat ja knivil schon angedeutet) und dann ebendort den Spline auswerten. Das könnte mit MATLAB evtl. schon mit annehmbarem Aufwand implementiert werden.
Wenn dir ein Quasi-Interpolant reicht könntest du auch einfach den Schoenberg-Operator auf deine Punkte loslassen.
Aber das hängt natürlich von der erforderlichen Datentreue ab.
Vielleicht sind Splines aber auch ein viel zu komplizierter Ansatz für dein Problem. Kommt halt darauf an, was du erreichen willst.
Eine angenehme (weil nicht formal-mathematische) Einführung in das Thema gibt's hier: http://www.uni-giessen.de/tomas.sauer/Skripten/Splines.pdf bzw. in neuerer Version hier: http://www.fim.uni-passau ....... sauer/geyer/SplinesV3.pdf |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|