read_kalman
— Einlesen der Beschreibungsdatei eines Kalman-Filters.
read_kalman
ist veraltet und wird nur aus Gründen
der Rückwärtskompatibilität zur Verfügung gestellt.
read_kalman( : : FileName : Dimension, Model, Measurement, Prediction)
read_kalman
liest die Beschreibungsdatei FileName
eines Kalman-Filters. Der Kalman-Filter liefert eine Schätzung des
aktuellen Zustands (oder auch eine Prädiktion des künftigen Zustandes)
eines diskreten, stochastisch gestörten, linearen Systems. Sie werden
im Bereich der Bildverarbeitung insbesondere erfolgreich bei der
Bildfolgenanalyse
eingesetzt. Eine Kalman-Filterung stützt sich dabei auf ein
mathematisches Modell des zu untersuchenden Systems, das durch folgende
Größen charakterisiert wird:
Übergangsmatrix A, Steuermatrix G mit der Stellgröße u und Messmatrix C
Systemfehler-Kovarianzmatrix Q, Systemfehler-Messfehler-Kovarianzmatrix L und Messfehler-Kovarianzmatrix R
Zustand und zugehörige 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).
Die oben genannten Kenngrößen können in einer ASCII-Datei mit
folgendem Aufbau abgelegt und dann mittels read_kalman
eingelesen
werden:
Dimensionszeile
+ Inhaltszeile
+ Matrix A
+ Matrix C
+ Matrix Q
[ + Matrix G + Vektor u ]
[ + Matrix L ]
+ Matrix R
[ + Matrix P0 ]
[ + Vektor 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 Dimension
).
Die maximale Dimension wird dabei durch eine Systemkonstante (derzeit
30) begrenzt.
Die Inhaltszeile ist von der Form
A*C*Q*G*u*L*R*P*x*
und beschreibt den weiteren Inhalt der Datei. Statt '*' ist
dabei '+' (Parameter ist vorhanden) bzw. '-' (Parameter fehlt) einzusetzen.
Zu beachten ist dabei, dass nur die oben durch [...] als optional
gekennzeichneten Parameter in einer Beschreibungsdatei weggelassen
werden dürfen. Fehlt die Anfangsschätzung (d.h. 'x-'),
werden die Komponenten des Vektors als 0.0 angenommen. Fehlt die
Kovarianzmatrix der Anfangsschätzung (d.h. 'P-'), wird
angenommen, der Fehler sei sehr groß. Die Matrixelemente werden in diesem
Fall auf 10000.0 gesetzt. Dieser Wert erscheint zwar hoch,
ist aber nur dann ausreichend, wenn die Wertebereiche der Komponenten
des Zustandsvektors x um Zehnerpotenzen kleiner sind.
(r x s) Matrizen werden in der Form
zeilenweise (mit beliebigen Zwischenräumen/Zeilenvorschüben) abgespeichert,
Vektoren entsprechend in der Form
Zurückgeliefert werden von read_kalman
folgende Parameterwerte:
Dimension
:
Dieser Parameter enthält die Dimensionen von Status-, Mess- und
Stellvektor. Dimension ist somit ein Vektor [n,m,p],
wobei n die Anzahl der Zustandsvariablen, m
die Anzahl der Messwerte und p die Anzahl der Stellglieder ist.
Für ein System ohne deterministische Steuerung (d.h. ohne Einfluss
„von außen“) ist folglich Dimension
= [n,m,0].
Model
:
Dieser Parameter enthält hintereinandergehängt die zeilenweise
linearisierten Matrizen (Vektoren) A, C, Q, G, u
und (gegebenenfalls) L. Model
ist also ein Vektor 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 angegeben wurde.
Measurement
:Dieser Parameter enthält die zeilenweise linearisierte Matrix R ist also ein Vektor der Dimension m*m.
Prediction
:Dieser Parameter enthält hintereinandergehängt die zeilenweise linearisierte Matrix (Fehler-Kovarianzmatrix der Anfangsschätzung) und die Anfangsschätzung , ist also ein Vektor der Länge n*n + n.
FileName
(input_control) filename.read →
(string)
Beschreibungsdatei für einen Kalman-Filter.
Defaultwert: 'kalman.init'
Dimension
(output_control) integer-array →
(integer)
Die Dimensionen von Status-, Mess- und Stellvektor.
Model
(output_control) real-array →
(real)
Hintereinandergehängt die zeilenweise linearisierten Matrizen A,C,Q, eventuell G und u und gegebenenfalls L.
Measurement
(output_control) real-array →
(real)
Die zeilenweise linearisierte Matrix R.
Prediction
(output_control) real-array →
(real)
Hintereinandergehängt die zeilenweise linearisierte Matrix (die Fehler-Kovarianzmatrix der Anfangsschätzung) und die Anfangsschätzung
* An example of the description-file: * * n=3 m=1 p=0 * A+C+Q+G-u-L-R+P+x+ * transition matrix A: * 1 1 0.5 * 0 1 1 * 0 0 1 * measurement matrix C: * 1 0 0 * system-error covariance matrix Q: * 54.3 37.9 48.0 * 37.9 34.3 42.5 * 48.0 42.5 43.7 * measurement-error covariance matrix R: * 1.2 * estimation-error covariance matrix (for the initial estimate) P0: \ * 0 0 0 * 0 180.5 0 * 0 0 100 * initial estimate x0: * 0 100 0 * * the result of read_kalman with the upper descriptionfile * as inputparameter: * * Dimension = [3,1,0] * Model = [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] * Measurement = [1.2] * Prediction = [0.0,0.0,0.0,0.0,180.5,0.0,0.0,0.0,100.0,0.0,100.0, * 0.0].
Ist die Beschreibungsdatei lesbar und korrekt, liefert read_kalman
den Wert 2 (H_MSG_TRUE). Andernfalls wird eventuell eine Fehlerbehandlung
durchgeführt.
Foundation