LabVIEWForum.de - Intensitäts Plot mit X-Y Koordinaten

LabVIEWForum.de

Normale Version: Intensitäts Plot mit X-Y Koordinaten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe LabView-Community,

ich bin leider noch kompletter LabView Anfänger und stelle grad meine Analyse auf LabView um, da wir hier ein neues Experiment mit neuer Messtechnik planen.

Ausführliche Beschreibung meines Vorhabens:
Zielsetzung ist es verschiedene Schwingungsspektren von verschiedenen Betriebspunkten/Umgebungsparametern miteinander zu vergleichen. Bis dato habe ich dies entweder in spezieller Hersteller Software der "alten" Schwingungsmesstechnik oder mit VBA Macros in Excel berechnet.
Für die Betrachtung muss ich die X-Achse der Spektren normieren und möchte diese dann in einem graphischen Plot darstellen.
Vorher habe ich die Spektren dann einfach zusammen in 2D x-y-Plot dargestellt, was bei 10+ Spektren schon sehr unübersichtlich wird. Diese möchte ich nun mit Zuhilfenahme der 3t dim ausweiten. (x = Frequenz (normiert), y = Testreihe/Betriebspunkt, z = Amplitude)

Testweise bin ich hierfür mit einer Messreihe angefangen und konnte hier auch schon einen recht zufriedenstellenden Intensity-Graph erzeugen. Leider plottet dieser ja aber keine X-Y Koordinaten sondern geht einfach die Arrays Elementweise durch, sodass ich hier als Koordinate die "Indizes" habe.

(so Sieht der Intensität Plot aktuell aus und so sollte das auch in etwas für die 3D Plots später aussehen)
[attachment=55382]

Für die erste Messreihe stellt das noch kein Problem dar, da ich hier für alle Spektren die gleiche X-Achse habe. Wenn ich nun eine zweite Messreihe (mit gleicher sample-size, also Array länge) bei einem anderen Betriebspunkt hinzufüge, verschieben sich die Linien zueinander, die ich vergleichen möchte.
Auf ein kompliziertes scalieren der Sample Size und Interpolieren der Werte würde ich gerne verzichten.

Eigentlich dachte ich, ich könnte einfach ein 3D Surface Plot oder einen 3D Scatter Plot erstellen und mir die X-Y Projektion anschaun, aber das sieht alles noch sehr seltsam aus. Hoffentlich bin ich da auf dem richtigen weg und muss hier eigentlich nur noch die Darstellungselemente (Linenbreite, Punktgröße/Art) anpassen, aber ich finde hier leider keine konkreten Beispiele und wildes herumprobieren hat mich hier noch nicht zum Erfolg gebracht.

3D-Surface Plot
[attachment=55383]
3D-Surface Plot (x-y Projektion)
[attachment=55384]
3D Scatter Plot (x-y Projektion)
[attachment=55385]


Kurzbeschreibung:
Ich möchte Messdaten mit 3 Koordinaten (x = Frequenz (normiert), y = Testreihe/Betriebspunkt, z = Amplitude) in einem Plot darstellen und mir hier die x-y Ebene mit entsprechender Farbgebung für die z-Koordinate angucken. Hierfür brauche ich "echte" Koordinaten und keine Indizes. #Intensity-xy #Colormap

Für eine Lösung mit 3D-Surface und 3D-Scatter Plots (x-y-Projektion) fehlen mir die nötigen Anpassungen der Plot Elemente.
Leider kann ich hierzu nichts konkreten bzw. für mich verständliches finden, was die gewünschte Darstellung ermöglicht.


Ich bin über jede Hilfe sehr dankbar.


Weitere Infos:
LabView 2014 - Service Pack 1
Home and Student Edition (englisch)
Windows 7 32-bit

Eine Vi Poste ich erstmal nicht, weil ich hier recht wild rumprobiert habe und alles furchtbar wirr aussieht. Blush
Falls benötigt erstelle ich ein kleines VI wo ich nur die Intensity plotte.
Hallo Yayde,

Zitat:Ich möchte Messdaten mit 3 Koordinaten (x = Frequenz (normiert), y = Testreihe/Betriebspunkt, z = Amplitude) in einem Plot darstellen und mir hier die x-y Ebene mit entsprechender Farbgebung für die z-Koordinate angucken. Hierfür brauche ich "echte" Koordinaten und keine Indizes. #Intensity-xy #Colormap
Du verwendest eine "normierte" Frequenz? Dann brauchst du doch keine X-Koordinate, sondern einfach nur den X-Index?

Zitat:Auf ein kompliziertes scalieren der Sample Size und Interpolieren der Werte würde ich gerne verzichten.
Der Intensitygraph verlangt aber nun mal X- und Y-Indizes. Wenn du also variable X-Kooridinaten hast, dann musst du wohl skalieren…
Danke schonmal für die schnelle Antwort.

(29.02.2016 12:52 )GerdW schrieb: [ -> ]
Zitat:Ich möchte Messdaten mit 3 Koordinaten (x = Frequenz (normiert), y = Testreihe/Betriebspunkt, z = Amplitude) in einem Plot darstellen und mir hier die x-y Ebene mit entsprechender Farbgebung für die z-Koordinate angucken. Hierfür brauche ich "echte" Koordinaten und keine Indizes. #Intensity-xy #Colormap
Du verwendest eine "normierte" Frequenz? Dann brauchst du doch keine X-Koordinate, sondern einfach nur den X-Index?

Die X-Koordinate ist für jede einzelne Messreihe normiert, nicht aber für die Messreihen untereinander. Bedeutet also, dass ich für unterschiedliche Messreihen unterschiedliche x-Achsen habe und diese trotzdem gerne zusammen plotten möchte.

(29.02.2016 12:52 )GerdW schrieb: [ -> ]
Zitat:Auf ein kompliziertes scalieren der Sample Size und Interpolieren der Werte würde ich gerne verzichten.
Der Intensitygraph verlangt aber nun mal X- und Y-Indizes. Wenn du also variable X-Kooridinaten hast, dann musst du wohl skalieren…

Das habe ich mir gedacht bzw. befürchtet, deswegen hoffte ich ja, dass ich mit den 3D Plots und entsprechender x-y Projektion auf ähnliches Ergebnis komme.
Ich bekomme die Daten auch erstmal geplottet, nur sieht die Projektion nunmal deutlich anders aus als gewünscht.

Als Beispiel vermute ich, dass bei dem Surface Plot die Abstände dx zu klein sind, sodass ich dort nur so komisches dünne Striche sehe (siehe Bild). Ich habe auch schon versucht meine Daten zu doppeln, sodass ich jeden y-Wert doppelt plotte und eine Art Stufe erzeuge ( x1 => y1 und x1+dx/2 => y1). Hier habe ich entweder was im Programm vermurkst oder der Ansatz ist nicht zielführend, da das Bild fast genau so aussieht.

Der Scatter Plot sieht da schon weitaus besser aus. Allerdings sind hier die Punkte standardmäßig als "unausgefüllte" Quadrate dargestellt, was dann in der Projektion in 2Linien pro Messpunkt mit Abstand Quadratbreite/2 endet.
Wenn ich diese Punkte entsprechend auf eine Breite von dx und ausgefüllt bekomme, würde das vielleicht schon mal weiterhelfen.
Allerdings komme ich hier leider noch nicht so ganz mit der NI Hilfe klar und habe dazu nur folgendes gefunden:

http://zone.ni.com/reference/en-XX/help/...b_scatter/
http://zone.ni.com/reference/en-XX/help/...ointstyle/
http://zone.ni.com/reference/en-XX/help/...pointsize/

Und hier verstehe ich eben nicht, wie ich auf diese Eigenschaften zugreife bzw. welche Werte welchen Änderungen entsprechen.
Im Prinzip bräuchte ich also statt Linien, Oberflächen oder Punkte einfach nur ein Bin mit breite dx.

Habe nochmal 3 Bilder für das Surface gemacht. Falls es hilft kann ich das gerne auch für den Scatter nochmal machen.
XZ Ebene (Spektren hintereinander)
[attachment=55386]
3D Ansicht
[attachment=55387]
XY Ebene (erhoffte Intensitätsmap)
[attachment=55388]

Danke nochmals.
Hallo Yayde,

so mache ich das bei einem Intensitychart:
[attachment=55391]
Ich habe eine "normierte" Y-Achse von 0 bis 999*df_scale. Die Werte der FFT sind aber frequenzvariabel (ich arbeite hier nicht mit konstanten Sampleraten) und deshalb suche ich zu jedem Punkt auf der normierten Y-Achse den interpolierten "magnitude"-Wert…
Hallo erstmal Gerd (wie unhöflich von mir, sry),

ich bin im LabView Code lesen leider noch nicht so 100%tig fit, weswegen ich das hier mal "laut" für mich nachvollziehen möchte.

So wie ich deinen Text mit dem dazugehörigem Code lese, definierst du eine neue, "feste" x-Achse (Norm) aus 1000 Werte von (0 bis 999)*df_scale und ermittelst dann per Interpolation aus deinem Ursprungs-x-Array (0-Samplesize)*df den Wert mit dem du dann wiederum den "neuen" Magnituden y-Wert aus deinem Ursprungs-y-Array (Magnitude) interpolierst, logarithmierst und dann im Intensity Graph plottest. (Korrigiere mich hier gerne, falls ich was falsch verstanden habe)

Soweit sieht das gar nicht mal so kompliziert aus. Werde morgen gleich versuchen das für mich einmal nachzubauen.

Allerdings glaube ich, dass ich mir dadurch im schlimmsten Fall meine Daten verfälsche, da ich beim Interpolieren der Amplitude meines Signals tendenziell für meine Peaks geringere Werte bekommen, als in den original Daten. Zumindest war das mein erster (und zweiter) Gedanke, weswegen ich eigentlich um diese Lösung mit Hilfe der 3D Plots und echten XYZ-Koordinaten herum manövrieren wollte. Ich schau mir das ganze nochmal an, vielleicht steh ich auch grad auf dem Schlauch und habe nen Denkfehler in meinen Überlegungen.


Hat denn trotzdem vielleicht jemand eine Idee, wie ich meinen Scatter-Plot anpassen könnte. Bei einem Vorversuch, wo ich die Methode testen wollte, hatte das soweit ganz gut geklappt.
[attachment=55393]

Auch die Idee mit dem Surface Plot schein prinzipiell zu funktionieren, allerdings wohl eben nicht für meine Plots und mit den Standardeinstellungen.
http://forums.ni.com/t5/LabVIEW-Idea-Exc...220#M11408

Ein Link mit "anfängerfreundlicher" Beschreibung oder ein Beispiel wäre schon mal Gold wert.
Hallo Yayde,

Zitat:So wie ich deinen Text mit dem dazugehörigem Code lese, definierst du eine neue, "feste" x-Achse (Norm) aus 1000 Werte von (0 bis 999)*df_scale
Korrekt, ich erwarte Frequenzen bis 999*df (bzw. diese interessieren mich). Als Beispiel nehmen wir mal df=5, d.h. die Frequenzachse geht von 0 bis ~5kHz.

Zitat:und ermittelst dann per Interpolation aus deinem Ursprungs-x-Array (0-Samplesize)*df den Wert
Ich ermittele, wo auf der Frequenzachse der aktuellen FFT-Daten ich mich jeweils befinde. Beispiel: die FFT liefert gerade Frequenzen von 0 bis 8kHz, dann liefert mir die erste Interpolation eine Angabe, bei welchem Index ich mich gerade auf der Frequenzachse bewege. Bei einer Frequenz von z.B. 2kHz bekomme ich die Angabe, dass ich mich bei 25% der Frequenzachse der FFT-Daten befinde, obwohl ich dann schon bei 40% der Frequenzachse des Charts angekommen bin…

Zitat:mit dem du dann wiederum den "neuen" Magnituden y-Wert aus deinem Ursprungs-y-Array (Magnitude) interpolierst
Genau: ich suche mir zum ermittelten X-Index den zugehörigen (interpolierten Y-Wert, in dem Fall die Amplitude der FFT. Diesen Wert stelle ich auf meiner festen Frequenzachse im Intensitychart dar.

Zitat:logarithmierst und dann im Intensity Graph plottest
Der Logarithmus dient nur der besseren Sichtbarkeit der Z-Werte: wenn die Amplituden über 120dB verteilt sind, sieht die Darstellung bei logarithmischer Skalierung einfach besser aus…

Zitat:Bei einem Vorversuch, wo ich die Methode testen wollte, hatte das soweit ganz gut geklappt.
Dann solltest du nicht nur ein Bild des FP, sondern auch dein VI anhängen…
Moin Gerd,

super Erklärung, denke ich komme so allmählich wirklich besser in LV rein.

(29.02.2016 20:11 )GerdW schrieb: [ -> ]
Zitat:Bei einem Vorversuch, wo ich die Methode testen wollte, hatte das soweit ganz gut geklappt.
Dann solltest du nicht nur ein Bild des FP, sondern auch dein VI anhängen…

Tue mich noch etwas schwer mit meinen Programmen, da ich oft irgendwelche Tuts durchgehe und dann noch wild dran rumprobiere.
Aber das Programm sieht einigermaßen ordentlich aus Blink

Habe schon öfter hier im Forum gelesen, dass man auch ältere LV Versionen hochladen soll. Ich hab mal versucht meins als Lv10 abzuspeichern, aber wie ich sehe müsstest du ja auch 2014
haben. Hoffe das ist soweit verwendbar.

[attachment=55399]

[attachment=55400]

Wäre schon super, wenn ich meine Messreihen irgendwie als xyz-Koordinaten-Graph darstellen könnte.
Moin moin,

habe noch ein wenig probiert bin irgendwie über die 3D Plot Properties gestolpert (RK auf die 3D-Plots). Hatte vorher immer versucht über die Property Node die Werte programmiertechnisch zu setzten. Das hat aber wie gesagt immer nicht geklappt, weil ich vermutlich hier die falschen Nodes rausgesucht hatte oder die Parameter dann falsch gesetzt habe.

Über die 3D Plot Properties war's dann ganz leicht.

Da bei meinem Anliegen (gescheite x-y-Projektion) hauptsächlich die Gitter/Meshes das Problemdarstellten habe folgende Änderungen geholfen:
- Graph - Grid Plane - x-y plane visible (disable)
- Lights - enable lightning (disable)

- Surface - Surface - draw mesh (disable)
- wahlweise noch beim Color Mode von Flat shading -> interpolated shading

-Waterfall - Waterfall mode - Lines (line width etwas anpassen)
- Anti-alaising (disable)

Dann noch die Color Maps angepasst und schon sehen meine X-Y Projektionen schon recht zufriedenstellend aus.

Vergleich Intensity (Vorlage)
[attachment=55401]
3D Plots (Projektion) mit x-y-Koordinaten
[attachment=55402]


______________

Sidenote: Allerdings stoße ich nun beim weiteren Hinzufügen von Messreihen (mit anderer x-y-Achse/Skalierung) nun doch auch mit dieser Lösung auf andere kleine Probleme, wo ich auch noch nicht so ganz verstehe, wie genau die 3D Plots "funktionieren". Ich überlege meine Daten doch etwas anders so präparieren, sodass der Intensitätsplot dann ggf. auch wieder interessanter wird.

In den Plots sieht man an der ein oder anderen Stelle auch Abweichungen, die ich mir noch nicht so ganz erklären kann. Ich schau noch in meinem Code, aber glaube, dass dies "Fragmente" der Plot/Interpolationstechnik der Graphen sind und mir das ggf. mehr Ärger einhandelt als eine eigene Interpolation (so wie in Gerds Beispiel).
______________


Klasse wäre tatsächlich, wenn ich in die 3D Plots bzw. den Projektionen nun auch zoomen und/oder mit Cursern arbeiten könnte.
Wenn ich hier mit RK auf die Plots gehe bekomme ich unter Visible Items anders als bei der Intensität keine Graph Palette als Option.

Hat jemand eine Idee wie/ob das geht?

Vielen Dank nochmal
Referenz-URLs