Forum: PC-Programmierung Waveform (LabVIEW) ersatz in Python


von Philipp C. (e61_phil) Benutzerseite


Lesenswert?

Hallo,

ich bin zur Zeit dabei mehr und mehr automatisierte Messungen 
(Messgeräte über GPIB, LXI und USB) von LabVIEW auf Python umzuziehen.

In LabVIEW gibt es für Signale im Zeitbereich den Datentyp "Waveform" 
dieser beinhaltet ein Array aus den Y Werten und daneben noch ein double 
mit "dt" (also die Zeitinkremente) sowie ein t0 mit dem Zeitpunkt des 
Messbeginns. Also genau das, was zB aus einem Scope rausfällt, wenn man 
sich die Daten holt.

Da ich nun gerne ein paar Funktionen in Python basteln würde, die mit so 
gemessenen Daten etwas anstellen hätte ich gerne wieder eine art 
Datentyp der genau das abbildet und so für Ein- und Ausgänge der 
Funktionen genutzt werden kann.

Ich habe schon mal ein wenig gesucht, aber nichts einheitliches in der 
Hinsicht gesehen. Natürlich könnte man sich zB eine Klasse basteln, die 
die entsprechenden Datentypen beinhaltet, aber wenn es so eine Art best 
practice für diese Art von Daten gibt, so würde ich mir diese zumindest 
gerne mal ansehen.

Wie handhabt ihr solche Daten?

Vielen Dank und viele Grüße
Philipp

von Franz F. (franzman)


Lesenswert?

Pandas ist dein Freund
https://github.com/pandas-dev/pandas

von LEler (Gast)


Lesenswert?

Ich habe genau soetwas auch mal mit Python + PyVisa gemacht und ein 
numpy-Array mit zwei Spalten verwendet (für einen Kanal bzw. ein 
fünfspaltiges für vier Kanäle). Lässt sich einfach plotten, 
Rechenroutinen, Abspeichern/Laden geht mit numpy-Datentypen auch recht 
schnell.

Anbei ein paar Tips aus meiner Praxis:
Formatiere das Array direkt richtig mit den Scaling-Werten und verwende 
als Datentyp Float32 oder Float16. Das beugt Fehlern beim Verwenden von 
Routinen wie z.B. rfft usw. vor und vereinfacht das Plotten.
Mit Ausnahme der HDO-Serie von LeCroy (12-Bit) digitalisieren alle mir 
bekannten Oszis mit 8 oder 10-Bit, daher ist ein Float16 m.E. 
ausreichend.
Wenn du nur wenige Messreihen machst, Speicherplatz (+ multiple Backups) 
keine Rolle spielen, nimm Float32.

Wenn du viele Messreihen machst und die Ergbnisse archivieren willst, 
speichere unbedingt Dinge wie Datum, Kanalbezeichnung und (sehr wichtig) 
alle Kanaleinstellungen (z.B. als Strings, wie die die meisten Oszis sie 
ausgeben) mit ab.

LEler

von Philipp C. (e61_phil) Benutzerseite


Lesenswert?

Franz F. schrieb:
> Pandas ist dein Freund
> https://github.com/pandas-dev/pandas

Vielen Dank, da werde ich mal tiefer einsteigen.


LEler schrieb:
> Ich habe genau soetwas auch mal mit Python + PyVisa gemacht und ein
> numpy-Array mit zwei Spalten verwendet

Ich finde es in LabVIEW halt recht elegant mit t0 und dt, weil so dieses 
Zeiten-Array vollständig mit nur zwei Werten beschrieben ist. 
Andernfalls hat man ja für jeden Y Punkt eine Zeit, die kaum 
Informationen trägt. Und wenn es mehrere Spuren sind, die man speichert, 
dann wird es ja noch unschöner. Klar, kann man eine gemeinsame Zeitachse 
speichern, aber ich möchte eigentlich jede Waveform für sich alleine 
haben, damit man zB zwei beliebige Waveforms an eine Funktion übergeben 
kann. Dabei sollte es dann am Ende egal sein, ob die Waveforms aus zwei 
Spuren des Scopes kommen oder eine aus einer ganz anderen Messung.

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.