Forum: PC-Programmierung Frage zu Datenvisualisierung - oder so.


von Santiago m. H. (mausschubser)


Lesenswert?

Hallo,

zwischendurch muss ich auch mal wieder mit dem PC spielen und dachte 
mir, ich schnitze ein netzwerkfähiges Datenanzeigesystem (in Java). Zum 
Test habe ich einen Systemtreiber geschrieben, der Messdaten von 
AD-Wandlungen im Netz anbietet.
Dann habe ein ein kleines Gui geschrieben, das diese Daten anzeigt.

So weit, so gut. Nur kommen die Daten viel schneller, als man sie mit 
dem Auge erfassen könnte. Wie kann ich denn zu einer sinnvollen (?) 
Anzeige kommen, bzw. wie wird denn die Zeitabtastung für Signale 
gemacht, bei denen die Frequenz höher ist, als die Aufnahmefähigkeit des 
Auges?

Werden die Zwischenwerte einfach verworfen und nur ein Teil des 
Datenstromes angezeigt, oder wie geht man(n) mit schnelleren Daten um?

Habe jetzt schon so einiges über Oszilloskope und Co gelesen, aber der 
Groschen ist noch nicht so wirklich gefallen.
Ach ja, es geht um die Darstellung von live-Daten, nicht von 
irgendwelchen Aufnahmen.

von Frank (Gast)


Lesenswert?

> Messdaten von AD-Wandlungen

Mittelwert über mehrere Messungen?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Das kommt darauf an, was du aus den Daten herauslesen willst bzw. wie 
die Daten aussehen. Du kannst da ziemlich kreativ werden.

Beispiel 1 - Langzeitverfolgung der Windgeschwindigkeit

Die gemessene Windgeschwindigkeit wird in einen klassischen XY-Plot 
aufgetragen. Die Y-Achse ist logischerweise der Messwert und die X-Achse 
ist die Zeit. Die Zeitachse kann man umschaltbar machen - Jahre, Monate, 
Tage, Stunden, ... um bestimmte Trends zu sehen.

Beispiel 2 . Spitzenwertanzeige einer Lautstärke

Die gemessene Lautstärke wird in einem VU-Meter auf einer Skala 0..10 
anhezeit und der aktuelle Spitzenwert wird paar Sekunden als extra 
Strich angeiegt. Die Skala kann man grün (gut), gelb (an der Grenze), 
rot (übersteuert) gestalten.

Progrmmiertechnisch kann man die verschienden Anzeigemodule in je eine 
Klasse packen und der Klasse dann die Rohdaten zur Darstellung 
vorwerfen. Es hat Vorteile, wenn es eine einheitliche Schnittstelle 
gibt, weil man dann einfach zwischen verschiedenen Darstellungen 
umschalten kann. Eventuell kann man sich da an vorhandenen Klassen 
orientieren, denn ich schätze, dasss es solche Darstellungsbibliotheken 
schon frei und kommerziell gibt.

von Christian B. (schlebinski)


Lesenswert?

Wenn man niedrige Frequenzen hat, kann man die Daten im Rollmodus 
anzeigen (EKG Style), d.h. die neuesten Werte kommen links ins Bild und 
wandern dann mit zunehmendem Alter nach rechts.

Wenn man hohe Frequenzen darstellen will, gibt es die Möglichkeit des 
Triggerns. Man legt einen bestimmten Grenzwert fest und eine Richtung 
der Werteentwicklung (z.B. sobald der Wert 5 überschritten wird) beginnt 
die Darstellung von links nach rechts bis der Bildschirm voll ist. Dann 
beginnt der Zyklus von vorne. Man kann dann zB einstellen, dass man 
immer eine Schwingungsperdiode (konstante Frequenz vorausgesetzt) 
angezeigt bekommt.

Ausserdem kann man eine Fourier Tranformation durchführen und sich das 
Frequenzspektrum anzeigen lassen, auch für tiefe Frequenzen interessant.

Gibt bestimmt noch genug andere Möglichkeiten, aber das wären so die 
gängigsten denke ich.

von Santiago m. H. (mausschubser)


Lesenswert?

Hallo,

danke für Eure Aufmerksamkeit.

Wie befürchtet, konnte ich nicht vermitteln, was ich wissen möchte.

Garnicht so einfach. Wie formuliere ich es ...

Also mir geht es nicht darum, wie kreativ ich mit den Daten umgehen 
könnte (was ja streng genommen zu einer Verfälschung führt).
Für statistische Auswertungen brauche ich im Moment keinen Input - denke 
das bekomme ich dann schon hin, wenn es ansteht.

Im Augenblick geht es mir darum, die Echtdaten anzuzeigen. Genau 
genommen tut die Anzeige ja bereits, mir ist die Darstellung aber zu 
unruhig.
Mir gefällt der Netzwerk-Gedanke und dann soll es auch eine Fingerübung 
als Vorbereitung für eine Oszi-Anwendung sein.

Beispiel:
Ich setze dem AD-Wandler einen 1 kHz Sinus vor. Der landet dann auch in 
der GUI als Sinus, allerdings wandert die Welle "durchs Bild". Bei einem 
Sinus ist es jetzt rel. einfach den zu synchronisieren. Die Nullstellen 
lassen sich finden und darauf könnte ich triggern.

Wie kann ich eine "Synchronisation" bei unbekannten Daten erreichen? 
Also beispielsweise zufällige Meßwerte.

> Progrmmiertechnisch kann man die verschienden Anzeigemodule in je eine
> Klasse packen und der Klasse dann die Rohdaten zur Darstellung
> vorwerfen.

Programmiertechnisch habe ich es genauso gelöst. Eine Basisklasse und 
davon div. Anzeigeelemente abgeleitet, die die Rohdaten verarbeiten. Das 
passt schon.

> Eventuell kann man sich da an vorhandenen Klassen
> orientieren, denn ich schätze, dasss es solche Darstellungsbibliotheken
> schon frei und kommerziell gibt.

Hm - ich habe schon nach sowas gesucht, aber in der freien Welt (also 
kein Basic, bzw. kein Windows) konnte ich nix derartiges finden.

von Santiago m. H. (mausschubser)


Lesenswert?

Hallo Christian,

habe Deinen Beitrag garnicht gesehen.
Ja, Du hast meine Frage verstanden :)

> Wenn man niedrige Frequenzen hat, kann man die Daten im Rollmodus
> anzeigen (EKG Style), d.h. die neuesten Werte kommen links ins Bild und
> wandern dann mit zunehmendem Alter nach rechts.

Ja, das ist ungefär der Status quo. Nur habe ich die Richtung falsch 
gewählt. Aber das umzudrehen ist nicht die Welt.

> Wenn man hohe Frequenzen darstellen will, gibt es die Möglichkeit des
> Triggerns. Man legt einen bestimmten Grenzwert fest und eine Richtung
> der Werteentwicklung

Verstehe ich das richtig - das entspricht kwasi der Nullpunktsuche bei 
einem Sinus?
Wie ist das denn bei einem echten Oszi? Kann man da den 
"Unschärfebereich" auswählen?

Der Schwellwert ist dann ein benutzer-definierbarer Wert?

von mitwisser (Gast)


Lesenswert?

>Beispiel:
>Ich setze dem AD-Wandler einen 1 kHz Sinus vor. Der landet dann auch in
>der GUI als Sinus, allerdings wandert die Welle "durchs Bild". Bei einem
>Sinus ist es jetzt rel. einfach den zu synchronisieren. Die Nullstellen
>lassen sich finden und darauf könnte ich triggern.

>Wie kann ich eine "Synchronisation" bei unbekannten Daten erreichen?
>Also beispielsweise zufällige Meßwerte.


Bei dem Sinus funktionierts natürlich, weil das Signal periodisch ist. 
Aber "unbekannte Daten"/"zufällige Messwerte"  und eine "ruhige" Anzeige 
widersprechen sich doch.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Santiago m. H. wrote:

> Hm - ich habe schon nach sowas gesucht, aber in der freien Welt (also
> kein Basic, bzw. kein Windows) konnte ich nix derartiges finden.

Suche "instrumentation java widget OR applet" oder "diagramm java widget 
OR applet"

JFreechart
http://www.jfree.org/jfreechart/
http://www.linux-magazin.de/heft_abo/ausgaben/2004/05/malen_nach_zahlen
(sehr gemischt u.a. XY-Plot und Kuchen/Balken...)

Bode Plot Java Applet
http://www.uwm.edu/People/msw/BodePlot/

Brainstorming "was geht"
http://www.genlogic.com/demos.html

Leider Windows-Abhängig:

Universal Real-Time Software Oscilloscope GUI DLL Library for data 
acquisition and logging, computer simulation and debugging programs
http://www.oscilloscope-lib.com/


Edit: Cool was man da so findet. Entspannung für den Freitagnachmittag 
;-)
http://jas.eng.buffalo.edu/
http://www.schulphysik.de/java/physlet/

von Santiago m. H. (mausschubser)


Lesenswert?

Hallo Stefan,

danke für Deinen Zeiteinsatz!

Richtige Suchbegriffe sind schon Gold wert :)

Danke für den reichhaltigen Lesestoff für's WE.
Die Osci-Lib würde mich sehr interessieren tun, scheint aber closed 
source zu sein. Kammer also nix von lernen.

Beim Rest scheint es aber auch kuhl ab zu gehen :D

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.