Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Mathematik und Physik ::  datenreduktion eines xy-signals  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
mael15
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.01.2009
Beiträge: 227
Beitrag 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
Beitrag 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




Beitrag 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




Beitrag JFB Unregistrierter 14:10:44 13.08.2012   Titel:              Zitieren

Stichwort "Smoothing Spline"?
mael15
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.01.2009
Beiträge: 227
Beitrag 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




Beitrag 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 :o)
Mups
Unregistrierter




Beitrag 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
Beitrag 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 :o)

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




Beitrag 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




Beitrag 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
c++.de :: Mathematik und Physik ::  datenreduktion eines xy-signals  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.