diff --git a/tikz/kalman-filter/Makefile b/tikz/kalman-filter/Makefile new file mode 100644 index 0000000..51883c9 --- /dev/null +++ b/tikz/kalman-filter/Makefile @@ -0,0 +1,33 @@ +SOURCE = kalman-filter +DELAY = 80 +DENSITY = 300 +WIDTH = 512 + +make: + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot + +gif: + pdfcrop $(SOURCE).pdf + convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif + make clean + +png: + make + make svg + inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png + +transparentGif: + convert $(SOURCE).pdf -transparent white result.gif + make clean + +svg: + #inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg + pdf2svg $(SOURCE).pdf $(SOURCE).svg + # Necessary, as pdf2svg does not always create valid svgs: + inkscape $(SOURCE).svg --export-width=$(WIDTH) --export-plain-svg=$(SOURCE)1.svg + rsvg-convert -a -w 720 -f svg $(SOURCE)1.svg -o $(SOURCE).svg + rm $(SOURCE)1.svg diff --git a/tikz/kalman-filter/README.md b/tikz/kalman-filter/README.md new file mode 100644 index 0000000..aa45dd6 --- /dev/null +++ b/tikz/kalman-filter/README.md @@ -0,0 +1,5 @@ +Compiled example +---------------- +![Example](kalman-filter.png) + +Example for a block-diagram. \ No newline at end of file diff --git a/tikz/kalman-filter/kalman-filter.png b/tikz/kalman-filter/kalman-filter.png new file mode 100644 index 0000000..addf49e Binary files /dev/null and b/tikz/kalman-filter/kalman-filter.png differ diff --git a/tikz/kalman-filter/kalman-filter.tex b/tikz/kalman-filter/kalman-filter.tex new file mode 100644 index 0000000..86dcd8c --- /dev/null +++ b/tikz/kalman-filter/kalman-filter.tex @@ -0,0 +1,49 @@ +\documentclass[varwidth=true, border=2pt]{standalone} + +\usepackage{pgfplots} +\usepackage{tikz} +\usetikzlibrary{shapes,arrows,arrows.meta} +\pgfplotsset{compat=1.13} +\usepackage{mathtools} +\usepackage{amssymb} + +\begin{document} +\tikzstyle{block} = [draw, rectangle, minimum width=6em, align=center,fill=gray!5] +\tikzstyle{arrow} = [-latex, very thick] +\newcommand*{\tran}{\top} + +\begin{tikzpicture}[auto, node distance=2cm,>=latex'] + \setlength{\abovedisplayskip}{0pt} + + % Place the blocks + \node[text width=1cm, + rounded corners=3pt, + block, + label={[above,align=center]{Initial\\State}}] at (-1, 0) (initial) + {$$\mathbf{x}_0$$ $$P_0$$}; + \node at (0.25, 0.1) (sum) {}; + \node[block, text width=6cm, + label={[above,align=center]{Prediction}}] at (4, 0) (prediction) + {\begin{align*} + \mathbf{x}_{k+1}^{(P)} &= A x_k + B {\color{orange} a_k}\\ + P_{k+1}^{(P)} &= A P_k A^\tran + C_k^{(r_s)} + \end{align*}}; + \node [block, right of=prediction, + node distance=3cm, text width=1.4cm] at (6, -2) (iterUpdate) + {$$k \leftarrow k + 1$$}; + \node [block, text width=6cm, + label={[above,align=center]{Innovation}}] at (4, -4) (innovation) + {\begin{align*} + K_k &= P_k^{(P)} H^\tran {\left (H P_k^{(P)} H^\tran + C_k^{(r_m)} \right)}^{-1}\\ + {\color{blue} \mathbf{x}_k} &= \mathbf{x}_k^{(P)} + K_k \left ({\color{orange} z_k} - H \mathbf{x}_k^{(P)} \right )\\ + {\color{blue} P_k} &= (I - K_k H) P_k^{(P)} + \end{align*}}; + + % Connect the nodes + \draw [arrow] (initial) -- (prediction); + \draw [arrow] (prediction.east) -| (iterUpdate.north); + \draw [arrow] (iterUpdate) |- (innovation); + \draw [arrow] (innovation.west) -| (sum); +\end{tikzpicture} + +\end{document}