LabVIEWForum.de
2D-Array filtern und Interpolieren - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: 2D-Array filtern und Interpolieren (/Thread-2D-Array-filtern-und-Interpolieren)



2D-Array filtern und Interpolieren - Mace - 08.04.2013 10:57

Hallo zusammen,

ich beschäftige mich erst seit zwei Monaten mit Labview aber habe bisher schon viel in diesem Forum anonym gelesen und viele Antworten auf alle möglichen Fragen gefunden und möchte mich dafür recht herzlich bedanken. Für folgende Fragestellung bin ich aber über die Forensuche zu keiner Antwort gekommen...:

Ich möchte Werte aus einem 2D-Array interpolieren (ich lese eine txt.-Datei ein, die Messwerte für X,Y enthält und Ausgangsspannungswerte Vx,Vy. Zum Schluss will ich um einen beliebigen Messwert X,Y zu erreichen die zu stellende Spannung Vx,Vy erhalten). Da dies bei großen Arrays sehr viel Zeit in Anspruch nimmt will ich das Ausgangsarray filtern, bzw. lediglich eine Arte ROI in dem Array für die Interpolation heranziehen.
Ich hänge mein TestVI an sowie eine exemplarische Textdatei mit Messwerten. (Nicht wundern über die dritte Spalte mit der Konstanten, die kommt hier nicht zum Tragen...)
Ich hoffe es ist zunächst einmal ersichtlich, was ich bezwecken will und was das angehängte VI bewirkt...
Nun meine Fragen:
1. Wieso funktioniert die Delete From Array Funktion nicht wirklich? Irgendwie ist das Ausgangsarray nie wirklich gekürzt.
2. Wieso benötigt mein letzter Case, in dem eigentlich nichts passiert, ausser dass das VI beendet wird die meiste Zeit?
3. Habe ich es mir viel zu umständlich gemacht und die ganze Sache ließe sich einfacher / schneller lösen? Big Grin

Viele Grüße
Mace

lv12_img


RE: 2D-Array filtern und Interpolieren - GerdW - 08.04.2013 11:05

Hallo Mace,

ohne dein VI anschauen zu können:
Es gibt eine fertige Funktion "2D Array interpolieren" in der Mathematik-Palette. Die sollte können, was du brauchst. Du musst nur deine Daten (die anscheinend in einem regelmäßigen Gitter vorliegen) entsprechend aufbereiten!

Das hatten wir letztens erst diskutiert, finde den Thread aber gerade nicht...


RE: 2D-Array filtern und Interpolieren - Mace - 08.04.2013 11:29

Hallo GerdW,

danke für die flotte Antwort.
Die Funktion 2D-Interpolieren verwende ich. Diese tut auch prinzipiell was sie soll, ist jedoch langsam, weshalb ich die Filterung vornehmen möchte.
Anbei nochmals das VI als 2011er Version.

Gruß
Mace
lv11_img


RE: 2D-Array filtern und Interpolieren - GerdW - 08.04.2013 11:45

Hallo Mace,

du verwendest die Instanz "gestreut 1D": die dürfte deshalb langsam sein, weil die Daten jedesmal durchsucht werden müssen.

Wie ich schon schrieb: "Du musst nur deine Daten (die anscheinend in einem regelmäßigen Gitter vorliegen) entsprechend aufbereiten!"
Nach erstem Drüberschauen verwendest du ein regelmäßiges Stützpunkte-Gitter für deine Daten, also bereite sie entsprechend als 2D-Kennfeld auf und verwende die nicht-"gestreute" Interpolations-Variante!


RE: 2D-Array filtern und Interpolieren - Mace - 08.04.2013 12:46

Hallo Gerd,

die Daten zu sortieren ist leider nicht so einfach bzw. scheint nicht so viel zu bringen. Ich habe zwar die Ausgangswerte entlang eines Gitters gewählt, die Messwerte verhalten sich aber nur näherungsweise linear dazu. Hinzu kommt, dass aufgrund des Gitters natürlich bei jedem Zeilenwechsel eine Koordinate wieder auf den kleinsten Wert springt - vorausgesetzt man sortiert die gesamte Tabelle nach zwei Spalten jeweils aufsteigend. Die Funktion 2D-Interpolieren erwartet jedoch, dass alle eigehenden Datenreihen monoton sind, das ist demnach nicht erfüllbar und ich kriege lediglich Fehler-Code -20145 raus.


RE: 2D-Array filtern und Interpolieren - GerdW - 08.04.2013 13:07

Hallo Mace,

wie ich schon sagte: die Daten entsprechend aufbereiten. Einfach 2 Spalten zu einem 2D-Array zusammenfügen reicht da nicht aus!

Du hast jeweils 102 Werte pro X- oder Y-Wert (von +5,0 bis -5,1 in 0,1-Schritten). Du brauchst also ein 2D-Array mit 102×102 Z-Werten und jeweils ein 1D-Array mit 102 Werten für X- und Y-Eingang der Funktion.
Dadurch verlagert sich der Zeitbedarf von "jedesmal das große Array durchsuchen" in "einmalig Datenaufbereitung und dann schnell bilinear interpolieren"...

Die Daten sollten in etwa so aufbereitet werden:
[attachment=44240]
(hier für ein kleines Motorkennfeld...)


RE: 2D-Array filtern und Interpolieren - Lucki - 08.04.2013 13:11

Der von Gerd erwähnte Thread war hier


RE: 2D-Array filtern und Interpolieren - Mace - 10.04.2013 10:30

Hallo,

vielen Dank für die Hilfe!

Kurzer Hinweis noch: Da meine gemessenen Daten leider nicht so linear zu den Ausgangswerten passen konnte ich nicht einfach nur die Tabelle herumschubsen. Ich habe mir mit dem oben angehängten VI jetzt einfach ein linearisiertes Raster ausgeben lassen, was dann dem Beitrag von GerdW quasi entspricht. In diesem kann ich nun wunderbar (und sehr performant!) bilinear inerpolieren!

Mace