KlassenKlassenKlassenKlassen | | | | Operatoren

update_kalmanT_update_kalmanUpdateKalmanupdate_kalmanUpdateKalmanUpdateKalman (Operator)

Name

update_kalmanT_update_kalmanUpdateKalmanupdate_kalmanUpdateKalmanUpdateKalman — Einlesen einer Updatedatei eines Kalman-Filters.

Warnung

update_kalmanupdate_kalmanUpdateKalmanupdate_kalmanUpdateKalmanUpdateKalman ist veraltet und wird nur aus Gründen der Rückwärtskompatibilität zur Verfügung gestellt.

Signatur

update_kalman( : : FileName, DimensionIn, ModelIn, MeasurementIn : DimensionOut, ModelOut, MeasurementOut)

Herror T_update_kalman(const Htuple FileName, const Htuple DimensionIn, const Htuple ModelIn, const Htuple MeasurementIn, Htuple* DimensionOut, Htuple* ModelOut, Htuple* MeasurementOut)

Herror update_kalman(const HTuple& FileName, const HTuple& DimensionIn, const HTuple& ModelIn, const HTuple& MeasurementIn, HTuple* DimensionOut, HTuple* ModelOut, HTuple* MeasurementOut)

void UpdateKalman(const HTuple& FileName, const HTuple& DimensionIn, const HTuple& ModelIn, const HTuple& MeasurementIn, HTuple* DimensionOut, HTuple* ModelOut, HTuple* MeasurementOut)

static HTuple HMisc::UpdateKalman(const HString& FileName, const HTuple& DimensionIn, const HTuple& ModelIn, const HTuple& MeasurementIn, HTuple* ModelOut, HTuple* MeasurementOut)

static HTuple HMisc::UpdateKalman(const char* FileName, const HTuple& DimensionIn, const HTuple& ModelIn, const HTuple& MeasurementIn, HTuple* ModelOut, HTuple* MeasurementOut)

void HOperatorSetX.UpdateKalman(
[in] VARIANT FileName, [in] VARIANT DimensionIn, [in] VARIANT ModelIn, [in] VARIANT MeasurementIn, [out] VARIANT* DimensionOut, [out] VARIANT* ModelOut, [out] VARIANT* MeasurementOut)

VARIANT HMiscX.UpdateKalman(
[in] BSTR FileName, [in] VARIANT DimensionIn, [in] VARIANT ModelIn, [in] VARIANT MeasurementIn, [out] VARIANT* ModelOut, [out] VARIANT* MeasurementOut)

static void HOperatorSet.UpdateKalman(HTuple fileName, HTuple dimensionIn, HTuple modelIn, HTuple measurementIn, out HTuple dimensionOut, out HTuple modelOut, out HTuple measurementOut)

static HTuple HMisc.UpdateKalman(string fileName, HTuple dimensionIn, HTuple modelIn, HTuple measurementIn, out HTuple modelOut, out HTuple measurementOut)

Beschreibung

update_kalmanupdate_kalmanUpdateKalmanupdate_kalmanUpdateKalmanUpdateKalman liest die Updatedatei FileNameFileNameFileNameFileNameFileNamefileName eines Kalman-Filters. Kalman-Filter liefern eine Schätzung des aktuellen Zustands (oder auch eine Prädiktion des künftigen Zustandes) eines diskreten, stochastisch gestörten, linearen Systems.

Eine Kalman-Filterung stützt sich dabei auf ein mathematisches Modell des zu untersuchenden Systems, das zu jedem Zeitpunkt durch folgende Größen charakterisiert wird:

Modellparameter:

Übergangsmatrix A, Steuermatrix G mit der Stellgröße u und Messmatrix C

Modellstochastik:

Systemfehler-Kovarianzmatrix Q, Systemfehler-Messfehler-Kovarianzmatrix L und Messfehler-Kovarianzmatrix R

Messvektor:

y

Systemvergangenheit:

Extrapolationsvektor und Extrapolationsfehler-Kovarianzmatrix

Viele Systeme kommen dabei ohne Eingaben „von außen“ und damit ohne G und u aus. Außerdem sind im Normalfall System- und Messfehler unkorreliert (L entfällt). Einige der oben genannten Größen können sich dynamisch (von Iteration zu Iteration) ändern. update_kalmanupdate_kalmanUpdateKalmanupdate_kalmanUpdateKalmanUpdateKalman dient zur Modifikation von Systemteilen gemäß einer Updatedatei (ASCII) mit folgendem Aufbau (vgl. auch read_kalmanread_kalmanReadKalmanread_kalmanReadKalmanReadKalman):

      Dimensionszeile
      + Inhaltszeile
      + Matrix A
      + Matrix C
      + Matrix Q
      + Matrix G + Vektor u
      + Matrix L
      + Matrix R
Die Dimensionszeile hat dabei die Form
      n = <integer> m = <integer> p = <integer>
wobei n die Anzahl der Zustandsvariablen, m die Anzahl der Messwerte und p die Anzahl der Stellglieder ist (siehe Parameter DimensionInDimensionInDimensionInDimensionInDimensionIndimensionIn / DimensionOutDimensionOutDimensionOutDimensionOutDimensionOutdimensionOut). Die maximale Dimension wird dabei durch eine Systemkonstante (derzeit 30) begrenzt. Da hier an einem gültigen Modell Veränderungen vorgenommen werden sollen, sind die Dimensionen n und m unveränderbar (und werden nur zu Kontrollzwecken angegeben). Die Inhaltszeile ist von der Form
       A*C*Q*G*u*L*R*
und beschreibt den weiteren Inhalt der Datei. Statt '*' ist dabei '+' (Parameter ist vorhanden) bzw. '-' (Parameter fehlt) einzusetzen. Im Gegensatz zu Beschreibungsdateien für read_kalmanread_kalmanReadKalmanread_kalmanReadKalmanReadKalman muss die Systembeschreibung hier nicht vollständig sein. Anzugeben sind nur die sich ändernden Systemteile. Die Angabe von Schätzwerten entfällt, da diese gemäß Konstruktion des Filters von der jeweils letzten Filterung stammen müssen. (r x s) Matrizen werden in der Form
zeilenweise (mit beliebigen Zwischenräumen/Zeilenvorschüben) abgespeichert, Vektoren entsprechend in der Form
Verändert werden von read_kalmanread_kalmanReadKalmanread_kalmanReadKalmanReadKalman folgende Parameterwerte:

DimensionInDimensionInDimensionInDimensionInDimensionIndimensionIn / DimensionOutDimensionOutDimensionOutDimensionOutDimensionOutdimensionOut:

Diese Parameter enthalten die Dimensionen von Status-, Mess- und Stellvektor und sind daher Vektoren [n,m,p], wobei n die Anzahl der Zustandsvariablen, 'm'"m""m""m""m""m" die Anzahl der Messwerte und 'p'"p""p""p""p""p" die Anzahl der Stellglieder ist. m und m sind für ein gegebenes System fest, dürfen also in der Updatedatei nicht von den entsprechenden Eingabewerten abweichen. Für ein System ohne deterministische Steuerung (d.h. ohne Einfluss „von außen“) ist 'p = 0'"p = 0""p = 0""p = 0""p = 0""p = 0".

ModelInModelInModelInModelInModelInmodelIn / ModelOutModelOutModelOutModelOutModelOutmodelOut:

Diese Parameter enthalten hintereinandergehängt die zeilenweise linearisierten Matrizen (Vektoren) A, C, Q, G, u und (gegebenenfalls) L. ModelInModelInModelInModelInModelInmodelIn / ModelOutModelOutModelOutModelOutModelOutmodelOut sind also Vektoren der Länge n*n + n*m + n*n + n*p + p [+ n*m] Der letzte Summand entfällt, falls System- und Messfehler unkorreliert sind, d.h. kein 'L'"L""L""L""L""L" angegeben wurde.

MeasurementInMeasurementInMeasurementInMeasurementInMeasurementInmeasurementIn / MeasurementOutMeasurementOutMeasurementOutMeasurementOutMeasurementOutmeasurementOut:

Diese Parameter enthalten die zeilenweise linearisierte Matrix R, sind also Vektoren der Dimension m*m.

Parallelisierung

Parameter

FileNameFileNameFileNameFileNameFileNamefileName (input_control)  filename.read HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Updatedatei für einen Kalman-Filter.

Defaultwert: 'kalman.updt' "kalman.updt" "kalman.updt" "kalman.updt" "kalman.updt" "kalman.updt"

DimensionInDimensionInDimensionInDimensionInDimensionIndimensionIn (input_control)  integer-array HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Die Dimensionen von Status-, Mess- und Stellvektor.

Defaultwert: [3,1,0]

Typischer Wertebereich: 0 ≤ DimensionIn DimensionIn DimensionIn DimensionIn DimensionIn dimensionIn ≤ 30

ModelInModelInModelInModelInModelInmodelIn (input_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Hintereinandergehängt die zeilenweise linearisierten Matrizen A,C,Q, eventuell G und u und gegebenenfalls L.

Defaultwert: [1.0,1.0,0.5,0.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]

Typischer Wertebereich: 0.0 ≤ ModelIn ModelIn ModelIn ModelIn ModelIn modelIn ≤ 10000.0

MeasurementInMeasurementInMeasurementInMeasurementInMeasurementInmeasurementIn (input_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Die zeilenweise linearisierte Matrix R.

Defaultwert: [1,2]

Typischer Wertebereich: 0.0 ≤ MeasurementIn MeasurementIn MeasurementIn MeasurementIn MeasurementIn measurementIn ≤ 10000.0

DimensionOutDimensionOutDimensionOutDimensionOutDimensionOutdimensionOut (output_control)  integer-array HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Die Dimensionen von Status-, Mess- und Stellvektor.

ModelOutModelOutModelOutModelOutModelOutmodelOut (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Hintereinandergehängt die zeilenweise linearisierten Matrizen A,C,Q, eventuell G und u und gegebenenfalls L.

MeasurementOutMeasurementOutMeasurementOutMeasurementOutMeasurementOutmeasurementOut (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Die zeilenweise linearisierte Matrix R.

Beispiel (HDevelop)

* The following values are describing the system
*
* DimensionIn   = [3,1,0]
* ModelIn       = [1.0,1.0,0.5,0.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,
*                       54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementIn = [1,2]
*
* An example of the Updatefile:
*
* n=3 m=1 p=0
* A+C-Q-G-u-L-R-
* transitions at time t=15:
* 2 1 1
* 0 2 2
* 0 0 2
*
* the results of update_kalman:
*
* DimensionOut   = [3,1,0]
* ModelOut       = [2.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,2.0,1.0,0.0,0.0,
*                        54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementOut = [1.2]

Beispiel (C)

/* The following values are describing the system                      */
/*                                                                     */
/*DimensionIn   = [3,1,0]                                              */
/*ModelIn       = [1.0,1.0,0.5,0.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,    */
/*                      54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]  */
/*MeasurementIn = [1,2]                                                */
/*                                                                     */
/*An example of the Updatefile:                                        */
/*                                                                     */
/*n=3 m=1 p=0                                                          */
/*A+C-Q-G-u-L-R-                                                       */
/*transitions at time t=15:                                            */
/*2 1 1                                                                */
/*0 2 2                                                                */
/*0 0 2                                                                */
/*                                                                     */
/*the results of update_kalman:                                        */
/*                                                                     */
/*DimensionOut   = [3,1,0]                                             */
/*ModelOut       = [2.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,2.0,1.0,0.0,0.0,   */
/*                       54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7] */
/*MeasurementOut = [1.2]                                               */

Beispiel (HDevelop)

* The following values are describing the system
*
* DimensionIn   = [3,1,0]
* ModelIn       = [1.0,1.0,0.5,0.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,
*                       54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementIn = [1,2]
*
* An example of the Updatefile:
*
* n=3 m=1 p=0
* A+C-Q-G-u-L-R-
* transitions at time t=15:
* 2 1 1
* 0 2 2
* 0 0 2
*
* the results of update_kalman:
*
* DimensionOut   = [3,1,0]
* ModelOut       = [2.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,2.0,1.0,0.0,0.0,
*                        54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementOut = [1.2]

Beispiel (HDevelop)

* The following values are describing the system
*
* DimensionIn   = [3,1,0]
* ModelIn       = [1.0,1.0,0.5,0.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,
*                       54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementIn = [1,2]
*
* An example of the Updatefile:
*
* n=3 m=1 p=0
* A+C-Q-G-u-L-R-
* transitions at time t=15:
* 2 1 1
* 0 2 2
* 0 0 2
*
* the results of update_kalman:
*
* DimensionOut   = [3,1,0]
* ModelOut       = [2.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,2.0,1.0,0.0,0.0,
*                        54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementOut = [1.2]

Beispiel (HDevelop)

* The following values are describing the system
*
* DimensionIn   = [3,1,0]
* ModelIn       = [1.0,1.0,0.5,0.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,
*                       54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementIn = [1,2]
*
* An example of the Updatefile:
*
* n=3 m=1 p=0
* A+C-Q-G-u-L-R-
* transitions at time t=15:
* 2 1 1
* 0 2 2
* 0 0 2
*
* the results of update_kalman:
*
* DimensionOut   = [3,1,0]
* ModelOut       = [2.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,2.0,1.0,0.0,0.0,
*                        54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementOut = [1.2]

Beispiel (HDevelop)

* The following values are describing the system
*
* DimensionIn   = [3,1,0]
* ModelIn       = [1.0,1.0,0.5,0.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,
*                       54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementIn = [1,2]
*
* An example of the Updatefile:
*
* n=3 m=1 p=0
* A+C-Q-G-u-L-R-
* transitions at time t=15:
* 2 1 1
* 0 2 2
* 0 0 2
*
* the results of update_kalman:
*
* DimensionOut   = [3,1,0]
* ModelOut       = [2.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,2.0,1.0,0.0,0.0,
*                        54.3,37.9,48.0,37.9,34.3,42.5,48.0,42.5,43.7]
* MeasurementOut = [1.2]

Ergebnis

Ist die Updatedatei lesbar und korrekt, liefert update_kalmanupdate_kalmanUpdateKalmanupdate_kalmanUpdateKalmanUpdateKalman den Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.

Nachfolger

filter_kalmanfilter_kalmanFilterKalmanfilter_kalmanFilterKalmanFilterKalman

Siehe auch

read_kalmanread_kalmanReadKalmanread_kalmanReadKalmanReadKalman, filter_kalmanfilter_kalmanFilterKalmanfilter_kalmanFilterKalmanFilterKalman

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren