LabVIEWForum.de - Signalpunkte selektieren

LabVIEWForum.de

Normale Version: Signalpunkte selektieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo LabVIEW gemeinde,

folgende Situation, ich möchte aus einem Signal ein bestimmte Werte entnehmen und diese zu mehreren kleinen Array´s machen, so das ich anschließend Berechnungen durchführen kann.

Bei dem Signal handelt es sich um ein quasie Rechtecksignal mit einem Rauschen. Für mich interessant sind die Plateaus. Ich möchte von jedem Plateau ein Array bilden und zum Beispiel den Mittelwert errechnen. Aktuell lade ich den "Datensatz" aus einer Datei, in der Realen anwendung Rechne ich mit mehr Daten und die Plateaus werden unterschiedlich viele Werte haben.

Ich habe es jetzt so weit gebracht dass ich zumindestens die steigende, die fallende Flanke und das Plateau im Graphen unterscheiden kann. Doch beim verpacken in ein Array scheitert es grade. Wie "schneide" ich mir die Werte heraus? Habt ihr Ideen wie ich das machen könnte?

Danke für eure Hilfe
Hallo Pre,

Zitat:Ich habe es jetzt so weit gebracht dass ich zumindestens die steigende, die fallende Flanke und das Plateau im Graphen unterscheiden kann.
Das bedeutet, du weißt die Array-Indizes, an der sich jeweils die Flanken und Plateaus befinden.
Und du hast ein Array, in dem alle Werte drinstehen.
Und es gibt da eine Funktion in der Array-Palette, die sich ArraySubset ("Teil-Array") nennt…
Was genau ist dir bei dieser Funktion unklar?

Zu deinem VI: das sieht schon sehr "kompliziert" (nett für "umständlich") aus Big Grin
Warum läuft der Stopp-Button in einer eigenen Schleife? Warum so viele lokale Variablen - bzw. noch schlimmer: Value-PropertyNodes?
Warum verwendest du DeleteFromArray, um ein einzelnes Element aus einem Array zu lesen? Dafür ist doch IndexArray da!
Hallo Gerd,
entschuldige die späte Antwort ich war mit anderen Projekten beschäftigt.

Ja ich habe quasie die interessanten Indizes, jedoch alle interessanten. Meine überlegeung ist, ich muss für jedes mal wenn ein Case true ausgeführt wird die Indezes in ein Array oder irgend eine Datei schreiben, das mache ich solange bis der Case das erste mal wieder false ausgeführt wird. So habe ich die Indezes einer für mich interessanten steigenden Flanke. Nun kann ich mir ja die interessanten Werte aus dem anfangsarray ziehen.

Nur ich weiß leider Nicht wie ich das Umsetzen kann, dass immer wenn ich eine "Truefolge" am Case lese, ich mir ein neues Indize-Array/Datei anlege.
Habt ihr eine Idee, tipps?



Das DeleteFromArray hab ich ersetzt
Das mit den ganzen Schleifen ist durch rum experimentieren entstanden ist natürlich nicht so schön ebenso die PropertyNodes

Danke für die Hilfe Wink
Hallo PreView,

Zitat:Meine überlegeung ist, ich muss für jedes mal wenn ein Case true ausgeführt wird die Indezes in ein Array oder irgend eine Datei schreiben, das mache ich solange bis der Case das erste mal wieder false ausgeführt wird.
Willst du etwa bei deinen boolschen Werten (TRUE/FALSE) erkennen, wann der Wert wechselt? Dafür gibt es die Funktion Pt-By-Pt-BooleanCrossing

Zitat:Nur ich weiß leider Nicht wie ich das Umsetzen kann, dass immer wenn ich eine "Truefolge" am Case lese, ich mir ein neues Indize-Array/Datei anlege.
Man nehme ein Schieberegister, wenn man Werte in einer Schleife zwischenspeichern will…
Willst du etwa bei deinen boolschen Werten (TRUE/FALSE) erkennen, wann der Wert wechselt? Dafür gibt es die Funktion Pt-By-Pt-BooleanCrossing…

Nein die Selektierung hab ich ja schon vorgenommen. Ich habe jetzt mal wieder ein wenig Zeit gefunden und hab noch ein wenig rum Probiert.
So wie ich das jetzt umgesetzt habe bekomme ich ein Array mit allen Plateaus jedes einzelne ist grade, in dem Array durch eine Null getrennt.

Jetzt möchte ich Quasie immer dort wo eine Null ist das Array abschneidet ^^ so das ich zu jedem Plateau ein Array erhalte.

und daran scheitere ich. Ich weiß nicht wie ich die Arrays wie gewünscht zerlegen kann.

Danke für eure Hilfe!
Hallo PreView,

Zitat:Jetzt möchte ich Quasie immer dort wo eine Null ist das Array abschneidet ^^ so das ich zu jedem Plateau ein Array erhalte.
Du brauchst genau zwei Funktionen: Search1DArray und ArraySubset…

Search1DArray nach einer Null suchen lassen, gefundenen Index merken.
Search1DArray nochmal nach einer Null suchen lassen, mit diesem Index und dem gemerkten dann ArraySubset aufrufen!
Hallo GerdW,

deine Hilfe hat mich jetzt schon ein stück weitergebracht Danke Wink
jetzt habe ich das erste Plateau rausgetrennt, nur einen Knoten gilt es jetzt noch zu lösen. Wohin damit? In eine Arrayvariable und für jedes Plateau eine neue Variable? Wenn ja wie kann ich das so gestallten das Automatisch bei jedem Plateau eine neue Variable angelegt wird?

Ziel ist es ja das ich die Werte der einzelnen Plateaus mit einem anderen Plateau vergleichen kann.

Vielen Dank für die Unterstützung!
Hallo PreVIEW,

du willst also in einer Schleife dein Array in mehrere Teilarrays zerlegen und diese irgendwo speichern?

Mal ganz allgemein aus den LabVIEW-Grundlagen:
- um Daten in Schleifen zu speichern, verwendet man Scheiberegister…
- wenn man mehrere gleichartige Daten verwalten will, verwendet man Arrays…

Und dazu noch etwas, was über Grundlagen hinausgeht:
In LabVIEW muss ein Array immer "rechteckig" sein, d.h. alle Spalten/Zeilen/etc. sind immer exakt gleich groß. Wenn du jetzt aber mehrere Arrays unterschiedlicher Größe in einem Array sammeln willst, musst du ein "array of cluster of array" erstellen: das Array im Cluster kann dann jeweils eine andere Größe (nicht Dimension!) haben…

Schmeiße diese drei Tipps jetzt mal zusammen in einen Topf und rühre gut um! Big Grin

Edit: Wenn es bei den Plateaus "nur" um deren "Mittelwert" geht, kannst du dir natürlich das "array of cluster of array" ersparen…
Hallo GerdW,

Auf das mit den Array´s und Schieberegistern bin ich unterdessen auch schon gekommen ^^
habe jetzt ein 2D array mit den Indexen. Nur muss ich jetzt noch iwie die Anzahl der schleifendurchläufe festlegen. Aktuell werden die Daten mehrfach rein geschrieben.
Trotzdem riesen DankWink

ich meld mich wenn ich es vollends gepackt habe ^^
So liebe Gemeinde,

ich kann Erfolg vermelden. Wink
Ob das nun die Eleganteste lösung ist weiß ich nicht, aber es läuft.

Wieder einmal ein großes Dank für die Unterstützung!
Referenz-URLs