Prozessrauschen hinzufügen

In diesem Kapitel fügen wir dem eindimensionalen Kalman-Filter-Modell Prozessrauschen (process noise) hinzu.

Das vollständige Modell des eindimensionalen Kalman-Filters

Das Prozessrauschen

In der realen Welt gibt es Unsicherheiten im dynamischen Modell des Systems. Wenn wir beispielsweise den Widerstandswert eines Widerstands schätzen wollen, nehmen wir ein konstantes dynamisches Modell an, d. h. der Widerstand ändert sich zwischen den Messungen nicht. In der Praxis kann sich der Widerstand jedoch durch Schwankungen der Umgebungstemperatur leicht ändern. Beim Verfolgen ballistischer Raketen mit Radar umfasst die Unsicherheit des dynamischen Modells zufällige Änderungen der Zielbeschleunigung. Bei einem Flugzeug sind die Unsicherheiten aufgrund möglicher Manöver noch deutlich größer.

Wenn wir dagegen die Position eines statischen Objekts mit einem GPS-Empfänger schätzen, ist die Unsicherheit des dynamischen Modells null, da sich das Objekt nicht bewegt. Die Unsicherheit des dynamischen Modells nennt man Prozessrauschen. In der Literatur wird es auch als Anlagenrauschen (plant noise), Antriebsrauschen (driving noise), Dynamikrauschen (dynamics noise), Modellrauschen (model noise) und Systemrauschen (system noise) bezeichnet. Das Prozessrauschen erzeugt Schätzfehler.

Im vorherigen Beispiel haben wir die Höhe eines Gebäudes geschätzt. Da sich die Gebäudehöhe nicht ändert, haben wir kein Prozessrauschen berücksichtigt.

Kalman-Filter-Buch
Beispielorientierter Leitfaden zum Kalman-Filter

Die Prozessrauschvarianz (process noise variance) wird mit dem Buchstaben \( q \) bezeichnet.

Die Gleichung zur Kovarianzextrapolation muss die Prozessrauschvarianz enthalten.

Die Gleichung zur Kovarianzextrapolation für konstante Dynamik lautet:

\[ p_{n+1,n}= p_{n,n}+ q_{n} \]

Dies sind die aktualisierten Kalman-Filter-Gleichungen in einer Dimension:

Gleichung Name der Gleichung Alternative Bezeichnungen in der Literatur
Zustandsaktualisierung \( \hat{x}_{n,n}=~ \hat{x}_{n,n-1}+ K_{n} \left( z_{n}- \hat{x}_{n,n-1} \right) \) Zustandsaktualisierung Filtergleichung
\( p_{n,n}=~ \left( 1-K_{n} \right) p_{n,n-1} \) Kovarianzaktualisierung Korrekturgleichung
\( K_{n}= \frac{p_{n,n-1}}{p_{n,n-1}+r_{n}} \) Kalman-Gain Gewichtsgleichung
Zustandsextrapolation \( \hat{x}_{n+1,n}= \hat{x}_{n,n} \)
(Für konstante Dynamik)

\( \hat{x}_{n+1,n}= \hat{x}_{n,n}+ \Delta t\hat{\dot{x}}_{n,n} \)
\( \hat{\dot{x}}_{n+1,n}= \hat{\dot{x}}_{n,n} \)
(Für Dynamik mit konstanter Geschwindigkeit)
Zustandsextrapolation Prädiktorgleichung
Übergangsgleichung
Vorhersagegleichung
Dynamisches Modell
Zustandsraum-Modell
\( p_{n+1,n}= p_{n,n} + q_{n} \)
(Für konstante Dynamik)

\( p_{n+1,n}^{x}= p_{n,n}^{x} + \Delta t^{2} \cdot p_{n,n}^{v} \)
\( p_{n+1,n}^{v}= p_{n,n}^{v} + q_{n} \)
(Für Dynamik mit konstanter Geschwindigkeit)
Kovarianzextrapolation Prädiktor-Kovarianzgleichung
Hinweis 1: Die Gleichung zur Zustandsextrapolation und die Gleichung zur Kovarianzextrapolation hängen von der Systemdynamik ab.
Hinweis 2: Die obige Tabelle zeigt die spezielle Form der Kalman-Filter-Gleichungen, die auf diesen konkreten Fall zugeschnitten ist. Die allgemeine Form der Gleichungen wird später in Matrixnotation dargestellt. Vorerst ist unser Ziel, das Konzept des Kalman-Filters zu verstehen.

Beispiel 6 – Schätzung der Temperatur einer Flüssigkeit in einem Behälter

Wir möchten die Temperatur einer Flüssigkeit in einem Behälter schätzen.

Schätzung der Flüssigkeitstemperatur

Wir nehmen an, dass die Flüssigkeitstemperatur im stationären Zustand konstant ist. Dennoch sind gewisse Schwankungen der wahren Flüssigkeitstemperatur möglich. Wir können die Systemdynamik durch die folgende Gleichung beschreiben:

\[ x_{n}=T+ w_{n} \]

Dabei gilt:

\( T \) ist die konstante Temperatur

\( w_{n} \) ist ein zufälliges Prozessrauschen mit Varianz \( q \)

Das Zahlenbeispiel

  • Nehmen wir eine wahre Temperatur von 50 Grad Celsius an.
  • Wir nehmen an, dass das Modell genau ist. Daher setzen wir die Prozessrauschvarianz \( q \) auf 0.0001\( ^{\circ}C^{2} \).
  • Der Messfehler (Standardabweichung) beträgt 0.1\( ^{\circ}C \).
  • Die Messungen erfolgen alle 5 Sekunden.
  • Aufgrund des Prozessrauschens lauten die wahren Flüssigkeitstemperaturen zu den Messzeitpunkten: 50.005\( ^{\circ}C \), 49.994\( ^{\circ}C \), 49.993\( ^{\circ}C \), 50.001\( ^{\circ}C \), 50.006\( ^{\circ}C \), 49.998\( ^{\circ}C \), 50.021\( ^{\circ}C \), 50.005\( ^{\circ}C \), 50\( ^{\circ}C \) und 49.997\( ^{\circ}C \).
  • Die Messwerte lauten: 49.986\( ^{\circ}C \), 49.963\( ^{\circ}C \), 50.09\( ^{\circ}C \), 50.001\( ^{\circ}C \), 50.018\( ^{\circ}C \), 50.05\( ^{\circ}C \), 49.938\( ^{\circ}C \), 49.858\( ^{\circ}C \), 49.965\( ^{\circ}C \) und 50.114\( ^{\circ}C \).

Die folgende Grafik vergleicht die wahre Flüssigkeitstemperatur und die Messwerte.

Wahre und gemessene Temperatur

Iteration Null

Vor der ersten Iteration müssen wir den Kalman-Filter initialisieren und den folgenden Zustand vorhersagen (das ist der erste Zustand).

Initialisierung

Wir kennen die wahre Temperatur der Flüssigkeit im Behälter nicht, und unsere Schätzung beträgt 60\( ^{\circ}C \).

\[ \hat{x}_{0,0}=60^{\circ}\textrm{C} \]

Unsere Schätzung ist ungenau, daher setzen wir den anfänglichen Schätzfehler \( \sigma \) auf 100\( ^{\circ}C \). Die Schätzvarianz (estimate variance) der Initialisierung ist die Fehlervarianz \( \left( \sigma ^{2} \right) \):

\[ p_{0,0}=100^{2}=10,000^{\circ}C^{2} \]

Diese Varianz ist sehr hoch. Der Kalman-Filter konvergiert schneller, wenn wir mit einem sinnvolleren Wert initialisieren.

Vorhersage

Da unser Modell konstante Dynamik hat, ist die vorhergesagte Schätzung gleich der aktuellen Schätzung:

\[ \hat{x}_{1,0}=60^{\circ}C \]

Die extrapolierte Schätzvarianz:

\[ p_{1,0}= p_{0,0}+q=10000+ 0.0001=10000.0001^{\circ}C^{2} \]

Erste Iteration

Schritt 1 – Messen

Der Messwert:

\[ z_{1}=~ 49.986^{\circ}C \]

Da der Messfehler 0.1 (\( \sigma \)) beträgt, ist die Varianz (\( \sigma ^{2} \)) gleich 0.01; somit lautet die Messvarianz:

\[ r_{1}= 0.01^{\circ}C^{2} \]

Schritt 2 – Aktualisierung

Kalman-Gain-Berechnung:

\[ K_{1}= \frac{p_{1,0}}{p_{1,0}+r_{1}}= \frac{10000.0001}{10000.0001+0.01} = 0.999999 \]

Der Kalman-Gain ist fast 1; damit ist unser Schätzfehler viel größer als der Messfehler. Das Gewicht der Schätzung ist daher vernachlässigbar, während das Gewicht der Messung fast 1 ist.

Schätzung des aktuellen Zustands:

\[ \hat{x}_{1,1}=~ \hat{x}_{1,0}+ K_{1} \left( z_{1}- \hat{x}_{1,0} \right) =60+0.999999 \left( 49.986-60 \right) = 49.986^{\circ}C \]

Aktualisierung der aktuellen Schätzvarianz:

\[ p_{1,1}=~ \left( 1-K_{1} \right) p_{1,0}= \left( 1-0.999999 \right) 10000.0001=0.01^{\circ}C^{2} \]

Schritt 3 – Vorhersage

Da das dynamische Modell unseres Systems konstant ist, d. h. sich die Flüssigkeitstemperatur nicht ändert:

\[ \hat{x}_{2,1}=\hat{x}_{1,1}= 49.986^{\circ}C \]

Die extrapolierte Schätzvarianz lautet:

\[ p_{2,1}= p_{1,1}+q=0.01+ 0.0001=0.0101^{\circ}C^{2} \]

Zweite Iteration

Schritt 1 – Messen

Der Messwert:

\[ z_{2}=~ 49.963^{\circ}C \]

Da der Messfehler 0.1 (\( \sigma \)) beträgt, ist die Varianz (\( \sigma^{2} \)) gleich 0.01; somit lautet die Messvarianz:

\[ r_{2}= 0.01^{\circ}C^{2} \]

Schritt 2 – Aktualisierung

Kalman-Gain-Berechnung:

\[ K_{2}= \frac{p_{2,1}}{p_{2,1}+r_{2}}= \frac{0.0101}{0.0101+0.01} = 0.5 \]

Der Kalman-Gain ist 0.5, d. h. das Gewicht der Schätzung und das Gewicht der Messung sind gleich.

Schätzung des aktuellen Zustands:

\[ \hat{x}_{2,2}=~ \hat{x}_{2,1}+ K_{2} \left( z_{2}- \hat{x}_{2,1} \right) =49.986+0.5 \left( 49.963-49.986 \right) =49.974^{\circ}C \]

Aktualisierung der aktuellen Schätzvarianz:

\[ p_{2,2}=~ \left( 1-K_{2} \right) p_{2,1}= \left( 1-0.5 \right) 0.0101=0.005^{\circ}C^{2} \]

Schritt 3 – Vorhersage

Da das dynamische Modell des Systems konstant ist, d. h. sich die Flüssigkeitstemperatur nicht ändert:

\[ \hat{x}_{3,2}=\hat{x}_{2,2}= 49.974^{\circ}C \]

Die extrapolierte Schätzvarianz lautet:

\[ p_{3,2}= p_{2,2}+q=0.005+ 0.0001=0.0051^{\circ}C^{2} \]

Iterationen 3–10

Die Berechnungen für die folgenden Iterationen sind in der folgenden Tabelle zusammengefasst:

\( n \) \( z_{n} \) Aktuelle Zustandsschätzungen ( \( K_{n} \) , \( \hat{x}_{n,n} \) , \( p_{n,n} \) ) Vorhersage ( \( \hat{x}_{n+1,n} \) , \( p_{n+1,n} \) )
3 \( 50.09^{\circ}C \) \[ K_{3}= \frac{0.0051}{0.0051+0.01}=0.3388 \] \[ \hat{x}_{3,3}=~ 49.974+0.3388 \left( 50.09-49.974 \right) = 50.016^{\circ}C \] \[ p_{3,3}= \left( 1-0.3388 \right)0.0051 =0.0034^{\circ}C^{2} \] \[ \hat{x}_{4,3}= \hat{x}_{3,3} = 50.016^{\circ}C \] \[ p_{4,3}= 0.0034+0.0001=0.0035^{\circ}C^{2} \]
4 \( 50.001^{\circ}C \) \[ K_{4}= \frac{0.0035}{0.0035+0.01}=0.2586 \] \[ \hat{x}_{4,4}=~ 50.016+0.2586 \left( 50.001-50.016 \right) = 50.012^{\circ}C \] \[ p_{4,4}= \left( 1-0.2586 \right) 0.0035=0.0026^{\circ}C^{2} \] \[ \hat{x}_{5,4}= \hat{x}_{4,4}=50.012^{\circ}C \] \[ p_{5,4}= 0.0026+0.0001=0.0027^{\circ}C^{2} \]
5 \( 50.018^{\circ}C \) \[ K_{5}= \frac{0.0027}{0.0027+0.01}=0.2117 \] \[ \hat{x}_{5,5}= 50.012+0.2117 \left( 50.018-50.012 \right) =50.013^{\circ}C \] \[ p_{5,5}= \left( 1-0.2117 \right) 0.0027=0.0021^{\circ}C^{2} \] \[ \hat{x}_{6,5}= \hat{x}_{5,5}=50.013^{\circ}C \] \[ p_{6,5}= 0.0021+0.0001=0.0022^{\circ}C^{2} \]
6 \( 50.05^{\circ}C \) \[ K_{6}= \frac{0.0022}{0.0022+0.01}=0.1815 \] \[ \hat{x}_{6,6}=~ 50.013+0.1815 \left( 50.05-50.013 \right) = 50.02^{\circ}C \] \[ p_{6,6}= \left( 1-0.1815 \right) 0.0022=0.0018^{\circ}C^{2} \] \[ \hat{x}_{7,6}= \hat{x}_{6,6}=50.02^{\circ}C \] \[ p_{7,6}= 0.0018+0.0001=0.0019^{\circ}C^{2} \]
7 \( 49.938^{\circ}C \) \[ K_{7}= \frac{0.0019}{0.0019+0.01}=0.1607 \] \[ \hat{x}_{7,7}=~ 50.02 + 0.1607 \left( 49.938-50.02 \right) = 50.007^{\circ}C \] \[ p_{7,7}= \left( 1-0.1607 \right) 0.0019=0.0016^{\circ}C^{2} \] \[ \hat{x}_{8,7}= \hat{x}_{7,7}=50.007^{\circ}C \] \[ p_{8,7}= 0.0016+0.0001=0.0017^{\circ}C^{2} \]
8 \( 49.858^{\circ}C \) \[ K_{8}= \frac{0.0017}{0.0017+0.01}=0.1458 \] \[ \hat{x}_{8,8}= 50.007+0.1458 \left( 49.858-50.007 \right) =49.985^{\circ}C \] \[ p_{8,8}= \left( 1-0.1458 \right) 0.0017=0.0015 \] \[ \hat{x}_{9,8}= \hat{x}_{8,8}=49.985^{\circ}C \] \[ p_{9,8}= 0.0015+0.0001=0.0016^{\circ}C^{2} \]
9 \( 49.965^{\circ}C \) \[ K_{9}= \frac{0.0016}{0.0016+0.01}=0.1348 \] \[ \hat{x}_{9,9}=~ 49.985+0.1348 \left( 49.965-49.985 \right) =49.982^{\circ}C \] \[ p_{9,9}= \left( 1-0.1348 \right) 0.0016=0.0014^{\circ}C^{2} \] \[ \hat{x}_{10,9}= \hat{x}_{9,9}=49.982^{\circ}C \] \[ p_{10,9}= 0.0014+0.0001=0.0015^{\circ}C^{2} \]
10 \( 50.114^{\circ}C \) \[ K_{10}= \frac{0.0015}{0.0015+0.01}=0.1265 \] \[ \hat{x}_{10,10}=~ 49.982+0.1265 \left( 50.114 -49.982 \right) =49.999^{\circ}C \] \[ p_{10,10}= \left( 1-0.1265 \right) 0.0015=0.0013^{\circ}C^{2} \] \[ \hat{x}_{11,10}= \hat{x}_{10,10}=49.999^{\circ}C \] \[ p_{11,10}= 0.0013+0.0001=0.0014^{\circ}C^{2} \]

Analyse der Ergebnisse

Die folgende Grafik zeigt den Kalman-Gain.

Der Kalman-Gain

Wie man sieht, nimmt der Kalman-Gain allmählich ab; daher konvergiert der Kalman-Filter.

Die folgende Grafik vergleicht den wahren Wert, die Messwerte und die Schätzungen. Das Konfidenzintervall beträgt 95%.

Richtlinien zur Berechnung eines Konfidenzintervalls finden Sie hier.

Wahrer Wert, Messwerte und Schätzungen

Wie man sieht, konvergiert der geschätzte Wert gegen den wahren Wert. Die Unsicherheiten der Kalman-Filter-Schätzungen sind jedoch für das 95%-Konfidenzniveau zu hoch.

Zusammenfassung des Beispiels

Wir haben die Temperatur einer Flüssigkeit mit einem eindimensionalen Kalman-Filter gemessen. Obwohl die Systemdynamik ein zufälliges Prozessrauschen enthält, liefert der Kalman-Filter eine gute Schätzung.

Beispiel 7 – Schätzung der Temperatur einer beheizten Flüssigkeit

Wie im vorherigen Beispiel schätzen wir die Temperatur einer Flüssigkeit in einem Behälter. In diesem Fall ist das dynamische Modell des Systems nicht konstant – die Flüssigkeit wird jede Sekunde mit einer Rate von 0.1\( ^{\circ}C \) erwärmt.

Das Zahlenbeispiel

Die Kalman-Filter-Parameter sind ähnlich wie im vorherigen Beispiel:

  • Wir nehmen an, dass das Modell genau ist. Daher setzen wir die Prozessrauschvarianz \( q \) auf 0.0001\( ^{\circ}C^{2} \).
  • Der Messfehler (Standardabweichung) beträgt 0.1\( ^{\circ}C \).
  • Die Messungen erfolgen alle 5 Sekunden.
  • Das dynamische Modell des Systems ist konstant.

Hinweis: Obwohl das wahre dynamische Modell des Systems nicht konstant ist (da die Flüssigkeit erwärmt wird), behandeln wir das System als System mit konstantem dynamischem Modell (die Temperatur ändert sich nicht).

  • Die wahren Flüssigkeitstemperaturen zu den Messzeitpunkten sind: 50.505\( ^{\circ}C \), 50.994\( ^{\circ}C \), 51.493\( ^{\circ}C \), 52.001\( ^{\circ}C \), 52.506\( ^{\circ}C \), 52.998\( ^{\circ}C \), 53.521\( ^{\circ}C \), 54.005\( ^{\circ}C \), 54.5\( ^{\circ}C \) und 54.997\( ^{\circ}C \).
  • Die Messwerte sind: 50.486\( ^{\circ}C \), 50.963\( ^{\circ}C \), 51.597\( ^{\circ}C \), 52.001\( ^{\circ}C \), 52.518\( ^{\circ}C \), 53.05\( ^{\circ}C \), 53.438\( ^{\circ}C \), 53.858\( ^{\circ}C \), 54.465\( ^{\circ}C \) und 55.114\( ^{\circ}C \).
Kalman-Filter-Buch
Beispielorientierter Leitfaden zum Kalman-Filter

Die folgende Grafik vergleicht die wahre Flüssigkeitstemperatur und die Messwerte.

Wahre und gemessene Temperatur

Iteration Null

Iteration Null ist ähnlich wie im vorherigen Beispiel.

Vor der ersten Iteration müssen wir den Kalman-Filter initialisieren und den folgenden Zustand vorhersagen (das ist der erste Zustand).

Initialisierung

Wir kennen die wahre Temperatur der Flüssigkeit im Behälter nicht, und unsere Schätzung beträgt 10\( ^{\circ}C \).

\[ \hat{x}_{0,0}=10^{\circ}C \]

Unsere Schätzung ist ungenau, daher setzen wir den anfänglichen Schätzfehler \( \sigma \) auf 100. Die Schätzvarianz der Initialisierung ist die Fehlervarianz \( \left( \sigma ^{2} \right) \):

\[ p_{0,0}=100^{2}=10,000^{\circ}C^{2} \]

Diese Varianz ist sehr hoch. Der Kalman-Filter konvergiert schneller, wenn wir mit einem sinnvolleren Wert initialisieren.

Vorhersage

Nun sagen wir den nächsten Zustand auf Basis der Initialisierungswerte voraus.

Da unser Modell konstante Dynamik hat, ist die vorhergesagte Schätzung gleich der aktuellen Schätzung:

\[ \hat{x}_{1,0}=10^{\circ}C \]

Die extrapolierte Schätzvarianz:

\[ p_{1,0}= p_{0,0}+q=10000+ 0.0001=10000.0001^{\circ}C^{2} \]

Iterationen 1–10

Die Berechnungen für die folgenden Iterationen sind in der folgenden Tabelle zusammengefasst:

\( n \) \( z_{n} \) Aktuelle Zustandsschätzungen ( \( K_{n} \) , \( \hat{x}_{n,n} \) , \( p_{n,n} \) ) Vorhersage ( \( \hat{x}_{n+1,n} \) , \( p_{n+1,n} \) )
1 \( 50.486^{\circ}C \) \[ K_{1}= \frac{10000.0001}{10000.0001+0.01} = 0.999999 \] \[ \hat{x}_{1,1}=~ 10+0.999999 \left( 50.486-10 \right) = 50.486^{\circ}C \] \[ p_{1,1}= \left( 1-0.999999 \right) 10000.0001=0.01^{\circ}C^{2} \] \[ \hat{x}_{2,1}= \hat{x}_{1,1}=50.486^{\circ}C \] \[ p_{2,1}= 0.01+0.0001=0.0101^{\circ}C^{2} \]
2 \( 50.963^{\circ}C \) \[ K_{2}= \frac{0.0101}{0.0101+0.01}=0.5025 \] \[ \hat{x}_{2,2}=~ 50.486+0.5025 \left( 50.963-50.486 \right) =50.726^{\circ}C\] \[ p_{2,2}= \left( 1-0.5025 \right) 0.0101=0.005^{\circ}C^{2} \] \[ \hat{x}_{3,2}= \hat{x}_{2,2}=50.726^{\circ}C \] \[ p_{3,2}= 0.005+0.0001=0.0051^{\circ}C^{2} \]
3 \( 51.597^{\circ}C \) \[ K_{3}= \frac{0.0051}{0.0051+0.01}=0.3388 \] \[ \hat{x}_{3,3}=~ 50.726+0.3388 \left( 51.597-50.726 \right) = 51.021^{\circ}C\] \[ p_{3,3}= \left( 1-0.3388 \right) 0.0051=0.0034^{\circ}C^{2} \] \[ \hat{x}_{4,3}= \hat{x}_{3,3}=51.021^{\circ}C \] \[ p_{4,3}= 0.0034+0.0001=0.0035^{\circ}C^{2} \]
4 \( 52.001^{\circ}C \) \[ K_{4}= \frac{0.0035}{0.0035+0.01}=0.2586 \] \[ \hat{x}_{4,4}=~ 51.021+0.2586 \left( 52.001-51.021 \right) =51.274^{\circ}C \] \[ p_{4,4}= \left( 1-0.2586 \right) 0.0035=0.0026^{\circ}C^{2} \] \[ \hat{x}_{5,4}= \hat{x}_{4,4}=51.274^{\circ}C \] \[ p_{5,4}= 0.0026+0.0001=0.0027^{\circ}C^{2} \]
5 \( 52.518^{\circ}C \) \[ K_{5}= \frac{0.0027}{0.0027+0.01}=0.2117 \] \[ \hat{x}_{5,5}= 51.274+0.2117 \left( 52.518-51.274 \right) =51.538^{\circ}C \] \[ p_{5,5}= \left( 1-0.2117 \right) 0.0027=0.0021^{\circ}C^{2} \] \[ \hat{x}_{6,5}= \hat{x}_{5,5}=51.538^{\circ}C \] \[ p_{6,5}= 0.0021+0.0001=0.0022^{\circ}C^{2} \]
6 \( 53.05^{\circ}C \) \[ K_{6}= \frac{0.0022}{0.0022+0.01}=0.1815 \] \[ \hat{x}_{6,6}=~ 51.538+0.1815 \left( 53.05-51.538 \right) = 51.812^{\circ}C \] \[ p_{6,6}= \left( 1-0.1815 \right) 0.0022=0.0018^{\circ}C^{2} \] \[ \hat{x}_{7,6}= \hat{x}_{6,6}=51.812^{\circ}C \] \[ p_{7,6}= 0.0018+0.0001=0.0019^{\circ}C^{2} \]
7 \( 53.438^{\circ}C \) \[ K_{7}= \frac{0.0019}{0.0019+0.01}=0.1607 \] \[ \hat{x}_{7,7}=~ 51.812+0.1607 \left( 53.438-51.812 \right) =52.0735^{\circ}C \] \[ p_{7,7}= \left( 1-0.1607 \right) 0.0019=0.0016^{\circ}C^{2} \] \[ \hat{x}_{8,7}= \hat{x}_{7,7}=52.0735^{\circ}C \] \[ p_{8,7}= 0.0016+0.0001=0.0017^{\circ}C^{2} \]
8 \( 53.858^{\circ}C \) \[ K_{8}= \frac{0.0017}{0.0017+0.01}=0.1458 \] \[ \hat{x}_{8,8}= 52.0735+0.1458 \left( 53.858-52.0735 \right) =52.334^{\circ}C \] \[ p_{8,8}= \left( 1-0.1458 \right) 0.0017=0.0015^{\circ}C^{2} \] \[ \hat{x}_{9,8}= \hat{x}_{8,8}=52.334^{\circ}C \] \[ p_{9,8}= 0.0015+0.0001=0.0016^{\circ}C^{2} \]
9 \( 54.523^{\circ}C \) \[ K_{9}= \frac{0.0016}{0.0016+0.01}=0.1348 \] \[ \hat{x}_{9,9}=~ 52.334+0.1348 \left( 54.523-52.334 \right) =52.621^{\circ}C \] \[ p_{9,9}= \left( 1-0.1348 \right) 0.0016=0.0014^{\circ}C^{2} \] \[ \hat{x}_{10,9}= \hat{x}_{9,9}=52.621^{\circ}C \] \[ p_{10,9}= 0.0014+0.0001=0.0015^{\circ}C^{2} \]
10 \( 55.114^{\circ}C \) \[ K_{10}= \frac{0.0015}{0.0015+0.01}=0.1265 \] \[ \hat{x}_{10,10}=~ 52.621+0.1265 \left( 55.114 -52.621 \right) =52.936^{\circ}C \] \[ p_{10,10}= \left( 1-0.1265 \right) 0.0015=0.0013^{\circ}C^{2} \] \[ \hat{x}_{11,10}= \hat{x}_{10,10}=52.936^{\circ}C \] \[ p_{11,10}= 0.0013+0.0001=0.0014^{\circ}C^{2} \]

Analyse der Ergebnisse

Die folgende Grafik vergleicht den wahren Wert, die Messwerte und die Schätzungen.

Wahrer Wert, Messwerte und Schätzungen

Wie man sieht, liefert der Kalman-Filter keine zuverlässige Schätzung. Es gibt einen Nachlauf-Fehler (lag error) in der Kalman-Filter-Schätzung. Diesen Nachlauf-Fehler haben wir bereits in Beispiel 3 gesehen, als wir die Position eines beschleunigenden Flugzeugs mit dem \( \alpha - \beta \)-Filter geschätzt haben, der eine konstante Flugzeuggeschwindigkeit annimmt. Den Nachlauf-Fehler haben wir in Beispiel 4 beseitigt, indem wir den \( \alpha - \beta \)-Filter durch den \( \alpha -\beta -\gamma \)-Filter ersetzt haben, der eine Beschleunigung annimmt.

Es gibt zwei Gründe für den Nachlauf-Fehler in unserem Kalman-Filter-Beispiel:

  • Das dynamische Modell passt nicht zum Fall.
  • Wir haben ein sehr kleines Prozessrauschen gewählt \( \left( q=0.0001^{\circ}C^{2} \right) \), während die wahren Temperaturschwankungen deutlich größer sind.
Hinweis: Der Nachlauf-Fehler ist konstant. Daher sollte die Schätzkurve die gleiche Steigung wie die Kurve des wahren Werts haben. Die obige Abbildung zeigt nur die ersten 10 Messungen – das reicht nicht für Konvergenz. Die folgende Abbildung zeigt die ersten 100 Messungen mit einem konstanten Nachlauf-Fehler.
Wahrer Wert, Messwerte und Schätzungen – 100 Messungen

Es gibt zwei mögliche Wege, den Nachlauf-Fehler zu beheben:

  • Wenn wir wissen, dass sich die Flüssigkeitstemperatur linear ändern kann, können wir ein neues Modell definieren, das eine mögliche lineare Änderung der Flüssigkeitstemperatur berücksichtigt. Das haben wir in Beispiel 4 gemacht. Diese Methode ist vorzuziehen. Sie verbessert jedoch die Kalman-Filter-Leistung nicht, wenn sich die Temperaturänderung nicht modellieren lässt.
  • Wenn unser Modell dagegen nicht gut definiert ist, können wir die Zuverlässigkeit des Prozessmodells anpassen, indem wir das Prozessrauschen \( \left( q \right) \) erhöhen. Details dazu finden Sie im nächsten Beispiel.

Ein weiteres Problem ist eine zu geringe Schätzunsicherheit. Der Kalman-Filter liefert keine genauen Schätzungen und ist dennoch von seinen Schätzungen überzeugt. Das ist ein Beispiel für ein schlechtes Kalman-Filter-Design.

Zusammenfassung des Beispiels

In diesem Beispiel haben wir die Temperatur einer beheizten Flüssigkeit mit einem eindimensionalen Kalman-Filter und einem konstanten dynamischen Modell gemessen. Wir haben den Nachlauf-Fehler in der Kalman-Filter-Schätzung beobachtet. Die Ursache sind die Definitionen des (falschen) dynamischen Modells und des Prozessmodells.

Ein geeignetes dynamisches Modell oder eine passende Definition des Prozessmodells kann den Nachlauf-Fehler beheben.

Beispiel 8 – Schätzung der Temperatur einer beheizten Flüssigkeit

Dieses Beispiel ist ähnlich wie das vorherige – mit nur einer Änderung. Da unser Prozess nicht gut definiert ist, erhöhen wir die Prozessrauschvarianz \( q \) von 0.0001\(^{\circ}C^{2}\) auf 0.15\(^{\circ}C^{2}\).

Das Zahlenbeispiel

Iteration Null

Vor der ersten Iteration müssen wir den Kalman-Filter initialisieren und den folgenden Zustand vorhersagen (das ist der erste Zustand).

Initialisierung

Die Initialisierung ist ähnlich wie im vorherigen Beispiel.

Wir kennen die wahre Temperatur der Flüssigkeit im Behälter nicht, und unsere Schätzung beträgt 10\( ^{\circ}C \).

Kalman-Filter-Buch
Beispielorientierter Leitfaden zum Kalman-Filter

\[ \hat{x}_{0,0}=10^{\circ}C \]

Unsere Schätzung ist ungenau, daher setzen wir den anfänglichen Schätzfehler \( \sigma \) auf 100. Die Schätzvarianz der Initialisierung ist die Fehlervarianz \( \left( \sigma ^{2} \right) \):

\[ p_{0,0}=100^{2}=10,000^{\circ}C^{2} \]

Vorhersage

Nun sagen wir den nächsten Zustand auf Basis der Initialisierungswerte voraus.

Da unser Modell konstante Dynamik hat, ist die vorhergesagte Schätzung gleich der aktuellen Schätzung:

\[ \hat{x}_{1,0}=10^{\circ}C \]

Die extrapolierte Schätzvarianz:

\[ p_{1,0}= p_{0,0}+q=10000+ 0.15=10000.15^{\circ}C^{2} \]

Iterationen 1–10

Die Berechnungen für die folgenden Iterationen sind in der folgenden Tabelle zusammengefasst:

\( n \) \( z_{n} \) Aktuelle Zustandsschätzungen ( \( K_{n} \) , \( \hat{x}_{n,n} \) , \( p_{n,n} \) ) Vorhersage ( \( \hat{x}_{n+1,n} \) , \( p_{n+1,n} \) )
1 \( 50.486^{\circ}C \) \[ K_{1}= \frac{10000.15}{10000.15+0.01} = 0.999999 \] \[ \hat{x}_{1,1}=~ 10+0.999999 \left( 50.486-10 \right) =50.486^{\circ}C \] \[ p_{1,1}= \left( 1-0.999999 \right)10000.15=0.01^{\circ}C^{2} \] \[ \hat{x}_{2,1}= \hat{x}_{1,1}=50.486^{\circ}C \] \[ p_{2,1}= 0.01+0.15=0.16^{\circ}C^{2} \]
2 \( 50.963^{\circ}C \) \[ K_{2}= \frac{0.16}{0.16+0.01}=0.9412 \] \[ \hat{x}_{2,2}=~ 50.486+0.9412 \left( 50.963-50.486 \right) =50.934^{\circ}C \] \[ p_{2,2}= \left( 1-0.9412 \right) 0.16=0.0094^{\circ}C^{2} \] \[ \hat{x}_{3,2}= \hat{x}_{2,2}=50.934^{\circ}C \] \[ p_{3,2}= 0.0094+0.15=0.1594^{\circ}C^{2} \]
3 \( 51.597^{\circ}C \) \[ K_{3}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{3,3}=~ 50.934+0.941 \left( 51.597-50.934 \right) =51.556^{\circ}C\] \[ p_{3,3}= \left( 1-0.941 \right) 0.1594=0.0094^{\circ}C^{2} \] \[ \hat{x}_{4,3}= \hat{x}_{3,3}=51.556^{\circ}C \] \[ p_{4,3}= 0.0094+0.15=0.1594^{\circ}C^{2} \]
4 \( 52.001^{\circ}C \) \[ K_{4}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{4,4}=~ 51.556+0.941 \left( 52.001-51.556 \right) = 51.975^{\circ}C \] \[ p_{4,4}= \left( 1-0.941 \right) 0.1594=0.0094^{\circ}C^{2} \] \[ \hat{x}_{5,4}= \hat{x}_{4,4}=51.975^{\circ}C \] \[ p_{5,4}= 0.0094+0.15=0.1594^{\circ}C^{2} \]
5 \( 52.518^{\circ}C \) \[ K_{5}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{5,5}= 51.975+0.941 \left( 52.518-51.975 \right) =52.486^{\circ}C \] \[ p_{5,5}= \left( 1-0.941 \right) 0.1594=0.0094^{\circ}C^{2} \] \[ \hat{x}_{6,5}= \hat{x}_{5,5}=52.486^{\circ}C \] \[ p_{6,5}= 0.0094+0.15=0.1594^{\circ}C^{2} \]
6 \( 53.05^{\circ}C \) \[ K_{6}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{6,6}=~ 52.486+0.941 \left( 53.05-52.486 \right) =53.017^{\circ}C \] \[ p_{6,6}= \left( 1-0.941 \right) 0.1594=0.0094^{\circ}C^{2} \] \[ \hat{x}_{7,6}= \hat{x}_{6,6}=53.017^{\circ}C \] \[ p_{7,6}= 0.0094+0.15=0.1594^{\circ}C^{2} \]
7 \( 53.438^{\circ}C \) \[ K_{7}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{7,7}=~ 53.017+0.941 \left( 53.438-53.017 \right) =53.413^{\circ}C \] \[ p_{7,7}= \left( 1-0.941 \right) 0.1594=0.0094^{\circ}C^{2} \] \[ \hat{x}_{8,7}= \hat{x}_{7,7}=53.413^{\circ}C \] \[ p_{8,7}= 0.0094+0.15=0.1594^{\circ}C^{2} \]
8 \( 53.858^{\circ}C \) \[ K_{8}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{8,8}= 53.413+0.941 \left( 53.858-53.413 \right) =53.832^{\circ}C \] \[ p_{8,8}= \left( 1-0.941 \right) 0.1594=0.0094^{\circ}C^{2} \] \[ \hat{x}_{9,8}= \hat{x}_{8,8}=53.832^{\circ}C \] \[ p_{9,8}= 0.0094+0.15=0.1594^{\circ}C^{2} \]
9 \( 54.523^{\circ}C \) \[ K_{9}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{9,9}=~ 53.832+0.941 \left( 54.523-53.832 \right) =54.428^{\circ}C \] \[ p_{9,9}= \left( 1-0.941 \right) 0.1594=0.0094^{\circ}C^{2} \] \[ \hat{x}_{10,9}= \hat{x}_{9,9}=54.428^{\circ}C \] \[ p_{10,9}= 0.0094+0.15=0.1594^{\circ}C^{2} \]
10 \( 55.114^{\circ}C \) \[ K_{10}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{10,10}=~ 54.428+0.941 \left( 55.114 -54.428 \right) =55.074^{\circ}C \] \[ p_{10,10}= \left( 1-0.941 \right) 0.1594=0.0094^{\circ}C^{2} \] \[ \hat{x}_{11,10}= \hat{x}_{10,10}=55.074^{\circ}C \] \[ p_{11,10}= 0.0094+0.15=0.1594^{\circ}C^{2} \]

Analyse der Ergebnisse

Die folgende Grafik vergleicht den wahren Wert, die Messwerte und die Schätzungen.

Wahrer Wert, Messwerte und Schätzungen

Wie man sieht, folgen die Schätzungen den Messungen. Es gibt keinen Nachlauf-Fehler.

Wir können den Nachlauf-Fehler durch eine hohe Prozessunsicherheit beseitigen. Da unser Modell jedoch nicht gut definiert ist, sind die verrauschten Schätzungen nahezu gleich den Messungen – und damit verfehlen wir das Ziel des Kalman-Filters.

Schauen wir uns den Kalman-Gain an.

Der Kalman-Gain

Aufgrund der hohen Prozessunsicherheit ist das Gewicht der Messung viel größer als das Gewicht der Schätzung. Daher ist der Kalman-Gain hoch und konvergiert gegen 0.94.

Die gute Nachricht ist, dass wir den Schätzungen dieses Kalman-Filters vertrauen können. Die wahren Werte (die grüne Linie) liegen innerhalb des 95%-Konfidenzbereichs.

Zusammenfassung des Beispiels

Die beste Kalman-Filter-Implementierung verwendet ein Modell, das der Realität sehr nahekommt und nur wenig Spielraum für Prozessrauschen lässt. Ein präzises Modell ist jedoch nicht immer verfügbar – ein Flugzeugpilot kann sich beispielsweise für ein plötzliches Manöver entscheiden, das die vorhergesagte Flugzeugtrajektorie ändert. In diesem Fall sollte das Prozessrauschen erhöht werden.

Zurück Weiter