update_kalmanT_update_kalmanUpdateKalmanUpdateKalmanupdate_kalman — Einlesen einer Updatedatei eines Kalman-Filters.
Warnung
update_kalmanupdate_kalmanUpdateKalmanUpdateKalmanUpdateKalmanupdate_kalman ist veraltet und wird nur aus Gründen
der Rückwärtskompatibilität zur Verfügung gestellt.
update_kalmanupdate_kalmanUpdateKalmanUpdateKalmanUpdateKalmanupdate_kalman liest die Updatedatei FileNameFileNameFileNameFileNamefileNamefile_name 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 , Steuermatrix mit der Stellgröße
und Messmatrix
Modellstochastik:
Systemfehler-Kovarianzmatrix , Systemfehler-Messfehler-Kovarianzmatrix
und Messfehler-Kovarianzmatrix
Messvektor:
Systemvergangenheit:
Extrapolationsvektor und Extrapolationsfehler-Kovarianzmatrix
Viele Systeme kommen dabei ohne Eingaben „von außen“ und damit ohne
und aus. Außerdem sind im Normalfall System- und
Messfehler unkorreliert ( entfällt). Einige der oben genannten
Größen können sich dynamisch (von Iteration zu Iteration) ändern.
update_kalmanupdate_kalmanUpdateKalmanUpdateKalmanUpdateKalmanupdate_kalman dient zur Modifikation von Systemteilen gemäß
einer Updatedatei (ASCII) mit folgendem Aufbau (vgl. auch
read_kalmanread_kalmanReadKalmanReadKalmanReadKalmanread_kalman):
Dimensionszeile
+ content row
+ matrix A
+ matrix C
+ matrix Q
[ + matrix G + vector u ]
[ + matrix L ]
+ matrix R
[ + matrix P0 ]
[ + vector x0 ]
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
DimensionInDimensionInDimensionInDimensionIndimensionIndimension_in / DimensionOutDimensionOutDimensionOutDimensionOutdimensionOutdimension_out).
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_kalmanReadKalmanReadKalmanReadKalmanread_kalman 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.
Matrizen werden in der Form
zeilenweise (mit beliebigen Zwischenräumen/Zeilenvorschüben) abgespeichert,
Vektoren entsprechend in der Form
Verändert werden von read_kalmanread_kalmanReadKalmanReadKalmanReadKalmanread_kalman folgende Parameterwerte:
Diese Parameter enthalten die Dimensionen von Status-, Mess- und
Stellvektor und sind daher Vektoren , wobei
die Anzahl der Zustandsvariablen, die
Anzahl der Messwerte und die Anzahl der Stellglieder ist.
und 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 = 0.
* 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]
Ergebnis
Ist die Updatedatei lesbar und korrekt, liefert update_kalmanupdate_kalmanUpdateKalmanUpdateKalmanUpdateKalmanupdate_kalman den
Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.