LabVIEWForum.de
Interpolation - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Interpolation (/Thread-Interpolation--12122)



Interpolation - Mr.Beaker - 05.07.2007 10:48

Hey LabVIEWer,

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. Mellow
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.


Interpolation - Mr.Beaker - 05.07.2007 13:08

Habs geschafft!

Sollte interesse bestehen kann ich meine Lösung ja posten.

Nichts desto trotz, dieses Forum is immer eine InspirationTippen


Interpolation - Lucki - 05.07.2007 14:20

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.


Interpolation - Y-P - 05.07.2007 14:38

Lade doch die Lösung mal hoch. Rolleyes

Gruß Markus

' schrieb:Habs geschafft!

Sollte interesse bestehen kann ich meine Lösung ja posten.

Nichts desto trotz, dieses Forum is immer eine InspirationTippen



Interpolation - Mr.Beaker - 06.07.2007 06:41

@Lucki, Irgendwie hab ich noch nicht so die Erfahrung, dass ich solche vorgefertigte Beispiele finde Dry
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.


Interpolation - Lucki - 06.07.2007 07:18

' schrieb:Aber hier mal meine Lösung:
???

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.
[attachment=7305]


Interpolation - Lucki - 06.07.2007 08:32

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:
[attachment=7303]


Interpolation - Mr.Beaker - 06.07.2007 12:10

Meine Lösung is 2 Beiträge weiter oben, da ich heut um 7 Uhr morgens den beitrag editieren wollte, aber noch den ganzen Tag dran rumgebastelt hab.

@Lucki, die Interpolation hab ich jetzt auch gefunden, vielleicht schreib ich damit noch einen dritten Lösungsansatz. Aber danke für den Hinweis!

PS: Irgendwo is in deinem VI der Wurm drin, Lucki. Bereits im gültignn Bereich, Zahlenwerte über oder unter dem Array hab ich noch gar nicht beachtet.


Interpolation - Mr.Beaker - 06.07.2007 12:38

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?


Interpolation - Lucki - 06.07.2007 13:17

' 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":
[attachment=7312]
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.

[attachment=7314]

Habe jetzt keine Zeit, das auf 7.1 runterzustufen.. ---------------> Jetzt ja