LabVIEWForum.de
Nächstgelegener Datenpunkt zu Schwellwert finden - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Signaldarstellung (/Forum-Signaldarstellung)
+---- Thema: Nächstgelegener Datenpunkt zu Schwellwert finden (/Thread-Naechstgelegener-Datenpunkt-zu-Schwellwert-finden)



Nächstgelegener Datenpunkt zu Schwellwert finden - sanjo - 26.11.2012 17:35

Hallo zusammen,

ich bin mal wieder auf eure Hilfe angewiesen (LabVIEW2011). Ich kürze es mal soweit es geht ab.

Ich gebe zwei Arrays mit Signalen (z.B. Strom und Spannung) auf einen x/y-Graphen. Nun möchte ich zu einem bestimmten x-Wert (Strom) den passenden y-Wert (Spannung) erhalten. Einfachster Fall war z.B. finde den y-Wert zum maximalen x-Wert (also die Spannung, welche beim größten Strom anliegt). Dieser Fall war noch sehr einfach, ich habe den min/max Baustein verwendet und über den Index den passenden Wert aus dem anderen Array erhalten.

Ich suche jedoch einen beliebigen Wert (nicht den maximalen o.ä.), wie gehe ich da vor. Beispiel, finde den y-Wert zu x = 3. Problem an der Sache ist, wahrscheinlich gibt es den x-Wert 3 so gar nicht, sondern nur einen Wert der sich einmal links und einmal rechts neben der 3 befindet. Und um das ganze jetzt ganz schlimm zu machen, die Stützstellen sind je nach Einstellung unterschiedlich weit entfernt, so dass es für mich auf Anhieb nicht möglich war, den Treshold-Baustein zu verwenden, da dieser eine Breite als Input fordert. Alternativ könnte ich das Array sortieren und über Differenzbildung den Wert raussuchen, der
am nächsten an der 3 dran ist, aber da es hier auch etwas auf Performance ankommt und ich nicht zu viel Hick-Hack ins Programm bringen möchte, dachte ich, es gibt evtl. eine elegantere Lösung.

Ich bin ernsthaft überfragt und hoffe, mir kann geholfen werden.

PS.: Sorry für die spärliche Beschreibung, ich hoffe, ihr versteht, was ich meine.

Danke und Gruß
Sanjo


RE: Nächstgelegener Datenpunkt zu Schwellwert finden - Lucki - 26.11.2012 18:56

Dieses VI
[attachment=42370]
Ist haargenau maßgeschneidert für Dein Problem. Leider wird da oft nur der orangene Anschlussdraht für DBL-Array gesehen und nicht beachtet, dass es im Text der beiden Eingangsbeschreibungen jeweils noch ein "oder" gibt.
Also bei Dir: oben links Punktarray anschließen, wobei die Punktelemente Clusters [x;y] sind. Die x müssem nicht äquidistant sein, aber monoton nach oben laufen.
An den unteren Eingang das x anschließen, für das das y ausgegeben oder interpoliert werden soll. (letzteres: wenn x nicht im Punktarray vorkommt)


RE: Nächstgelegener Datenpunkt zu Schwellwert finden - sanjo - 27.11.2012 09:33

Hallo Lucki,

danke für deine Antwort! Leider konnte ich daraus nicht wirklich einen Nutzen ziehen. Erstens kann ich nicht garantieren, dass die x-Werte monton steigend sind, zweitens habe ich mir diesen Block angeschaut und ein Cluster (du meinst aus zwei Arrays?) lässt sich nicht anschließen, lediglich ein 1D-Arrray und als Ergebnis erhalten ich dann den x-Wert bzw. den interpolierten x-Wert, welcher in meinem Falle lediglich den Index des Arrays darstellt. OK, mit diesem Index ließe sich dann an das zweite Array gehen, jedoch nur, wenn x ganzzahlig, also nicht interpoliert ist, oder?

Ich versuche das Problem vllt. anders zu beschreiben: Finde den/die Datenpunkte, welche am nächsten an einer vorgebenen Schwelle liegt.

Beispiel: Schwelle = 3; Datensatz = [2,8; 3,98; 3,4; 2,6; 2,99; 3,09; 3,01]

In diesem Fall soll die Routine 2,99 und 3,01 ausspucken, am besten mit Index, damit ich im nächsten Schritt dann aus einem zweiten Datensatz = [10; 50; 60; 30; 40; 20; 10] die Werte 40 und 10 erhalte.

Ich hoffe, ich konnte es verständlicher machen.

Gruß
Sanjo


RE: Nächstgelegener Datenpunkt zu Schwellwert finden - GerdW - 27.11.2012 09:38

Hallo Sanjo,

nein, hier war nicht die Rede von einem Cluster aus zwei Arrays...

Zu deinen Fragen:
[attachment=42375]
Statt "1D-Array durchsuchen" muss natürlich "1D-Array Schwellwert" oder "1D-Array Interpolieren" verwendet werden. Beide kommen mit gebrochenen Eingangswerten klar...


RE: Nächstgelegener Datenpunkt zu Schwellwert finden - Lucki - 27.11.2012 18:57

(27.11.2012 09:33 )sanjo schrieb:  Ich hoffe, ich konnte es verständlicher machen.
Das ja, und es ist damit kein Problem, für das genannte Beispiel das entsprechende Programm zu machen. Es ist allerdings so, dass man sich Szenarien ausdenlen kann, wo das zu Willkürlichkeiten und logischen Konflikten führt.
Dass in dem Interpolations-VI die X-Werte monoton sein müssen, ist keine Enschränkung, die sich NI schikanöserweise ausgedacht hat, sondern hat den Grund, dass nur so eindeutige Ergebnisse möglich sind.

[attachment=42391]


RE: Nächstgelegener Datenpunkt zu Schwellwert finden - sanjo - 28.11.2012 10:09

Wollte denen da nichts unterstellen, es ist leider so, dass ich nicht garantieren kann, dass die Werte monoton steigend sind Verdacht (Die Smileys hier sind im Übrigen der Wahmsinn :-D).

Habe es mit Hilfe eines Kollegen im Übrigen etwas anders gelöst (Siehe Anhang), man subtrahiert den Schwellwert und prüft auf Nulldurchgang bzw. Vorzeichenwechsel, wobei mir dieser Kollege auch gezeigt hat, dass es hierzu ein fertiges SubVI in LV2011 gibt (siehe Bild im Anhang). Habe das jetzt aber nicht mehr ausprobiert.

Danke für die Hilfe!

Gruß
Sanjo