Name
update_kalmanT_update_kalmanUpdateKalmanupdate_kalmanUpdateKalmanUpdateKalman — Einlesen einer Updatedatei eines Kalman-Filters.
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)
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 x* und Extrapolationsfehler-Kovarianzmatrix
P*
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
<Kommentar, d.h. string>
<a11> <a12> ... <a1s>
. . .
<ar1> <ar2> ... <ars>
zeilenweise (mit beliebigen Zwischenräumen/Zeilenvorschüben) abgespeichert,
Vektoren entsprechend in der Form
<Kommentar, d.h. string>
<a1> ... <ak>
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.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Updatedatei für einen Kalman-Filter.
Defaultwert:
'kalman.updt'
"kalman.updt"
"kalman.updt"
"kalman.updt"
"kalman.updt"
"kalman.updt"
Die Dimensionen von Status-, Mess- und Stellvektor.
Defaultwert: [3,1,0]
Typischer Wertebereich: 0
≤
DimensionIn
DimensionIn
DimensionIn
DimensionIn
DimensionIn
dimensionIn
≤
30
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
Die zeilenweise linearisierte Matrix R.
Defaultwert: [1,2]
Typischer Wertebereich: 0.0
≤
MeasurementIn
MeasurementIn
MeasurementIn
MeasurementIn
MeasurementIn
measurementIn
≤
10000.0
Die Dimensionen von Status-, Mess- und Stellvektor.
Hintereinandergehängt die zeilenweise linearisierten
Matrizen A,C,Q, eventuell G und u und gegebenenfalls L.
Die zeilenweise linearisierte Matrix R.
* 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]
/* 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] */
* 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]
* 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]
* 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]
* 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]
Ist die Updatedatei lesbar und korrekt, liefert update_kalmanupdate_kalmanUpdateKalmanupdate_kalmanUpdateKalmanUpdateKalman den
Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.
filter_kalmanfilter_kalmanFilterKalmanfilter_kalmanFilterKalmanFilterKalman
read_kalmanread_kalmanReadKalmanread_kalmanReadKalmanReadKalman,
filter_kalmanfilter_kalmanFilterKalmanfilter_kalmanFilterKalmanFilterKalman
Foundation