Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich bräuchte ein Funktion, die mir aus einem Array den Index (bzw. gebrochenen Index) jenes ersten Wertes angibt, der genau mit dem davor definierten Wert übereinstimmt. Sprich ähnlich dem Schwellwert VI, nur das mein Graph aus dem Array sowohl fallend und steigend sein darf.
Und eigentlich mit der Zusatzbedingung, dass der Wert bei dem ausgegebene Index kein Maximum oder Minimum meines Graphen ist. (Was passieren könnte wenn der Punkt zufällig genau meinem definiertem Wert entspricht.
Gibt es so eine Funktion, bzw. wie kann ich mir so eine Funktion selber programmieren? (Bin leider noch nicht so ganz fit in Labview)
(07.09.2022 10:56 )giwreh schrieb: Ich bräuchte ein Funktion, die mir aus einem Array den Index (bzw. gebrochenen Index) jenes ersten Wertes angibt, der genau mit dem davor definierten Wert übereinstimmt.
Was denn? "gebrochenen Index" oder "der genau mit dem davor definierten Wert"
Der Graph ist auch nicht zweifelsfrei, denn nach meinem bisherigen Verständnis gibt es doch am Ende noch einen Punkt bei dem der definierte Wert überschritten wird.
Zitat:Sprich ähnlich dem Schwellwert VI, nur das mein Graph aus dem Array sowohl fallend und steigend sein darf.
Wenn du das Array von hinten nach vorne betrachtest, wird aus fallen ein steigend und umgekehrt.
Zitat:Und eigentlich mit der Zusatzbedingung, dass der Wert bei dem ausgegebene Index kein Maximum oder Minimum meines Graphen ist. (Was passieren könnte wenn der Punkt zufällig genau meinem definiertem Wert entspricht.
Zwei Fließkommazahlen auf Gleichheit zu prüfen ist eher keine gute Idee, denn dabei spielen allerkleinste Abweichungen eine Rolle ob die Zahlen gleich sind, oder nicht.
Zitat:Gibt es so eine Funktion, bzw. wie kann ich mir so eine Funktion selber programmieren? (Bin leider noch nicht so ganz fit in Labview)
Das Wichtigste hast du schon gefunden: Threshold 1D Array
Und die Maxima und Minima lassen sich z.B. mit dem Peak Detektor finden.
Zitat:Ich bräuchte ein Funktion, die mir aus einem Array den Index (bzw. gebrochenen Index) jenes ersten Wertes angibt, der genau mit dem davor definierten Wert übereinstimmt. Sprich ähnlich dem Schwellwert VI, nur das mein Graph aus dem Array sowohl fallend und steigend sein darf.
Und eigentlich mit der Zusatzbedingung, dass der Wert bei dem ausgegebene Index kein Maximum oder Minimum meines Graphen ist. (Was passieren könnte wenn der Punkt zufällig genau meinem definiertem Wert entspricht.
- Was unterscheidet den "zu ignorierenden" Punkt vom eigentlich" gesuchten? Der "zu ignorierende" ist doch auch kein (absolutes) Minimum deines Arrays!?
- Wie genau ist "genau übereinstimmen"? Du weißt um die Probleme beim Testen von FloatingPoint-Zahlen auf Gleichheit?
Prinzipiell kannst du alles programmieren, was du willst!
Du musst nur deinen Algorithmus sauber formulieren…
Zitat: Was denn? "gebrochenen Index" oder "der genau mit dem davor definierten Wert"
Der Graph ist auch nicht zweifelsfrei, denn nach meinem bisherigen Verständnis gibt es doch am Ende noch einen Punkt bei dem der definierte Wert überschritten wird.
Ich brauch den gebrochenen Index da es in meinem Fall eigentlich fast immer um einen interpolierten Wert gehen wird. Beispiel: Array [1;3;4;3;6] und ich möchte wissen, bei welchem Index die 3,4 Horizontale geschnitten wird. Da wäre der Index dann 1,4.
Es geht mir immer nur um den 1. Wert, alles danach interessiert mich nicht mehr. Da komme in meinem Verlauf noch viele Schnittpunkte.
Zitat: Wenn du das Array von hinten nach vorne betrachtest, wird aus fallen ein steigend und umgekehrt.
Das geht eben leider nicht, da dahinter noch x-beliebig viele Schnittpunkte kommen. Drum muss ich das Array von vorne durchlaufen. Da brauch ich den ersten Schnittpunkt, egal ob steigende oder fallende Gerade.
Zitat:Das Wichtigste hast du schon gefunden: Threshold 1D Array
Und die Maxima und Minima lassen sich z.B. mit dem Peak Detektor finden.
Treshold 1D Array funkioniert, wenn ich das richig verstanden habe doch nur, wenn ich einen Wert suche, der auch im Array enthalten ist. Ich suche aber einen (in 99% der Fällen) interpolierten Wert- also wie bei Schwellwert.
Peak Detektor gibt mir nur das globale Maxima und Minima aus. Ich brauche aber das 1. lokale Maxima oder Minima nach dem mein Graph meinen definierten Wert geschnitten hat.
Zitat: Was unterscheidet den "zu ignorierenden" Punkt vom eigentlich" gesuchten? Der "zu ignorierende" ist doch auch kein (absolutes) Minimum deines Arrays!?
- Wie genau ist "genau übereinstimmen"? Du weißt um die Probleme beim Testen von FloatingPoint-Zahlen auf Gleichheit?
-Der zu ignorierende Punkt ist ein lokales Minimum genau auf meinem Wert. Ich brauch vor und nach dem Schnittpunkt Werte in meinem Array.
- Das ich den Punkt suche, wo mein interpolierter Graph sich mit meiner Horizontalen schneidet.
Zitat:Prinzipiell kannst du alles programmieren, was du willst!
Du musst nur deinen Algorithmus sauber formulieren…
Und man muss wissen, wie man es eben macht- da steh ich grad an.
könntest du bitte ein Beispiel-VI geben mit folgenden Informationen:
- den einzelnen Punkten (X/Y)
- wo die threshold Linie liegen soll, bei welchem Wert
- was du als Ergebnis sehen möchtest
Zitat: Wenn du das Array von hinten nach vorne betrachtest, wird aus fallen ein steigend und umgekehrt.
Das geht eben leider nicht, da dahinter noch x-beliebig viele Schnittpunkte kommen. Drum muss ich das Array von vorne durchlaufen. Da brauch ich den ersten Schnittpunkt, egal ob steigende oder fallende Gerade.
Anstatt die Reihenfolge des Array zu ändern kannst du auch Threshold und Array negieren.
Martin Henz
Anzeige
08.09.2022, 08:27 (Dieser Beitrag wurde zuletzt bearbeitet: 08.09.2022 08:35 von giwreh.)
Zitat:Anstatt die Reihenfolge des Array zu ändern kannst du auch Threshold und Array negieren.
Das mit dem negieren funktioniert leider auch nicht, da ich auf meinem Messsignal Schwingungen habe (hier bei dem simulieren Signal hab ich mir diese gespart)
Signal wird dann ungefähr so ausschauen wie das Bild im Anhang
Ich habe folgendes VI. Das simulierte Signal wird später noch durch ein Messsignal ersetzt. Jetzt hier nur mal als Beispiel. Das spätere Signal wird aus einem Signal mit ungefähr 100Hz Abtastfrequenz sein und über 30 Sekunden gemessen.
Aber der Verlauf ist gleich. (Am Anfang schwingungen, dann ein Peak und dann Endschwingungen die höher liegen als am Anfang)
Bei dem Signal will ich nun bei dem Horizontalen Wert 1,986 alle Schnittpunkte nach dem Peak wissen. Sprich ich brauch von jedem dieser Schnittpunkte den gebrochenen Index. Mit der Funktion Schwellwert geht dies allerdings nicht, da, wie schon gesagt der Graph erst fallend ist.
Threshold 1D Array funktioniert schon, nur musst du natürlich noch diese kleinen Peaks detektieren oder herausfiltern. Aber auch wenn du nicht Threshold 1D Array verwendest, hast du immer auch diese Peaks und evtl. ein Signalrauschen, das zusätzliche Maßnahmen oder ganz andere Ansätze erforderlich macht.
Simulierte Daten helfen an der Stelle nur dann weiter, wenn sie den realen Daten sehr nahe kommen. Da nutzen 25 rausch- und peakfreie Werte gar nichts, wenn es real 3000 Werte mit Rauschen und Peaks sind.
Außerdem brauchen wir viel mehr Informationen. Du schreibst, dass später das Signal mit ungefähr 100 Samples pro Sekunde aufgenommen wird. Geht es auch sehr viel schneller (1000 S/s?) und was bedeudet das "ungefähr"? Und das mit dem Messwert der genau dem Schwellwert entspricht, das kannst du auch ganz schnell vergessen, bzw. musst es ganz anders definieren.
Und dann solltest du uns auch alles erzählen, was wir benötigen um die weiterzuhelfen und bis jetzt noch nicht erfahren haben.
BTW: an alle die Fragen haben: Es ist sehr ärgerlich, wenn jede einzelne Information nur sehr zögerlich und erst nach zig Postings heraus kommen. Da machen sich alle möglichen Leute Gedanken darüber und das stellt sich dann als sinnfreie Zeitverschwendung heraus.
Ich habe mich noch erinnert, dass in dem Buch "Messdatenanalyse mit LabView" auch etwas dazu stehen könnte...
Da habe ich mal nachgeschaut und was gefunden:
siehe Anhang
Es liefert zwar keinen gebrochenen Index, aber das könntest du ja programmieren ;-)