From 9415dc13fc0a26b3a29ecbece5686e873e2a0569 Mon Sep 17 00:00:00 2001
From: Sebastian Schwarz <sebastian.schwarz@eonerc.rwth-aachen.de>
Date: Fri, 29 Nov 2024 16:53:07 +0100
Subject: [PATCH] add notebook V10.2.ipynb

---
 .../exam_examples/V10.1.ipynb                 |   2 +-
 .../exam_examples/V10.2.ipynb                 | 384 ++++++++++++++++++
 2 files changed, 385 insertions(+), 1 deletion(-)
 create mode 100644 sys2-jupyter-notebooks/exam_examples/V10.2.ipynb

diff --git a/sys2-jupyter-notebooks/exam_examples/V10.1.ipynb b/sys2-jupyter-notebooks/exam_examples/V10.1.ipynb
index b6b81c8..8a7ad01 100644
--- a/sys2-jupyter-notebooks/exam_examples/V10.1.ipynb
+++ b/sys2-jupyter-notebooks/exam_examples/V10.1.ipynb
@@ -5,7 +5,7 @@
    "id": "a2b19476-4bf6-4dba-b506-3d530bf60bd2",
    "metadata": {},
    "source": [
-    "# <span style='color:OrangeRed'>V10 KALMAN FILTER</span>"
+    "# <span style='color:OrangeRed'>V10 KALMAN FILTER - TEIL 1</span>"
    ]
   },
   {
diff --git a/sys2-jupyter-notebooks/exam_examples/V10.2.ipynb b/sys2-jupyter-notebooks/exam_examples/V10.2.ipynb
new file mode 100644
index 0000000..888f022
--- /dev/null
+++ b/sys2-jupyter-notebooks/exam_examples/V10.2.ipynb
@@ -0,0 +1,384 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "b2072a45-5125-4e7b-834a-5b56b15f8d6e",
+   "metadata": {},
+   "source": [
+    "# <span style='color:OrangeRed'>V10 KALMAN FILTER - TEIL 2</span>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0eca61e4-d40e-4255-b7c8-f866af94c1cd",
+   "metadata": {},
+   "source": [
+    "Das folgende lineare, zeitdiskrete sei gegeben:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "efe2a8c2-841a-4f63-813c-4c137247929f",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "As =  1\n",
+      "Bs =  1\n",
+      "Cs =  0.50000\n"
+     ]
+    }
+   ],
+   "source": [
+    "As = 1\n",
+    "Bs = 1\n",
+    "Cs = 0.5"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "4088bf0b-5578-4e2d-8553-a40b8f92d4a4",
+   "metadata": {},
+   "source": [
+    "Der Anfangszustand sei zweifelsfrei gegeben:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "fc64f0c8-a86d-4c90-b938-4b70ff1b2cea",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "xo =  1\n",
+      "xov = 0\n"
+     ]
+    }
+   ],
+   "source": [
+    "xo = 1\n",
+    "xov = 0"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "09876fc3-650d-4f38-a936-b82de673812f",
+   "metadata": {},
+   "source": [
+    "Anders als in der Standardform, wird das Prozessrauschen durch ein Störmodell beschrieben:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "c699f9e3-7886-4f2a-ba27-f0c6a40cedf0",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Ar =  1\n",
+      "Br =  1\n"
+     ]
+    }
+   ],
+   "source": [
+    "Ar = 1\n",
+    "Br = 1"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a05183dd-1ff7-477a-bea7-177bdac6d3be",
+   "metadata": {},
+   "source": [
+    "Eingang für das Störmodell ist ein mittelwertfreies Signal mit der Gauß'schen Verteilung und Varianz: "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "157ab316-4e77-4df1-a3de-3f6c09f81618",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "rk =  0.50000\n"
+     ]
+    }
+   ],
+   "source": [
+    "rk = 0.5"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "91c85755-9ef5-40d9-8331-43b9dcac0aac",
+   "metadata": {},
+   "source": [
+    "Das Messrauschen ist ebenso Gauß-verteilt mit Varianz:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "667a52bf-771b-40b8-a598-67f3bcb1b86d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "sk =  0.50000\n"
+     ]
+    }
+   ],
+   "source": [
+    "sk = 0.5"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0f8c69f5-d96b-4bae-85e7-cafdce802b5d",
+   "metadata": {},
+   "source": [
+    "Passen Sie die Zusandsraumdarstellung so an, dass die bekannten Formeln des Kalman-Filter angewendet werden können. Fasses Sie zu diesem Zweck das Störmodell und das zeitdiskrete System zu einem neuen Gesamtsystem zusammen."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "92391d85-4a55-4191-b9db-abd84a6b9be0",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Ag =\n",
+      "\n",
+      "   1   1\n",
+      "   0   1\n",
+      "\n",
+      "Bg =\n",
+      "\n",
+      "   1\n",
+      "   0\n",
+      "\n",
+      "Bd =\n",
+      "\n",
+      "   0\n",
+      "   1\n",
+      "\n",
+      "Cg =\n",
+      "\n",
+      "   0.50000   0.00000\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "Ag = [As 1;0 Ar]\n",
+    "Bg = [Bs;0]\n",
+    "Bd = [0; Br]\n",
+    "Cg = [Cs 0]\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "aab57f38-99e5-4a6f-8ae7-e6c907a40762",
+   "metadata": {},
+   "source": [
+    "Berechnen Sie die Varianz des Messrauschens und des Prozessrauschens. Berechnen Sie zusätlich die Kalman Filter Anfangswerte."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "c17a8cd9-f92b-4b63-8732-55d484cff5c2",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Rk =  0.50000\n",
+      "Qk =\n",
+      "\n",
+      "   0.00000   0.00000\n",
+      "   0.00000   0.50000\n",
+      "\n",
+      "Sigmao =\n",
+      "\n",
+      "   0   0\n",
+      "   0   0\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "Rk = rk\n",
+    "Qk = Bd*rk*Bd'\n",
+    "Sigmao=zeros(2,2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "118da55d-dd12-414d-99a7-cccfa1241412",
+   "metadata": {},
+   "source": [
+    "Es gilt uk=-1. Führen Sie nun einen weiteren Prädiktionsschritt durch und bestimmen Sie die Schätzung des Zustandsvektors sowie die zugehörige Kovarianzmatrix."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "e6eec8c3-8245-472e-acae-f06e707b6d4e",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "eta0 =\n",
+      "\n",
+      "   1\n",
+      "   0\n",
+      "\n",
+      "uk = -1\n",
+      "y1 =  10\n",
+      "eta1m =\n",
+      "\n",
+      "   0\n",
+      "   0\n",
+      "\n",
+      "Sigma1m =\n",
+      "\n",
+      "   0.00000   0.00000\n",
+      "   0.00000   0.50000\n",
+      "\n",
+      "K1 =\n",
+      "\n",
+      "   0\n",
+      "   0\n",
+      "\n",
+      "eta1 =\n",
+      "\n",
+      "   0\n",
+      "   0\n",
+      "\n",
+      "Sigma1 =\n",
+      "\n",
+      "   0.00000   0.00000\n",
+      "   0.00000   0.50000\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "eta0 = [xo; 0]\n",
+    "uk = -1\n",
+    "y1 = 10 \n",
+    "eta1m = Ag*eta0+Bg*uk\n",
+    "Sigma1m = Ag*Sigmao*Ag'+Qk\n",
+    "K1 = Sigma1m*Cg'*(Cg*Sigma1m*Cg'+Rk)\n",
+    "eta1 = eta1m+K1*(y1-Cg*eta1m)\n",
+    "Sigma1 = (eye(2)-K1*Cg)*Sigma1m"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a5adb980-c7e1-45c8-bb0f-d2bb5c9e1c8c",
+   "metadata": {},
+   "source": [
+    "Es gilt weiterhin uk=-1. Führen Sie nun einen weiteren Prädiktionsschritt durch und bestimmen Sie die Schätzung des Zustandsvektors sowie die zugehörige Kovarianzmatrix."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "fc517de3-3041-4aa5-9377-80416d82bd74",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "uk2 = -1\n",
+      "eta2 =\n",
+      "\n",
+      "  -1\n",
+      "   0\n",
+      "\n",
+      "Sigma2m =\n",
+      "\n",
+      "   0.50000   0.50000\n",
+      "   0.50000   1.00000\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "uk2 = -1\n",
+    "eta2 = Ag*eta1+Bg*uk2\n",
+    "Sigma2m = Ag*Sigma1*Ag'+Qk\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "825ff5a3-d5aa-4a1d-b831-0cbd75f1ef8e",
+   "metadata": {},
+   "source": [
+    "Das Ergebnis eines weiteren Korrekturschritts ist nun abhängig von der Messung y2, da\n",
+    "die aktuelle Zustandsschätzung nur durch das Prozessrauschen gestört ist und somit\n",
+    "mittels Messung die Unsicherheit reduziert werden kann."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "a7c63002-450b-4713-965c-0d5de273210b",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Octave",
+   "language": "octave",
+   "name": "octave"
+  },
+  "language_info": {
+   "file_extension": ".m",
+   "help_links": [
+    {
+     "text": "GNU Octave",
+     "url": "https://www.gnu.org/software/octave/support.html"
+    },
+    {
+     "text": "Octave Kernel",
+     "url": "https://github.com/Calysto/octave_kernel"
+    },
+    {
+     "text": "MetaKernel Magics",
+     "url": "https://metakernel.readthedocs.io/en/latest/source/README.html"
+    }
+   ],
+   "mimetype": "text/x-octave",
+   "name": "octave",
+   "version": "5.2.0"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
-- 
GitLab