From d223220e4fdd827a5c0dd76e3d7b1453876f3e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 8 Aug 2021 11:47:57 +0200 Subject: add image to reedsolomon --- buch/papers/reedsolomon/tikz/Makefile | 7 ++ buch/papers/reedsolomon/tikz/fourier.pdf | Bin 0 -> 59496 bytes buch/papers/reedsolomon/tikz/fourier.tex | 132 +++++++++++++++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 buch/papers/reedsolomon/tikz/Makefile create mode 100644 buch/papers/reedsolomon/tikz/fourier.pdf create mode 100644 buch/papers/reedsolomon/tikz/fourier.tex (limited to 'buch/papers/reedsolomon') diff --git a/buch/papers/reedsolomon/tikz/Makefile b/buch/papers/reedsolomon/tikz/Makefile new file mode 100644 index 0000000..1753f37 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/Makefile @@ -0,0 +1,7 @@ +# +# Makefile +# +# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +# +fourier.pdf: fourier.tex + pdflatex fourier.tex diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf new file mode 100644 index 0000000..a1b6e24 Binary files /dev/null and b/buch/papers/reedsolomon/tikz/fourier.pdf differ diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex new file mode 100644 index 0000000..af556d1 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -0,0 +1,132 @@ +% +% Plot der Übertrangungsabfolge ins FFT und zurück mit IFFT +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{pgfplots} +\usepackage{pgfplotstable} +\usepackage{csvsimple} +\usepackage{filecontents} + +\def\plotwidth{7.5cm} +\def\plotheight{5.5cm} +\def\xverschiebung{4.5cm} +\def\yverschiebung{-7cm} +\def\yyverschiebung{-14cm} + +\def\marke#1{ + \coordinate (M) at (-0.8,4.6); + \fill[color=lightgray] (M) circle[radius=0.3]; + \draw (M) circle[radius=0.3]; + \node at (M) {#1}; +} + +\begin{document} +\begin{tikzpicture}[>=latex,thick] + +\draw[dashed,line width=2pt,color=lightgray] (2.6,4.4) -- (2.6,-14.3); +\coordinate (B) at (2.6,-1.3); +\node[color=gray] at (B) [rotate=90,above] {Zeitbereich}; +\node[color=gray] at (B) [rotate=90,below] {Frequenzbereich}; + +\begin{scope}[xshift=-\xverschiebung,yshift=0cm] + \begin{axis} + [title = {\large Signal\strut}, + xtick={0,32,64,96}, width=\plotwidth,height=\plotheight] + \addplot[blue,line width=1pt] table[col sep=comma] + {tikz/signal.txt}; + \end{axis} + \marke{1} +\end{scope} + +\begin{scope}[xshift=\xverschiebung,yshift=0cm] + \begin{axis}[axis x line= none, axis y line*=right,ytick={0}, + width=\plotwidth,height=\plotheight] + \addplot[color=white] {0}; + \end{axis} + + \begin{axis}[title = {\large Codiert\strut}, axis y line*=left, + xtick={0,32,64,96}, + width=\plotwidth,height=\plotheight] + \addplot[color=black!60!green,line width=1pt] + table[col sep=comma] + {tikz/codiert.txt}; + \end{axis} + \marke{2} + \draw[->,line width=1pt] (3,-0.4) -- node[right] {Übertragung} (3,-2.2); +\end{scope} + +\definecolor{pink}{rgb}{0.6,0.2,1} + +\begin{scope}[xshift=-\xverschiebung,yshift=\yverschiebung] + \fill[color=pink!20] (4.65,0.35) ellipse (1.1cm and 0.5cm); + \begin{axis}[title = {\large Decodiert\strut}, + xtick={0,32,64,96}, + width=\plotwidth,height=\plotheight] + \addplot[blue,line width=1pt] + table[col sep=comma] {tikz/decodiert.txt}; + \end{axis} + \marke{4} + \draw[color=pink] (4.65,0.35) ellipse (1.1cm and 0.5cm); + \draw[->,color=pink,line width=1pt] + (4.65,-0.15) to[out=-90,in=90] (3,-2.2); +\end{scope} + +\begin{scope}[xshift=\xverschiebung,yshift=\yverschiebung] + \begin{axis}[title = {\large Empfangen {\color{red} mit Fehler}\strut}, + xtick={0,96}, + axis y line*=left, + width=\plotwidth,height=\plotheight] + \addplot[color=black!60!green,line width=1pt] + table[col sep=comma] + {tikz/empfangen.txt}; + \end{axis} + \begin{axis}[xtick={6,20,74}, axis y line*=right, + width=\plotwidth,height=\plotheight] + \addplot[red,line width=1pt] + table[col sep=comma] {tikz/fehler.txt}; + \end{axis} + \marke{3} +\end{scope} + +\begin{scope}[xshift=-\xverschiebung,yshift=\yyverschiebung] + \begin{axis}[title = {\large \color{pink}Syndrom\strut}, + xtick={0,32,64,96}, + width=\plotwidth,height=\plotheight] + \addplot[pink,line width=1pt] + table[col sep=comma] {tikz/syndrom.txt}; + \end{axis} + \marke{5} +\end{scope} + +\begin{scope}[xshift=\xverschiebung,yshift=\yyverschiebung] + % Beschriftung Rechts + \begin{axis}[axis x line= none, axis y line*=right, ytick={0.3}, + xtick={0,32,64,96}, + width=\plotwidth,height=\plotheight] + \addplot[color=black!60,line width=1pt] {0.3}; + \end{axis} + \begin{axis}[title = {\large Locator\strut},axis y line*=left, + xtick={0,6,20,74,96}, + width=\plotwidth,height=\plotheight] + \addplot[gray,line width=1pt] + table[col sep=comma] {tikz/locator.txt}; + \end{axis} + \marke{6} +\end{scope} + +% Fourier-Transformations-Pfeile + +\draw[->,line width=1pt] (1.8,2) -- node[above] {DFT\strut} (3.8,2); + +\begin{scope}[yshift=\yverschiebung] +\draw[<-,line width=1pt] (1.8,2) -- node[above] {DFT$\mathstrut^{-1}$} (3.8,2); +\end{scope} + +\begin{scope}[yshift=\yyverschiebung] +\draw[->,line width=1pt] (1.8,2) -- node[above] {DFT\strut} (3.8,2); +\end{scope} + +\end{tikzpicture} +\end{document} -- cgit v1.2.1 From 08ea2ca03c7cc6dc99550dc0c768ad690b7e96bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 8 Aug 2021 12:56:13 +0200 Subject: improve spacing --- buch/papers/reedsolomon/tikz/fourier.pdf | Bin 59496 -> 59500 bytes buch/papers/reedsolomon/tikz/fourier.tex | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'buch/papers/reedsolomon') diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf index a1b6e24..b200458 100644 Binary files a/buch/papers/reedsolomon/tikz/fourier.pdf and b/buch/papers/reedsolomon/tikz/fourier.pdf differ diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex index af556d1..d5a8d06 100644 --- a/buch/papers/reedsolomon/tikz/fourier.tex +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -27,8 +27,8 @@ \draw[dashed,line width=2pt,color=lightgray] (2.6,4.4) -- (2.6,-14.3); \coordinate (B) at (2.6,-1.3); -\node[color=gray] at (B) [rotate=90,above] {Zeitbereich}; -\node[color=gray] at (B) [rotate=90,below] {Frequenzbereich}; +\node[color=gray] at (B) [rotate=90,above] {Zeitbereich\strut}; +\node[color=gray] at (B) [rotate=90,below] {Frequenzbereich\strut}; \begin{scope}[xshift=-\xverschiebung,yshift=0cm] \begin{axis} -- cgit v1.2.1 From 2805ea85b02609e6f7b7c2d511260ed94944722e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 8 Aug 2021 13:34:03 +0200 Subject: mehr Farbe ;-) --- buch/papers/reedsolomon/tikz/fourier.pdf | Bin 59500 -> 59572 bytes buch/papers/reedsolomon/tikz/fourier.tex | 17 +++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'buch/papers/reedsolomon') diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf index b200458..6491f08 100644 Binary files a/buch/papers/reedsolomon/tikz/fourier.pdf and b/buch/papers/reedsolomon/tikz/fourier.pdf differ diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex index d5a8d06..bbe0508 100644 --- a/buch/papers/reedsolomon/tikz/fourier.tex +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -22,9 +22,14 @@ \node at (M) {#1}; } +\definecolor{darkgreen}{rgb}{0,0.6,0} + \begin{document} \begin{tikzpicture}[>=latex,thick] +\fill[color=blue!10] (-5.7,-14.5) rectangle (2.6,5.0); +\fill[color=darkgreen!10] (2.6,-14.5) rectangle (11.1,5.0); + \draw[dashed,line width=2pt,color=lightgray] (2.6,4.4) -- (2.6,-14.3); \coordinate (B) at (2.6,-1.3); \node[color=gray] at (B) [rotate=90,above] {Zeitbereich\strut}; @@ -33,7 +38,9 @@ \begin{scope}[xshift=-\xverschiebung,yshift=0cm] \begin{axis} [title = {\large Signal\strut}, - xtick={0,32,64,96}, width=\plotwidth,height=\plotheight] + xtick={0,32,64,96}, + axis background/.style={fill=white}, + width=\plotwidth,height=\plotheight] \addplot[blue,line width=1pt] table[col sep=comma] {tikz/signal.txt}; \end{axis} @@ -42,12 +49,14 @@ \begin{scope}[xshift=\xverschiebung,yshift=0cm] \begin{axis}[axis x line= none, axis y line*=right,ytick={0}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[color=white] {0}; \end{axis} \begin{axis}[title = {\large Codiert\strut}, axis y line*=left, xtick={0,32,64,96}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[color=black!60!green,line width=1pt] table[col sep=comma] @@ -60,9 +69,10 @@ \definecolor{pink}{rgb}{0.6,0.2,1} \begin{scope}[xshift=-\xverschiebung,yshift=\yverschiebung] - \fill[color=pink!20] (4.65,0.35) ellipse (1.1cm and 0.5cm); + %\fill[color=pink!20] (4.65,0.35) ellipse (1.1cm and 0.5cm); \begin{axis}[title = {\large Decodiert\strut}, xtick={0,32,64,96}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[blue,line width=1pt] table[col sep=comma] {tikz/decodiert.txt}; @@ -76,6 +86,7 @@ \begin{scope}[xshift=\xverschiebung,yshift=\yverschiebung] \begin{axis}[title = {\large Empfangen {\color{red} mit Fehler}\strut}, xtick={0,96}, + axis background/.style={fill=white}, axis y line*=left, width=\plotwidth,height=\plotheight] \addplot[color=black!60!green,line width=1pt] @@ -93,6 +104,7 @@ \begin{scope}[xshift=-\xverschiebung,yshift=\yyverschiebung] \begin{axis}[title = {\large \color{pink}Syndrom\strut}, xtick={0,32,64,96}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[pink,line width=1pt] table[col sep=comma] {tikz/syndrom.txt}; @@ -104,6 +116,7 @@ % Beschriftung Rechts \begin{axis}[axis x line= none, axis y line*=right, ytick={0.3}, xtick={0,32,64,96}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[color=black!60,line width=1pt] {0.3}; \end{axis} -- cgit v1.2.1 From b76522a3dda77a3319d92c901b5e27586686c3d2 Mon Sep 17 00:00:00 2001 From: michael-OST <75078383+michael-OST@users.noreply.github.com> Date: Sun, 8 Aug 2021 15:53:09 +0200 Subject: chapters updated --- buch/papers/reedsolomon/codebsp.tex | 2 +- buch/papers/reedsolomon/endlichekoerper.tex | 69 +++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 15 deletions(-) (limited to 'buch/papers/reedsolomon') diff --git a/buch/papers/reedsolomon/codebsp.tex b/buch/papers/reedsolomon/codebsp.tex index 8430ebd..eb4e82f 100644 --- a/buch/papers/reedsolomon/codebsp.tex +++ b/buch/papers/reedsolomon/codebsp.tex @@ -76,7 +76,7 @@ dar. \subsection{Der Ansatz der diskreten Fouriertransformation \label{reedsolomon:subsection:diskFT}} -In einem vorherigen Abschnitt \textcolor{red}{(???)} haben wir schon einmal die diskrete Fouriertransformation zum Codieren einer Nachricht verwendet. In den endlichen Körpern wird dies jedoch nicht gelingen, da die Eulerische Zahl $e$ in endlichen Körpern nicht existiert. +Im vorherigen Abschnitt \ref{reedsolomon:section:dtf} haben wir schon einmal die diskrete Fouriertransformation zum Codieren einer Nachricht verwendet. In den endlichen Körpern wird dies jedoch nicht gelingen, da die Eulerische Zahl $e$ in endlichen Körpern nicht existiert. Wir wählen deshalb eine Zahl $a$, die die gleichen Aufgaben haben soll wie $e^{\frac{j}{2 \pi}}$ in der diskreten Fouriertransformation, nur mit dem Unterschied, dass $a$ in $\mathbb{F}_{11}$ ist. Dazu soll die Potenz von $a$ den gesamten Zahlenbereich von $\mathbb{F}_{11}$ abdecken. Dazu ändern wir die Darstellung von \[ diff --git a/buch/papers/reedsolomon/endlichekoerper.tex b/buch/papers/reedsolomon/endlichekoerper.tex index 1d196fd..d70125b 100644 --- a/buch/papers/reedsolomon/endlichekoerper.tex +++ b/buch/papers/reedsolomon/endlichekoerper.tex @@ -3,21 +3,62 @@ % % (c) 2021 Michael Steiner, Hochschule Rapperswil % -\section{Reed-Solomon in Endlichen Körpern +\section{Reed-Solomon in endlichen Körpern \label{reedsolomon:section:endlichekoerper}} \rhead{Reed-Solomon in endlichen Körpern} -\[ -\textcolor{red}{\text{TODO: (warten auf den 1. Teil)}} -\] -Das Rechnen in endlichen Körpern bietet einige Vorteile: +Im vorherigen Abschnitt haben wir gesehen, dass wir die Fehler mittels Approximation suchen und somit keine Konkreten Angaben haben, wo sich Fehler garantiert aufhalten. +Um dies zu ändern wechseln wir vom Komplexen Zahlenraum in den endlichen Körper. +In endlichen Körpern gibt es weder rationale noch komplexe Zahlen. +Zudem beschränken sich die möglichen arithmetischen Rechenoperationen auf das Addieren und Multiplizieren. +Wir können also nur ganze Zahlen als Resultat erhalten. +Dies erleichtert auch die Umsetzung auf ein digitales System, da Computer in der Regel lieber mit ganzen als mit gebrochenen oder komplexen Zahlen arbeiten. -\begin{itemize} - \item Konkrete Zahlen: In endlichen Körpern gibt es weder rationale noch komplexe Zahlen. Zudem beschränken sich die möglichen Rechenoperationen auf das Addieren und Multiplizieren. Somit können wir nur ganze Zahlen als Resultat erhalten. - - \item Digitale Fehlerkorrektur: lässt sich nur in endlichen Körpern umsetzen. - -\end{itemize} +Um jetzt eine Nachricht in den endlichen Körpern zu konstruieren gehen wir im Grunde gleich vor wie im Beispiel aus dem Abschnitt \ref{reedsolomon:subsection:sendbsp}. +Eine Nachricht besteht aus einem Nutzdatenteil und einem Fehlerkorrekturteil. +Diese Nachricht wird Codiert, übertragen und beim Empfänger wieder decodiert. +In endlichen Körpern können wir jedoch nicht mehr die Fouriertransformation uns zur Hilfe nehmen. +Wir müssen also eine Alternative finden, welche die gleichen Eigenschaften wie die Fouriertransformation aufweist, aber im endlichen Körper verwendet werden kann. +Auch beim decodieren müssen wir uns etwas einfallen lassen, damit die Vorgehensweise mit dem Lokatorpolynom auch in endlichen Körpern funktionieren soll. Die folgenden Abschnitte widmen sich deshalb der genaueren Betrachtung eines Reed-Solomon-Codes und wie er in endlichen Körpern funktioniert. -Um jetzt eine Nachricht in den endlichen Körpern zu konstruieren legen wir fest, dass diese Nachricht aus einem Nutzdatenteil und einem Fehlerkorrekturteil bestehen muss. Somit ist die zu übertragende Nachricht immer grösser als die Daten, die wir übertragen wollen. Zudem müssen wir einen Weg finden, den Fehlerkorrekturteil so aus den Nutzdaten zu berechnen, dass wir die Nutzdaten auf der Empfängerseite wieder rekonstruieren können, sollte es zu einer fehlerhaften Übertragung kommen. - -Nun stellt sich die Frage, wie wir eine fehlerhafte Nachricht korrigieren können, ohne ihren ursprünglichen Inhalt zu kennen. Der Reed-Solomon-Code erzielt dies, indem aus dem Fehlerkorrekturteil ein sogenanntes ``Lokatorpolynom'' generiert werden kann. Dieses Polynom gibt dem Emfänger an, welche Stellen in der Nachricht feherhaft sind. +% +%Damit all diese Probleme möglichst verständlich +% +% +%Um all diese Probleme und möglichst +% +% +%um Fehler zu erkennen und mittels Lokatorpolynom +% +% +% ein Lokatorpolynom zu finden. +% +% +% +% Eine Nachricht besteht aus einem Nutzdatenanteil und einem Fehlerkorrekturteil, +% +% +% +%In diesem Zahlenraum gibt es nur Natürliche Zahlen und es darf nur Addiert oder Multipliziert werden. +%Der grosse Vorteil an endlichen Körper ist, dass dich der einfacher Digital umsetzen lässt. +% +% +%Dieser Zahlenraum bringt eine Menge von neuen Regeln mit sich. +%So gibt es dort nur Natürliche Zahlen und die Arithmetischen Rechenoperationen sind beschränkt auf die Addition und Multiplikation. +% +% +% +%\[ +%\textcolor{red}{\text{TODO: (warten auf den 1. Teil)}} +%\] +%Das Rechnen in endlichen Körpern bietet einige Vorteile: +% +%\begin{itemize} +% \item Konkrete Zahlen: In endlichen Körpern gibt es weder rationale noch komplexe Zahlen. Zudem beschränken sich die möglichen Rechenoperationen auf das Addieren und Multiplizieren. Somit können wir nur ganze Zahlen als Resultat erhalten. +% +% \item Digitale Fehlerkorrektur: lässt sich nur in endlichen Körpern umsetzen. +% +%\end{itemize} +% +%Um jetzt eine Nachricht in den endlichen Körpern zu konstruieren legen wir fest, dass diese Nachricht aus einem Nutzdatenteil und einem Fehlerkorrekturteil bestehen muss. Somit ist die zu übertragende Nachricht immer grösser als die Daten, die wir übertragen wollen. Zudem müssen wir einen Weg finden, den Fehlerkorrekturteil so aus den Nutzdaten zu berechnen, dass wir die Nutzdaten auf der Empfängerseite wieder rekonstruieren können, sollte es zu einer fehlerhaften Übertragung kommen. +% +%Nun stellt sich die Frage, wie wir eine fehlerhafte Nachricht korrigieren können, ohne ihren ursprünglichen Inhalt zu kennen. Der Reed-Solomon-Code erzielt dies, indem aus dem Fehlerkorrekturteil ein sogenanntes ``Lokatorpolynom'' generiert werden kann. Dieses Polynom gibt dem Emfänger an, welche Stellen in der Nachricht feherhaft sind. -- cgit v1.2.1 From 8f68f18b9745cec1257e1e1fef9a2c9076839ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 8 Aug 2021 20:17:16 +0200 Subject: trennlinie zwischen Zeit/Frequenzbereich --- buch/papers/reedsolomon/tikz/fourier.pdf | Bin 59572 -> 59767 bytes buch/papers/reedsolomon/tikz/fourier.tex | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'buch/papers/reedsolomon') diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf index 6491f08..25e8d6d 100644 Binary files a/buch/papers/reedsolomon/tikz/fourier.pdf and b/buch/papers/reedsolomon/tikz/fourier.pdf differ diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex index bbe0508..d151b2b 100644 --- a/buch/papers/reedsolomon/tikz/fourier.tex +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -30,7 +30,7 @@ \fill[color=blue!10] (-5.7,-14.5) rectangle (2.6,5.0); \fill[color=darkgreen!10] (2.6,-14.5) rectangle (11.1,5.0); -\draw[dashed,line width=2pt,color=lightgray] (2.6,4.4) -- (2.6,-14.3); +\draw[dashed,line width=2pt,color=lightgray] (2.6,4.9) -- (2.6,-14.4); \coordinate (B) at (2.6,-1.3); \node[color=gray] at (B) [rotate=90,above] {Zeitbereich\strut}; \node[color=gray] at (B) [rotate=90,below] {Frequenzbereich\strut}; @@ -84,7 +84,7 @@ \end{scope} \begin{scope}[xshift=\xverschiebung,yshift=\yverschiebung] - \begin{axis}[title = {\large Empfangen {\color{red} mit Fehler}\strut}, + \begin{axis}[title = {\large Empfangen {\color{red} mit Fehlern}\strut}, xtick={0,96}, axis background/.style={fill=white}, axis y line*=left, @@ -120,7 +120,7 @@ width=\plotwidth,height=\plotheight] \addplot[color=black!60,line width=1pt] {0.3}; \end{axis} - \begin{axis}[title = {\large Locator\strut},axis y line*=left, + \begin{axis}[title = {\large Lokator\strut},axis y line*=left, xtick={0,6,20,74,96}, width=\plotwidth,height=\plotheight] \addplot[gray,line width=1pt] -- cgit v1.2.1