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!
Bin grad dabei ein Programm zu schreiben, das mir jeweils 2 Werte interpoliert und das in 3 facher Auführung. Jetzt hab ich aber irgendwie einen Knoten im Kopf und komm nicht drauf wie ich das realisieren soll.
Problem: (Fall: Mathematisch) Ich habe einen 1D Array, der meiner x-Achse entspricht, und selbiges für die y-Achse. Das ganze spannt eine 2D matrix auf, in der ich die Werte willkürlich setzen darf. Jetzt kommen die Eingangssignale, wobei die 1D-Arrays durchsucht werden auf einen kleineren und größeren Index, da die Eingangssignale ja nicht unbedingt den Stützstellen entsprechen müssen. Jetzt soll das ganze interpoliert werden mit Hilfe der Stützstellen aus den Arrays. Wie könnte ich das denn realisieren?
Oder hab ich da jetzt grundsätzlich ein Verständnisproblem? Meine Lösung samt VI (V.7.2) poste ich gleich mal mit, da kann man dann auch den zweiten rechenansatz sehen, bei dem ich das Problem mit einem Algorithmus gelöst hab (sollte richtig sein) (Fall: IC-Spec).
Hoffe das war einigermaßen verständlich.
Bei Unklarheiten bitte einfach Fragen.
(Die Werte, die im Frontpanel stehen hab ich manuell eingegeben und können zur Funktionsprüfung beliebig gewählt werden)
Gruß
Georg
PS: Die zwei case-structures sind nur für mich nebeneinander, damit ich die beiden Fälle simulatn vergleichen kann. Darum auch oben und unten die gleiche Werte.
Ja, das ist nicht schwer. Mit dem VI "Schwellwert", mit angeschlossenem X-Array, findet man einen krummen Indexwert, der dem Eingangswert x entspricht, und geht damit in das VI "Interpolieren" hinein, an dem das Y - Array angeschlossen sind, und findet den zugehörigen Wert y.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Interpolation
Lade doch die Lösung mal hoch.
Gruß Markus
' schrieb:Habs geschafft!
Sollte interesse bestehen kann ich meine Lösung ja posten.
Nichts desto trotz, dieses Forum is immer eine Inspiration
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
06.07.2007, 06:41 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2007 12:12 von Mr.Beaker.)
@Lucki, Irgendwie hab ich noch nicht so die Erfahrung, dass ich solche vorgefertigte Beispiele finde
Hab jetzt heut auch nochmal den halben Tag mit Fehlersuche verbracht, dürfte es aber hinbekommen haben.
Aber hier mal meine Lösung samt SubVI:
Für (konstruktive) Kritik, Anregungen, Wünsche bin ich jederzeit dankbar!
Gruß
Georg
PS: Wenn man das Frontpanel und die Werte betrachtet, dann erkennt man genau einen der wenigen Fälle, bei dem Logarithmus und Mathematischer Ansatz um 1 abweichen. Ich vermute das ist eine Ungenauigkeit beim Algorithmus, kanns aber nicht 100%ig sagen.
06.07.2007, 07:18 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2007 07:32 von Lucki.)
Du irrst, es handelt sich hier nicht um "vorgefertigte Beispiele", sondern um normale Array-Funktionen, die allerdings maßgeschneidert zu dem Problem passen.
Mein Vorschlag beinhaltet aber nur eine primitive lineare Interpolation zwischen benachbarten x- und y Werten. (Bedingung: die x-Werte müssen monoton aufsteigen). Die Funktionen findet man unter Arrays. Ich weiß nicht, ob Dir das genügt. Ansonsten könnte man mittels Spline-Interpolation die Sache noch verfeinern.
Wenn nicht, dann schicke doch mal typische Datenpunkte, am besten schon als XY-Graph.
Anzeige
06.07.2007, 08:32 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2007 09:10 von Lucki.)
Sehe gerade, daß mein Beispiel nicht passt. Das hast ja eine Funktion z(x,y) bzw. die Stützstellen davon. Ich nahm aber an, es handele sich sich nur um eine Funktion y(x).
Dein VI läuft nicht, es fehlen Sub.VIs (Die sind wahrscheinlich für das Problem nicht relevant, aber warum bereitest Du dann nicht selbst ein abgespecktes VI auf und mutest diese Arbeit denen zu, die Dir helfen wollen).
Für die Eprom-Inhalte fehlt die "Typ-Definition"
Außerdem fehlen darin die Werte. Damit diese gespeichert bleiben, hättest Du mit der rechten Maustaste "Datenoperationen/aktuellen Wert als Standard" klicken sollen.
Die Interpolation von z(x,y) würde etwas so aussehen:
06.07.2007, 12:10 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2007 12:31 von Mr.Beaker.)
' schrieb:Die "For-Loop" versteh ich nicht ganz, für was brauchst du die denn? Es erhöht sich doch nichts und es wird auch nichts ins Shift-Register übergeben?
Es wird wir ein Array berechnet und übergeben, das kann man doch gar nicht übersehen, oder ist das für Dich nichts?
Ich schließe dieses Array mal an eine Anzeige an, und nenne es "Array":
Beispiel: T=3, Q=3.
Im ersten Schritt wird für Q=3 das Array berechnet. Wäre Q=2, dann wäre das Array identisch mit der ersten Spalte der Matrix. Bei Q=3 sind es alle interpolierten Werte der Matrix zwischen erster und zweiter Spalte. (Es wird also eine zusätzliche Spalte der Matrix berechnet (interpoliert) , die für den Wert Q=3 maßgeschneidert ist)
Wenn man dieses Array hat, dann muß man nur noch in diesem Array für T=3 Interpolieren.
Habe mir Dein VI angeschaut und lauffähig gemacht. Der Wert "Output-Digital-Value" ist offenbar richtig, wenn man von Rundungsfehlern wegen Ganzzahl-Benutzung absieht. Der Gehirnschmalz, den Du da reingesteckt hat, ist aber ganz enorm, und das kann man sich durch clevere Verwendung der richtigen Funktionen wirklich ersparen.
Damit Du selbst mal vergleichen kannst, Hier Dein VI so wie ich es benutzt habe.
Habe jetzt keine Zeit, das auf 7.1 runterzustufen.. ---------------> Jetzt ja