LabVIEWForum.de
Gauss Darstellen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Signaldarstellung (/Forum-Signaldarstellung)
+---- Thema: Gauss Darstellen (/Thread-Gauss-Darstellen)



Gauss Darstellen - serge87 - 24.07.2014 18:02

Hallo zusammen.
Ich bin gerade dabei meine LabView Fähigkeiten etwas aufzubessern und neues dazuzulernen. Was ich nun machen wollte, ist eine Gauss Funktion mithilfe eines zufallsgenerators darzustellen. Unten habe ich mein aktuelles VI angehängt.

[attachment=50393]

Die Grundidee ist relativ simpel: Es soll 1000 mal eine zufallszahl zwischen 0 und 1 generiert werden. Wenn die Zahl grösser gleich 0.5 ist, wird der counter eins hochgezählt und am schluss erreicht der counter einen bestimmten wert, zB 502. Dieser vorgang wird dann immer und immer wieder wiederholt (innerhalb einer while loop). Nun scheitere ich aber daran, diese zahlen des counters weiterzuverarbeiten. Eigentlich wollte ich diese in ein array schreiben, dass am ende irgendwie ausschaut wie [455,487,576,502,499,487,544,519,488...... etc], und dieses array will ich dann in einem histogramm darstellen. Wie man aber bei meinem VI erkennt, kann ich den datenfluss vom shiftregister nicht zum array weitergeführt werden.

kann mir jemand einen tipp geben, wie ich mein "array-problem" lösen kann?

liebe grüsse
Serge


RE: Gauss Darstellen - jg - 24.07.2014 19:04

Du brauchst noch:

- Entweder ein Shift-Register in der äußeren While-Loop + Build-Array
- Oder das Array außerhalb der While-Loop inkl. AutoIndexing

Gruß, Jens

P.S.: Und außerdem brauchst du eine neue Tastatur, da scheint die Hochstelltaste nicht richtig zu funktionieren (vgl. LVF-Regeln). Wink


RE: Gauss Darstellen - GerdW - 24.07.2014 20:16

Hallo Serge,

so sollte dein Ergebnis in etwa aussehen:
[attachment=50400]
Hier mit Autoindizierung, polymorpher Arrayverarbeitung, fertigen Funktionen aus der Mathematik-Palette…


RE: Gauss Darstellen - serge87 - 24.07.2014 22:23

Liebe Leute
Danke erstmal für eure sehr hilfreichen Antworten. Jens, dein erster Vorschlag mit dem Shiftregister in der While-Loop habe ich nicht genau verstanden. Ich wäre hier noch für eine etwas genauere Hilfestellung dankbar. Was muss ich shiften und wo kommt der build-array hin?
Den zweiten Vorschlag konnte ich hingegen realisieren.

[attachment=50404]

Schaut bei mir so aus und klappt allem Anschein nach sehr gut Smile. Hab richtig Freude dass es klappt. Danke

@Gerd: Danke auch für deinen Vorschlag, werde ihn mir noch genau anschauen. Bin ja froh verschiedene Wege zur Lösung kennenzulernen.

Eine Kleinigkeit wäre noch: So als "Showeffekt" fände ich es noch cool, wenn sich der Gauss so "Step-by-Step" aufbauen würde. Also dass nicht am Ende der Loop grad alles aufs mal dargestellt wird. Bin überzeugt dass es auch hierfür eine Lösung gibt. Ist das hinzubekommen mit einfachen Mitteln oder wäre das schon Fortgeschrittenenniveau?

danke nochmals
Serge


Edit: Gerd, ich habe deine Lösung nun ebenfalls implementiert und funktioniert wunderbar. Etwas einfacher als mein Ansatz, gefällt mir Smile


RE: Gauss Darstellen - serge87 - 24.07.2014 23:06

Sorry, ich bins nochmal. Ich habe mich nun noch an einer Methode für den "Live-Gauss" (siehe oben) versucht. Leider klappts noch nicht. So schaut mein VI aus:

[attachment=50405]

Den kritischen Teil habe ich mit dem Lasso markiert. Meine Idee: Ich initialisiere einen neuen Array mit 2000 Einträgen welche zu beginn alle auf "0" sind. Nun versuche ich mithilfe des "Insert to Array" das Ergebnis der Summe in diesen Array zu schreiben, wobei ich für den Index den Loop Count der äusseren Schlaufe benütze. Würde für mich so sinn machen, leider klappt es aber nicht. Als ergebniss bekomme ich im Histogramm einen Balken beim Wert 0 mit 2000 counts. Schein also so als ob die Werte nicht eingelesen werden?

gruss
Serge


RE: Gauss Darstellen - jg - 25.07.2014 06:56

Für Live Darstellung musst du das Array IN der Whike Loop erstellen (Think Dataflow).
Das heißt, du brauchst ein Shift-Register an der While Loop, um das Array immer wieder an den nächsten Schleifen Durchlauf weiterzugeben, und du brauchst ein Build Array in der While Loop, um den letzten an das Array anzuhängen.

Gruß, Jens


RE: Gauss Darstellen - GerdW - 25.07.2014 08:02

Hallo Serge,

Zitat:Meine Idee: Ich initialisiere einen neuen Array mit 2000 Einträgen welche zu beginn alle auf "0" sind. Nun versuche ich mithilfe des "Insert to Array" das Ergebnis der Summe in diesen Array zu schreiben, wobei ich für den Index den Loop Count der äusseren Schlaufe benütze.
Codeanalyse anhand deines Bildes:
- Warum eine While-Loop, wenn du genau 2000 Iterationen luafen lassen willst? Wann immer man eine genau definierte Anzahl Iterationen benötigt, nimmt man eine FOR-Loop!
- Warum stoppst du die While-Loop erst in der 2001. Iteration (mittels Vergleich i==2000)? Indices fangen immer bei Null an zu zählen!
- THINK DATAFLOW: Warum initialisierst du in jeder Iteration erneut ein Array mit 2000 Nullen?
- THINK DATAFLOW: Warum verwendest du InsertIntoArray, wenn du einen Wert an einer bestimmten Stelle im Array eintragen willst? Nimm ReplaceArraySubset, um die vorher initialisierte Null durch deinen Wert zu ersetzen!

Zitat:Würde für mich so sinn machen, leider klappt es aber nicht.
THINK DATAFLOW! Und tue dir die Links in meiner Signatur an…

Jens gab schon viele gute Hinweise zum richtigen Aufbau dieses simplen VIs!


RE: Gauss Darstellen - serge87 - 25.07.2014 16:38

Danke für eure Antworten. Ich werde mich also erstmal durch die Links durcharbeiten. Angel_not

Grüsse
Serge