Guten Tag,
ich bin quasi neu bei LabVIEW und habe bisher nur mit Matlab/Simulink gearbeitet. Dort habe ich auch ein Extended Kalman Filter (EKF) entworfen. mit den sogenannten m-functions geht das ganz gut. Nun möchte ich auch in LabVIEW ein EKF enwerfen.
Kennt jemand Möglichkeiten?
Im Grunde müsste ich ja selbst geschriebene Scripte/Codes in ein Block Diagramm integrieren können.
Und wie fit LabVIEW in der Matrizenrechnung ist weiß ich auch nicht.
Es wäre schön, wenn mir jemand über Möglichkeiten Auskunft geben könnte.
Vllt hat ja jemand auch Erfahrung mit der Entwicklung eines EKFs oder vergleichbarem.
Vielen Dank und Gruß
Heber
Hallo Heber,
herzlich willkommen im Forum!
Zitat:Im Grunde müsste ich ja selbst geschriebene Scripte/Codes in ein Block Diagramm integrieren können.
Das hört sich an, als wenn du subVIs erstellen willst…
Die Grundlagen (wie in den Links in meiner Signatur) kennst du?
Zitat:Und wie fit LabVIEW in der Matrizenrechnung ist weiß ich auch nicht.
Es gibt eine ganze Palette ausschließlich mit Matrix-Funktionen:
[
attachment=57628]
Lass dich nicht vom Term "Matrix" verwirren: das sind in LabVIEW erstmal nur 2D-Arrays, mit denen du rechnen kannst.
Die speziellen Matrix-Funktionen nutzen den "Matrix"-Datentyp, der im Grunde nur ein 2D-Array anders "verkleidet"…
(12.04.2017 14:51 )Heber schrieb: [ -> ]Im Grunde müsste ich ja selbst geschriebene Scripte/Codes in ein Block Diagramm integrieren können.
Ich verstehe dass eher so, dass Heber einen konfigurierbaren EKF haben möchte, der in verschiedenen Projekten zum Einsatz kommt und dem er dann verschiedene Funktionen für die Zustandsübergänge übergeben kann. Er würde dann eine Möglichkeit suchen, einen wie auch immer definiertes Stück Code automatisch einzulesen und auszuführen.
Wenn dem so ist:
- eval Funtkion. Kann als String übergebene Formeln auswerten, k.A. ob das dafür mächtig genung ist.
-
Lua-Binding und deine Funktionen als Lua-Script schreiben.
Und noch ein Hinweis: Du kannst aus LabVIEW heraus auch
MatLab-Scripte aufrufen und so deinen vorhanden EKF einfach weiterbenutzen.
Thomas
Hallo zusammen,
fürs Erste vielen Dank für eure Antworten.
Vllt sollte ich nochmal etwas dazu schreiben, was ich genau machen möchte.
Also ich möchte Messwerte einlesen und mit diesen meine Zustandsgrößen des Systems berechnen. Dazu ist es nötig beginnend mit einem Startwert der Zustandsgrößen (ZG) in jedem Abtastschritt k eine Schätzung der ZG auszugeben. Dazu wird ein Algorithmus benutzt. Im Grunde ist das Matrizenrechnung. Die Herausforderung beim Extended Kalman Filter (EKF) liegt im Gegensatz zum gewöhnlichen Kalman Filter (KF) darin, dass beim EKF die Matrizen nicht mehr konstant sind. Vielmehr wird in jedem Schritt k der aktuelle geschätzte ZG Wert in die Matrizen eingesetzt, weshalb das System auch nur dann linear ist. Die aktuellen Werte der Matrizen im Schritt k werden im k+1 Schritt wieder als Startwerte benötigt.
Ich habe auch schon an was ähnliches zu Lua gedacht. Vllt könnteScilab mir helfen, da hier die Syntax ähnlich zu Matlab ist und es Scilab Knoten in Labview gibt.
Ich habe Matlab und Labview nicht auf einem Rechner. Als Student habe ich Matlab und in der Firma Labview
Ist das mit Lua den kostanlos?
Viele Grüße,
Heber
Hallo Heber,
Zitat:Die aktuellen Werte der Matrizen im Schritt k werden im k+1 Schritt wieder als Startwerte benötigt.
Um Werte aus einer Iteration in die nächste weiterzureichen, verwendet man Schieberegister. (Einfach mal die LabVIEW-Grundlagen aneignen!)
Ich sehe noch keinen Grund, hier mit mehreren Programmierumgebungen parallel zu arbeiten…
Naja wie bereits vermutet macht die Matrizenrechnung von Labview gleich zu Beginn Probleme.
Ich benötige eine mehrdimensionale Konstante und habe dafür eine Array Konstante verwendet.
Die Array Konstante soll mit einer Matrix multipliziert werden...
Wähle ich eine Multiplikationsstelle aus, erfolgt folgende Meldung "Sie haben zwei Elemente unterschiedlichen Typs miteinander verbunden".
Ich brache eigentlich nur eine mehrdimensionale Konstante [a0; a1], die mit einer 4x2 Matrix H (H = [h11 h12;h21 h22;h31 h32;h41 h42] multipliziert werden muss.
Kann mir da vorab jemand helfen?
Vielen Dank,
Heber
Hallo Heber,
Zitat:Ich benötige eine mehrdimensionale Konstante und habe dafür eine Array Konstante verwendet.
Was bedeutet "mehrdimensional"???
Zitat:Wähle ich eine Multiplikationsstelle aus
Was ist eine Multiplikations
stelle? Welche Funktion hast du da gewählt?
(Tipp: Wenn du nicht weißt, wie eine Funktion heißt, dann solltest du einfach mal die Kontexthilfe mit Ctrl-H öffnen.)
Zitat:Ich brache eigentlich nur eine mehrdimensionale Konstante [a0; a1], die mit einer 4x2 Matrix H (H = [h11 h12;h21 h22;h31 h32;h41 h42] multipliziert werden muss.
Du willst also einen Vektor (=1D-Array) mit einer "Matrix" (=2D-Array) multiplizieren?
Dann mach das doch:
[
attachment=57654]
Tipp: Es wäre so viel einfacher, dir zu antworten, wenn du ein VI (bitte in LV2014) oder ein Snippet anhängen würdest!
(18.04.2017 11:57 )Heber schrieb: [ -> ]Ich brache eigentlich nur eine mehrdimensionale Konstante [a0; a1], die mit einer 4x2 Matrix H (H = [h11 h12;h21 h22;h31 h32;h41 h42] multipliziert werden muss.
Deine "mehrdimensionale Konstante" ist schlichtweg eindimensional - geschenkt.
Aber: Einen Vektor mit einer Matrix zu multiplizieren, macht das überhaupt Sinn? Ich kenne es nur umgekehrt, so wie in Gerds Lösung.
Allgemeiner Tip:
Labview unterscheidet nicht zwischen Zeilen-und Spaltenvektoren. Hier muss man sich gegebenenfalls so behelfen:
Zeilenvektor --> 2D Vektor mit nur einer Zeile
Spaltenvektor --> 2D Vektor mit nur einer Spalte
Und noch'n Tip:
Es gibt in Labview einen oder zwei Toolkits, die das Kalman Filter mit als Funktion enthalten. Vielleicht hat Deine Firma so einen Toolkit oder sie ist wohlhabend genug den zu kaufen.