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.
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 |
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.
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.
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.
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.
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 \).
Die folgende Grafik vergleicht die wahre Flüssigkeitstemperatur und die Messwerte.
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.
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.
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 \).
\[ \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.
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.
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.