From a310c9290f64d938e87226db84d524a7a817ec68 Mon Sep 17 00:00:00 2001 From: Reto Date: Thu, 29 Jul 2021 23:07:18 +0200 Subject: reorganized files, started work on Einleitung, Aufbau --- buch/papers/mceliece/Makefile.inc | 8 +- buch/papers/mceliece/aufbau.tex | 128 ++++++++++++++++++++++++++++++++ buch/papers/mceliece/einleitung.tex | 14 ++++ buch/papers/mceliece/fazit.tex | 40 ++++++++++ buch/papers/mceliece/funktionsweise.tex | 40 ++++++++++ buch/papers/mceliece/main.tex | 27 +------ buch/papers/mceliece/references.bib | 22 ++++-- buch/papers/mceliece/teil0.tex | 22 ------ buch/papers/mceliece/teil1.tex | 55 -------------- buch/papers/mceliece/teil2.tex | 40 ---------- buch/papers/mceliece/teil3.tex | 40 ---------- 11 files changed, 245 insertions(+), 191 deletions(-) create mode 100644 buch/papers/mceliece/aufbau.tex create mode 100644 buch/papers/mceliece/einleitung.tex create mode 100644 buch/papers/mceliece/fazit.tex create mode 100644 buch/papers/mceliece/funktionsweise.tex delete mode 100644 buch/papers/mceliece/teil0.tex delete mode 100644 buch/papers/mceliece/teil1.tex delete mode 100644 buch/papers/mceliece/teil2.tex delete mode 100644 buch/papers/mceliece/teil3.tex diff --git a/buch/papers/mceliece/Makefile.inc b/buch/papers/mceliece/Makefile.inc index ed1affa..53ecf7a 100644 --- a/buch/papers/mceliece/Makefile.inc +++ b/buch/papers/mceliece/Makefile.inc @@ -7,8 +7,8 @@ dependencies-mceliece = \ papers/mceliece/packages.tex \ papers/mceliece/main.tex \ papers/mceliece/references.bib \ - papers/mceliece/teil0.tex \ - papers/mceliece/teil1.tex \ - papers/mceliece/teil2.tex \ - papers/mceliece/teil3.tex + papers/mceliece/einleitung.tex \ + papers/mceliece/aufbau.tex \ + papers/mceliece/funktionsweise.tex \ + papers/mceliece/fazit.tex diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex new file mode 100644 index 0000000..08ef037 --- /dev/null +++ b/buch/papers/mceliece/aufbau.tex @@ -0,0 +1,128 @@ +% +% einleitung.tex -- Beispiel-File für die Einleitung +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Aufbau\label{mceliece:section:Aufbau}} +\rhead{Aufbau} +Das McEliece-Kryptosystem besteht aus folgenden Elementen: + +\subsection{Datenvektor $d_k$ +\label{mceliece:subsection:d_k}} +In diesem Vektor der Länge $k$ sind die zu verschlüsselnden Daten enthalten. +Beispielsweise +\[d_4= +\begin{pmatrix} + 1\\ + 1\\ + 1\\ + 0 +\end{pmatrix} +\] + +\subsection{Binäre Zufallsmatrix $S_k$ +\label{mceliece:subsection:s_k}} +$S_k$ ist eine Binäre Zufallsmatrix der Grösse $k \times k$. +Auch muss diese Matrix in $\mathbb{F}_2$ invertierbar sein. +Für kleine Matrizen kann durchaus jedes Matrizenelement zufällig generiert werden, +wobei danach mithilfe des Gauss-Algorythmusses deren Inverse bestimmt werden kann. +Da eine solche Matrix möglicherweise singulär ist, muss in diesem Fall eine neue Zufallsmatrix erzeugt werden. +Für grössere Matrizen existieren bessere Methoden, auf welche hier nicht weiter eingegangen wird \cite{mceliece:GenerationRandMatrix}. +Beispielsweise +\[S_4= +\begin{pmatrix} + 0 & 1 & 1 & 1\\ + 0 & 1 & 1 & 0\\ + 0 & 0 & 1 & 1\\ + 1 & 0 & 0 & 1 +\end{pmatrix} +\] + +\[ + S_4^{-1}= + \begin{pmatrix} + 1 & 0 & 1 & 0\\ + 1 & 1 & 0 & 1\\ + 1 & 1 & 1 & 0\\ + 1 & 1 & 0 & 0 + \end{pmatrix} +\] + +\subsection{Linear-Code-Generatormatrix $G_{n,k}$ +\label{mceliece:subsection:g_m}} +Das wichtigste Element des McEliece-Systems ist ein fehlerkorrigierender Code, +der in der Lage ist, $t$ Fehler zu korrigieren. +Im Zusammenhang mit McEliece werden dabei meist Goppa-Codes verwendet, +es können prinzipiell auch andere Codes wie beispielsweise Reed-Solomin verwendet werden, +jedoch besitzen einige Codes Schwachstellen \cite{mceliece:lorenz}. +Das Codieren mit diesem linearen Code kann mithilfe dessen Generatormatrix $G_{n,k}$ erfolgen. +Da es sich um einen fehlerkorrigierenden Code handelt, +wird das Codewort länger als das Datenwort, +es wird also Redundanz hinzugefügt, +um die Fehlerkorrektur möglich zu machen. + +Beispiel +\[ + G_{7,4}= + \begin{pmatrix} + 1 & 0 & 0 & 0\\ + 1 & 1 & 0 & 0\\ + 0 & 1 & 1 & 0\\ + 1 & 0 & 1 & 1\\ + 0 & 1 & 0 & 1\\ + 0 & 0 & 1 & 0\\ + 0 & 0 & 0 & 1 + \end{pmatrix} +\] + +\subsection{Permutations-Matrix $P_n$ +\label{mceliece:subsection:p_m}} +Mit der zufällig generierten Permutationsmatrix $P_n$ wird die Reihenfolge der Bits geändert. +Mit der Inversen $P_n^{-1}$ kann die Bitvertauschung rückgängig gemacht werden. +Beispiel +\[ + P_7= + \begin{pmatrix} + 0 & 1 & 0 & 0 & 0 & 0 & 0\\ + 0 & 0 & 0 & 0 & 0 & 0 & 1\\ + 0 & 0 & 0 & 0 & 0 & 1 & 0\\ + 0 & 0 & 1 & 0 & 0 & 0 & 0\\ + 0 & 0 & 0 & 1 & 0 & 0 & 0\\ + 1 & 0 & 0 & 0 & 0 & 0 & 0\\ + 0 & 0 & 0 & 0 & 1 & 0 & 0 + \end{pmatrix} +\] +, +\[ + P_7^{-1}=P_7^t= + \begin{pmatrix} + 0 & 0 & 0 & 0 & 0 & 1 & 0\\ + 1 & 0 & 0 & 0 & 0 & 0 & 0\\ + 0 & 0 & 0 & 1 & 0 & 0 & 0\\ + 0 & 0 & 0 & 0 & 1 & 0 & 0\\ + 0 & 0 & 0 & 0 & 0 & 0 & 1\\ + 0 & 0 & 1 & 0 & 0 & 0 & 0\\ + 0 & 1 & 0 & 0 & 0 & 0 & 0 + \end{pmatrix} +\] + +\subsection{Fehler-Vektor $e_n$ +\label{mceliece:subsection:p_m}} +Dieser Vektor der Länge $n$ besteht aus $t$ Einsen, welche zufällig innerhalb des Vektors angeordnet sind, +alle anderen Einträge sind Null. +Dieser Fehlervektor besitzt also gleich viele Einer, +wie die Anzahl Fehler, die der Linearcode zu korrigieren vermag. + +Beispiel +\[ + E_7= + \begin{pmatrix} + 0\\ + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0 + \end{pmatrix} +\] diff --git a/buch/papers/mceliece/einleitung.tex b/buch/papers/mceliece/einleitung.tex new file mode 100644 index 0000000..48b55b0 --- /dev/null +++ b/buch/papers/mceliece/einleitung.tex @@ -0,0 +1,14 @@ +% +% teil1.tex -- Beispiel-File für das Paper +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Einleitung +\label{mceliece:section:einleitung}} +\rhead{Einleitung} +Das McEliece-Kryptosystem ist eine Variante zum Austausch +von Schlüsselpaaren über ein Netzwerk analog dem Diffie-Hellman-Schlüsseltausch \ref{buch:subsection:diffie-hellman}, +wobei das McEliece-System als Quantencomputerresistent gilt. +Das Verschlüsseln/Entschlüsseln von Nachrichten wird bei diesem System hauptsächlich mit Matrizenoperationen durchgeführt. + + diff --git a/buch/papers/mceliece/fazit.tex b/buch/papers/mceliece/fazit.tex new file mode 100644 index 0000000..37152bf --- /dev/null +++ b/buch/papers/mceliece/fazit.tex @@ -0,0 +1,40 @@ +% +% teil3.tex -- Beispiel-File für Teil 3 +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Fazit +\label{mceliece:section:fazit}} +\rhead{Fazit} +Sed ut perspiciatis unde omnis iste natus error sit voluptatem +accusantium doloremque laudantium, totam rem aperiam, eaque ipsa +quae ab illo inventore veritatis et quasi architecto beatae vitae +dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit +aspernatur aut odit aut fugit, sed quia consequuntur magni dolores +eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam +est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci +velit, sed quia non numquam eius modi tempora incidunt ut labore +et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima +veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, +nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure +reprehenderit qui in ea voluptate velit esse quam nihil molestiae +consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla +pariatur? + +\subsection{De finibus bonorum et malorum +\label{mceliece:subsection:malorum}} +At vero eos et accusamus et iusto odio dignissimos ducimus qui +blanditiis praesentium voluptatum deleniti atque corrupti quos +dolores et quas molestias excepturi sint occaecati cupiditate non +provident, similique sunt in culpa qui officia deserunt mollitia +animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis +est et expedita distinctio. Nam libero tempore, cum soluta nobis +est eligendi optio cumque nihil impedit quo minus id quod maxime +placeat facere possimus, omnis voluptas assumenda est, omnis dolor +repellendus. Temporibus autem quibusdam et aut officiis debitis aut +rerum necessitatibus saepe eveniet ut et voluptates repudiandae +sint et molestiae non recusandae. Itaque earum rerum hic tenetur a +sapiente delectus, ut aut reiciendis voluptatibus maiores alias +consequatur aut perferendis doloribus asperiores repellat. + + diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex new file mode 100644 index 0000000..0e2ed1b --- /dev/null +++ b/buch/papers/mceliece/funktionsweise.tex @@ -0,0 +1,40 @@ +% +% teil2.tex -- Beispiel-File für teil2 +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Funktionsweise +\label{mceliece:section:funktionsweise}} +\rhead{Funktionsweise} +Sed ut perspiciatis unde omnis iste natus error sit voluptatem +accusantium doloremque laudantium, totam rem aperiam, eaque ipsa +quae ab illo inventore veritatis et quasi architecto beatae vitae +dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit +aspernatur aut odit aut fugit, sed quia consequuntur magni dolores +eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam +est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci +velit, sed quia non numquam eius modi tempora incidunt ut labore +et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima +veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, +nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure +reprehenderit qui in ea voluptate velit esse quam nihil molestiae +consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla +pariatur? + +\subsection{De finibus bonorum et malorum +\label{mceliece:subsection:bonorum}} +At vero eos et accusamus et iusto odio dignissimos ducimus qui +blanditiis praesentium voluptatum deleniti atque corrupti quos +dolores et quas molestias excepturi sint occaecati cupiditate non +provident, similique sunt in culpa qui officia deserunt mollitia +animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis +est et expedita distinctio. Nam libero tempore, cum soluta nobis +est eligendi optio cumque nihil impedit quo minus id quod maxime +placeat facere possimus, omnis voluptas assumenda est, omnis dolor +repellendus. Temporibus autem quibusdam et aut officiis debitis aut +rerum necessitatibus saepe eveniet ut et voluptates repudiandae +sint et molestiae non recusandae. Itaque earum rerum hic tenetur a +sapiente delectus, ut aut reiciendis voluptatibus maiores alias +consequatur aut perferendis doloribus asperiores repellat. + + diff --git a/buch/papers/mceliece/main.tex b/buch/papers/mceliece/main.tex index dbbaaac..352a6be 100644 --- a/buch/papers/mceliece/main.tex +++ b/buch/papers/mceliece/main.tex @@ -8,29 +8,10 @@ \begin{refsection} \chapterauthor{Reto Fritsche} -Ein paar Hinweise für die korrekte Formatierung des Textes -\begin{itemize} -\item -Absätze werden gebildet, indem man eine Leerzeile einfügt. -Die Verwendung von \verb+\\+ ist nur in Tabellen und Arrays gestattet. -\item -Die explizite Platzierung von Bildern ist nicht erlaubt, entsprechende -Optionen werden gelöscht. -Verwenden Sie Labels und Verweise, um auf Bilder hinzuweisen. -\item -Beginnen Sie jeden Satz auf einer neuen Zeile. -Damit ermöglichen Sie dem Versionsverwaltungssysteme, Änderungen -in verschiedenen Sätzen von verschiedenen Autoren ohne Konflikt -anzuwenden. -\item -Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren -Übersicht wegen, aber auch um GIT die Arbeit zu erleichtern. -\end{itemize} - -\input{papers/mceliece/teil0.tex} -\input{papers/mceliece/teil1.tex} -\input{papers/mceliece/teil2.tex} -\input{papers/mceliece/teil3.tex} +\input{papers/mceliece/einleitung.tex} +\input{papers/mceliece/aufbau.tex} +\input{papers/mceliece/funktionsweise.tex} +\input{papers/mceliece/fazit.tex} \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/mceliece/references.bib b/buch/papers/mceliece/references.bib index 47798d3..56f2d19 100644 --- a/buch/papers/mceliece/references.bib +++ b/buch/papers/mceliece/references.bib @@ -4,13 +4,13 @@ % (c) 2020 Autor, Hochschule Rapperswil % -@online{mceliece:bibtex, - title = {BibTeX}, - url = {https://de.wikipedia.org/wiki/BibTeX}, - date = {2020-02-06}, - year = {2020}, - month = {2}, - day = {6} +@online{mceliece:GenerationRandMatrix, + title = {Efficient Generation of Random Nonsingular Matrices}, + url = {https://www.researchgate.net/publication/2729950_Efficient_Generation_of_Random_Nonsingular_Matrices}, + date = {Januar 1993}, + year = {2021}, + month = {7}, + day = {29} } @book{mceliece:numerical-analysis, @@ -33,3 +33,11 @@ url = {https://doi.org/10.1016/j.acha.2017.11.004} } +@online{mceliece:lorenz, + title = {Cryptography based on error correcting codes}, + url = {https://algo.epfl.ch/_media/en/projects/lorenz_thesis.pdf}, + date = {2007-07-27}, + year = {2021}, + month = {7}, + day = {29} +} \ No newline at end of file diff --git a/buch/papers/mceliece/teil0.tex b/buch/papers/mceliece/teil0.tex deleted file mode 100644 index b98f8be..0000000 --- a/buch/papers/mceliece/teil0.tex +++ /dev/null @@ -1,22 +0,0 @@ -% -% einleitung.tex -- Beispiel-File für die Einleitung -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 0\label{mceliece:section:teil0}} -\rhead{Teil 0} -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua \cite{mceliece:bibtex}. -At vero eos et accusam et justo duo dolores et ea rebum. -Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum -dolor sit amet. - -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua. -At vero eos et accusam et justo duo dolores et ea rebum. Stet clita -kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit -amet. - - diff --git a/buch/papers/mceliece/teil1.tex b/buch/papers/mceliece/teil1.tex deleted file mode 100644 index 06035a6..0000000 --- a/buch/papers/mceliece/teil1.tex +++ /dev/null @@ -1,55 +0,0 @@ -% -% teil1.tex -- Beispiel-File für das Paper -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 1 -\label{mceliece:section:teil1}} -\rhead{Problemstellung} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. -Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit -aut fugit, sed quia consequuntur magni dolores eos qui ratione -voluptatem sequi nesciunt -\begin{equation} -\int_a^b x^2\, dx -= -\left[ \frac13 x^3 \right]_a^b -= -\frac{b^3-a^3}3. -\label{mceliece:equation1} -\end{equation} -Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, -consectetur, adipisci velit, sed quia non numquam eius modi tempora -incidunt ut labore et dolore magnam aliquam quaerat voluptatem. - -Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis -suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? -Quis autem vel eum iure reprehenderit qui in ea voluptate velit -esse quam nihil molestiae consequatur, vel illum qui dolorem eum -fugiat quo voluptas nulla pariatur? - -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:finibus}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga \eqref{000tempmlate:equation1}. - -Et harum quidem rerum facilis est et expedita distinctio -\ref{mceliece:section:loesung}. -Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil -impedit quo minus id quod maxime placeat facere possimus, omnis -voluptas assumenda est, omnis dolor repellendus -\ref{mceliece:section:folgerung}. -Temporibus autem quibusdam et aut officiis debitis aut rerum -necessitatibus saepe eveniet ut et voluptates repudiandae sint et -molestiae non recusandae. -Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis -voluptatibus maiores alias consequatur aut perferendis doloribus -asperiores repellat. - - diff --git a/buch/papers/mceliece/teil2.tex b/buch/papers/mceliece/teil2.tex deleted file mode 100644 index fd247c7..0000000 --- a/buch/papers/mceliece/teil2.tex +++ /dev/null @@ -1,40 +0,0 @@ -% -% teil2.tex -- Beispiel-File für teil2 -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 2 -\label{mceliece:section:teil2}} -\rhead{Teil 2} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:bonorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. - - diff --git a/buch/papers/mceliece/teil3.tex b/buch/papers/mceliece/teil3.tex deleted file mode 100644 index 421b331..0000000 --- a/buch/papers/mceliece/teil3.tex +++ /dev/null @@ -1,40 +0,0 @@ -% -% teil3.tex -- Beispiel-File für Teil 3 -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 3 -\label{mceliece:section:teil3}} -\rhead{Teil 3} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:malorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. - - -- cgit v1.2.1 From d96533cc4a5157d6bae247e88d8ec61f256a48f3 Mon Sep 17 00:00:00 2001 From: Reto Date: Tue, 3 Aug 2021 18:11:59 +0200 Subject: working... --- buch/papers/mceliece/aufbau.tex | 41 +++++++++++++++++++++++++-------- buch/papers/mceliece/funktionsweise.tex | 15 +----------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex index 08ef037..0ee95fa 100644 --- a/buch/papers/mceliece/aufbau.tex +++ b/buch/papers/mceliece/aufbau.tex @@ -30,21 +30,21 @@ Da eine solche Matrix möglicherweise singulär ist, muss in diesem Fall eine ne Für grössere Matrizen existieren bessere Methoden, auf welche hier nicht weiter eingegangen wird \cite{mceliece:GenerationRandMatrix}. Beispielsweise \[S_4= -\begin{pmatrix} - 0 & 1 & 1 & 1\\ - 0 & 1 & 1 & 0\\ - 0 & 0 & 1 & 1\\ - 1 & 0 & 0 & 1 -\end{pmatrix} + \begin{pmatrix} + 0 & 0 & 1 & 1\\ + 0 & 0 & 0 & 1\\ + 0 & 1 & 0 & 1\\ + 1 & 0 & 0 & 1 + \end{pmatrix} \] \[ S_4^{-1}= \begin{pmatrix} - 1 & 0 & 1 & 0\\ - 1 & 1 & 0 & 1\\ - 1 & 1 & 1 & 0\\ - 1 & 1 & 0 & 0 + 0 & 1 & 0 & 1\\ + 0 & 1 & 1 & 0\\ + 1 & 1 & 0 & 0\\ + 0 & 1 & 0 & 0\\ \end{pmatrix} \] @@ -126,3 +126,24 @@ Beispiel 0 \end{pmatrix} \] + +\subsection{Public-Key $K_{n,k}$ +\label{mceliece:subsection:k_m}} +Der öffentliche Schlüssel, welcher zum Verschlüsseln verwendet wird, +berechnet sich mit +\[ + K_{n,k}=P_{n}\cdot G_{n,k}\cdot S_{k}\,. +\] +Beispiel +\[ + K_{7,4}= + \begin{pmatrix} + 0 & 0 & 1 & 0\\ + 1 & 0 & 0 & 1\\ + 0 & 0 & 1 & 1\\ + 1 & 1 & 1 & 1\\ + 0 & 1 & 0 & 1\\ + 0 & 1 & 0 & 0\\ + 1 & 0 & 0 & 0 + \end{pmatrix} +\] \ No newline at end of file diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex index 0e2ed1b..3dfc963 100644 --- a/buch/papers/mceliece/funktionsweise.tex +++ b/buch/papers/mceliece/funktionsweise.tex @@ -6,20 +6,7 @@ \section{Funktionsweise \label{mceliece:section:funktionsweise}} \rhead{Funktionsweise} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? +Um den Ablauf des Datenaustausches mittels M \subsection{De finibus bonorum et malorum \label{mceliece:subsection:bonorum}} -- cgit v1.2.1 From 0a784fbf3f8b5acf9103dc3587b4c1cfdcca688b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 11:43:48 +0200 Subject: neue version --- buch/papers/munkres/main.tex | 2 -- buch/papers/munkres/teil1.tex | 8 +++---- buch/papers/munkres/teil3.tex | 52 +++++++++++++------------------------------ 3 files changed, 19 insertions(+), 43 deletions(-) diff --git a/buch/papers/munkres/main.tex b/buch/papers/munkres/main.tex index e5282dc..201e70b 100644 --- a/buch/papers/munkres/main.tex +++ b/buch/papers/munkres/main.tex @@ -13,8 +13,6 @@ \input{papers/munkres/teil1.tex} \input{papers/munkres/teil2.tex} \input{papers/munkres/teil3.tex} -\input{papers/munkres/teil4.tex} -\input{papers/munkres/teil5.tex} \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 3bec61d..a0cc739 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -45,13 +45,13 @@ a_{21}&a_{22}&\dots &a_{2n}\\ a_{n1}&a_{n2}&\dots &a_{nn} \end{pmatrix} \] - -$A$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. + +$A$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ + +kann der Faktor Kosten mit in die Rechnung eingebracht werden. In der Zelle dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. Sie entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. -Die oben ersichtliche Matrix $A$ besitzt Matrix-Elemente. Die Elemente einer Matrix vom Typ $(n,n)$ mit Namen $A$ sind $a_{ij}$ wobei $i$ = 1,..., $n$ ist und $j$ = 1,...,$n$. $a_{ij}$ ist der Eintrag in der $i$-ten Zeile und $j$-ten Spalte der Matrix . Zum Beispiel ist a21 das Element der 2. Zeile und 1. Spalte. $i$ wird auch der Zeilenindex, $j$ der Spaltenindex genannt. - \subsection{Alternative Darstellungen des Zuordnungsproblems \label{munkres:subsection:bonorum}} \subsubsection{Netzwerk} diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 964444c..692bfdf 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -41,53 +41,28 @@ Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. \subsection{Beispiel eines händischen Verfahrens \label{munkres:subsection:malorum}} -Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Die optimale Lösung ist erreicht, wenn genau $n$ Zuordnungen gefunden sind. Das Vorgehen wird in den nachfolgenden Schritten 1-16 beschrieben und auch in der Abbildung 21.5 dargestellt. +Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Es gibt Situationen, in denen man nichts mehr tun muss, um eine optimale Zuordnung zu finden. Eine optimale Zuordnung ohne zusätzliche Kosten ist eine Auswahl genau eines Feldes in jeder Zeile und Spalte, welches 0 enthält. Das Ziel des Algorithmus ist also, die Matrix so zu ändern, dass genügend Nullen in der Matrix vorkommen. Es ist zudem wichtig, dass man nach jeder Modifikation der Matrix testet, ob man bereits eine Zuordnung machen kann, also genügend Nullen hat. +Das Vorgehen wird in den nachfolgenden Schritten 1-6 beschrieben und auch in der Abbildung 21.5 dargestellt. \begin{enumerate} -\item Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl wird bei -allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. +\item Man beginnt mit der Zeilen-Reduktion. Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl, jeweils in rot markiert, wird bei allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. Man erkennt, dass die Nullen mit zwei Linien abdeckbar sind. Das heisst es gibt 2 Spalten bei denen noch keine Zuordnungen möglich sind. -\item Auch in diesem Schritt werden die unvermeidbaren Weg-Kosten abgezogen. Man zieht die kleinste Zahl in jeder Spalte von allen Zahlen in der Spalte ab. +\item Auch im zweiten Schritt werden mittels der Spalten-Reduktion die unvermeidbaren Weg-Kosten abgezogen. Man zieht die kleinste Zahl, wiederum in rot markiert, in jeder Spalte von allen Zahlen in der Spalte ab. +Die Nullen können somit mit 3 Linien abgedeckt werden. Im Idealfall hat die Matrix in jeder Zeile und Spalte bereits genügend viele Nullen, so dass man bereits eine Zuordnung ohne Mehrkosten machen kann. Dies ist jedoch noch nicht der Fall. Es sollen weitere Nullen in die Matrix hineingebracht werden. -\item Bei den nachfolgenden Schritten bleiben dann nur noch die Kosten übrig, die man hat, wenn man eine andere Zuordnung wählt. Hierbei sollen möglichst viele Nullen markiert werden, welche freistehend sind. -(Freistehend bedeutet, sowohl in der jeweiligen Zeile und Spalte nur -eine markierte Null zu haben) +\item Es bleiben jetzt einige Felder übrig, für die noch keine Zuordnung möglich ist. Die kleinste Ziffer wird dabei aus den noch nicht mit blau markierten Zahlen ausgewählt werden. Im Beispiel ist es die Zahl 1. Das Feld mit dem kleinsten Eintrag beinhaltet die Kosten, die unvermeidlich sind, wenn man für diese Felder auch noch eine Zuordnung machen will. Um neue Nullen zu bekommen, lagert man jetzt die Kosten auf die anderen Zeilen und Spalten um. Dies tut man, indem man in allen nicht abgedeckten Feldern die minimalen Kosten subtrahiert und in den blau markierten Kreuzungspunkten dazu addiert. -\item Weiter werden die jeweiligen Zeilen eruiert, bei welchen keine markierte Null vorhanden sind. Diese kennzeichnet man mit einer blauen Fläche. +\item in Schritt 4 sollen jetzt möglichst viele Nullen markiert werden, welche freistehend sind. +Freistehend bedeutet, dass sowohl in der jeweiligen Zeile und Spalte keine andere markierte Null vorhanden ist. -\item In der vorherigen, mit blauer Fläche markierten Zeile die 0 eruieren und dann die dazugehörige Spalte ebenfalls -blau markieren. +\item Alle markierten Nullen werden jetzt in eine 1 umgewandelt. Die restlichen Ziffern in der Matrix, exklusiv die einsen, sollen jetzt ignoriert und durch eine Null ersetzt werden. -\item Im der selben Spalte die markierte Null eruieren und die dazugehörige -Zeile ebenfalls blau kennzeichnen. - -\item Alle Zeilen mit einem gelben Balken durchstreichen, welche KEINE blauen Markierungen haben. - -\item Alle Spalten durchstreichen, welche eine Blaue Markierung besitzt! - -\item In den übrigen Zahlen soll nun die kleinste Ziffer ausgewählt werden, welche nicht schon durchgestrichen sind. -(Im Beispiel ist es die Zahl 1 in rot markiert. (Bei diesem Schritt ist es egal, welche 1 man wählt) - -\item Die eruierte kleinste Ziffer, wird von den nicht durchgestrichenen Ziffern -subtrahiert. Danach muss die Matrix wieder komplettiert werden. (inkl. Unterstreichen der Nullen) - -\item Jeweilige Zahlen eruieren, welche vorgängig doppelt mit einer gelben Fläche durchgestrichen wurden. - -\item Kleinste eruierte Ziffer aus Schritt 9, soll nun auf die zwei in rot markierten Ziffern aus Schritt 11 dazu addiert werden. - -\item In diesem Schritt sollen wiederum von neuem möglichst viele Nullen markiert werden, -welche freistehend sind. Es werden nur die markierten Nullen betrachtet. - -\item Alle markierten Nullen werden jetzt in eine 1 umgewandelt. - -\item Die restlichen Ziffern in der Matrix, exklusiv die einsen, sollen jetzt ignoriert und durch eine Null ersetzt werden. - -\item Zu guter Letzt werden überall wo eine 1 steht, die Zahlen aus der Ausgangsmatrix eingefügt. Nach Einsetzen der Zahlen können die in rot markierten Zahlen aufsummiert werden. Es ergibt der minimalste Transportweg. Im erwähnten Beispiel sind es total 13 Kilometer. +\item Zu guter Letzt werden überall wo eine 1 steht, die Zahlen aus der Ausgangsmatrix eingefügt. Nach Einsetzen der Zahlen können die in rot markierten Zahlen aufsummiert werden. Man erhält den minimalsten Transportweg von total 13 Kilometer. \end{enumerate} \begin{figure} \centering -\includegraphics[width=14cm]{papers/munkres/figures/Ungarische_Methode_Beispiel.png} +\includegraphics[width=8cm]{papers/munkres/figures/Ungarische_Methode_Beispiel.png} \caption{Händisches Beispiel des Munkres Algorithmus, minimalster Transportweg.} \label{munkres:Vr2} \end{figure} @@ -95,6 +70,7 @@ welche freistehend sind. Es werden nur die markierten Nullen betrachtet. \subsection{Zuordnung der Kräne \label{munkres:subsection:malorum}} +Als Resultat des Munkres-Algorithmus kann man jetzt die folgende Zuordnung aus der Matrix ablesen: \begin{itemize} \item Der Kran von Baustelle A1 soll zur Baustelle B2. \item Der Kran von Baustelle A2 soll zur Baustelle B3. @@ -107,4 +83,6 @@ welche freistehend sind. Es werden nur die markierten Nullen betrachtet. \includegraphics[width=3cm]{papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png} \caption{Händisches Beispiel des Munkres Algorithmus, Zuweisung der Kräne } \label{munkres:Vr2} -\end{figure} Wie in Abbildung 21.6 ersichtlich, kann somit dank der Ungarischen Methode sowohl der minimalste Transportweg als auch die optimalste Zuweisung der Kräne auf die neuen Standorte ermittelt werden. \ No newline at end of file +\end{figure} + +In Abbildung 21.6 ist nebst dem minimalsten Transportweg auch ersichtlich, wie die optimalste Zuweisung der Kräne auf die neuen Standorte erfolgen soll. \ No newline at end of file -- cgit v1.2.1 From 6824f0a18d2fe5aa999596b2ad72cc7ee186622a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 11:44:47 +0200 Subject: fehlendes bild --- .../figures/Ungarische_Methode_Beispiel.png | Bin 1179631 -> 485941 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png index fb4d061..242db77 100644 Binary files a/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png and b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png differ -- cgit v1.2.1 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/clifford/3d/common.inc | 24 ++++++ buch/papers/clifford/3d/dq.jpg | Bin 135038 -> 135088 bytes buch/papers/clifford/3d/dq.pdf | Bin 156467 -> 156514 bytes buch/papers/clifford/3d/drehung.jpg | Bin 203814 -> 203830 bytes buch/papers/clifford/3d/drehung.pdf | Bin 224521 -> 224538 bytes buch/papers/clifford/3d/drehung.pov | 37 +-------- buch/papers/clifford/3d/q23.jpg | Bin 77888 -> 85740 bytes buch/papers/clifford/3d/q23.pov | 2 + buch/papers/clifford/3d/q31.jpg | Bin 75576 -> 82876 bytes buch/papers/clifford/3d/q31.pov | 3 + buch/papers/clifford/3d/qq.pdf | Bin 170756 -> 185901 bytes buch/papers/reedsolomon/tikz/Makefile | 7 ++ buch/papers/reedsolomon/tikz/fourier.pdf | Bin 0 -> 59496 bytes buch/papers/reedsolomon/tikz/fourier.tex | 132 +++++++++++++++++++++++++++++++ 14 files changed, 170 insertions(+), 35 deletions(-) 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 diff --git a/buch/papers/clifford/3d/common.inc b/buch/papers/clifford/3d/common.inc index 54aa7fe..55bf6e1 100644 --- a/buch/papers/clifford/3d/common.inc +++ b/buch/papers/clifford/3d/common.inc @@ -245,3 +245,27 @@ cylinder { #end +#macro bogen(v1, v2, center, winkelbogen, farbe) + +union { + #declare phi = 0; + #declare phimax = winkelbogen; + #declare phistep = (phimax - phi) / N; + #while (phi < phimax - phistep/2) + cylinder { + cos(phi ) * v1 + sin(phi ) * v2 + center, + cos(phi+phistep) * v1 + sin(phi+phistep) * v2 + center, + 0.01 + } + sphere { + cos(phi ) * v1 + sin(phi ) * v2 + center, + 0.01 + } + #declare phi = phi + phistep; + #end + pigment { + color farbe + } +} + +#end diff --git a/buch/papers/clifford/3d/dq.jpg b/buch/papers/clifford/3d/dq.jpg index bd44a65..690cfdc 100644 Binary files a/buch/papers/clifford/3d/dq.jpg and b/buch/papers/clifford/3d/dq.jpg differ diff --git a/buch/papers/clifford/3d/dq.pdf b/buch/papers/clifford/3d/dq.pdf index 71727d2..797a558 100644 Binary files a/buch/papers/clifford/3d/dq.pdf and b/buch/papers/clifford/3d/dq.pdf differ diff --git a/buch/papers/clifford/3d/drehung.jpg b/buch/papers/clifford/3d/drehung.jpg index ad7cd47..2347296 100644 Binary files a/buch/papers/clifford/3d/drehung.jpg and b/buch/papers/clifford/3d/drehung.jpg differ diff --git a/buch/papers/clifford/3d/drehung.pdf b/buch/papers/clifford/3d/drehung.pdf index de29085..bc8036e 100644 Binary files a/buch/papers/clifford/3d/drehung.pdf and b/buch/papers/clifford/3d/drehung.pdf differ diff --git a/buch/papers/clifford/3d/drehung.pov b/buch/papers/clifford/3d/drehung.pov index 54b5a2e..b86a2c5 100644 --- a/buch/papers/clifford/3d/drehung.pov +++ b/buch/papers/clifford/3d/drehung.pov @@ -60,24 +60,6 @@ mesh { } } -union { - #declare phi = 0; - #declare phimax = 2*pi/3; - #declare phistep = (phimax - phi) / N; - #while (phi < phimax - phistep/2) - cylinder { - r * (cos(phi ) * e1 + sin(phi ) * e2), - r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2), - 0.01 - } - sphere { r * (cos(phi ) * e1 + sin(phi ) * e2), 0.01 } - #declare phi = phi + phistep; - #end - pigment { - color Blue - } -} - mesh { #declare phi = 0; #declare phimax = 2*pi/3; @@ -100,21 +82,6 @@ mesh { } } -union { - #declare phi = 0; - #declare phimax = 2*pi/3; - #declare phistep = (phimax - phi) / N; - #while (phi < phimax - phistep/2) - cylinder { - r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel, - r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + Vparallel, - 0.01 - } - sphere { r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel, 0.01 } - #declare phi = phi + phistep; - #end - pigment { - color Green - } -} +bogen(r * e1, r * e2, <0,0,0>, 2*pi/3, Blue) +bogen(r * e1, r * e2, Vparallel, 2*pi/3, Green) diff --git a/buch/papers/clifford/3d/q23.jpg b/buch/papers/clifford/3d/q23.jpg index 50ca028..929ef90 100644 Binary files a/buch/papers/clifford/3d/q23.jpg and b/buch/papers/clifford/3d/q23.jpg differ diff --git a/buch/papers/clifford/3d/q23.pov b/buch/papers/clifford/3d/q23.pov index e3e5d49..2e55c96 100644 --- a/buch/papers/clifford/3d/q23.pov +++ b/buch/papers/clifford/3d/q23.pov @@ -7,6 +7,8 @@ circlearrow(<1,0,0>, 0.01*<0,0,-1>, <0, 0, 0>, 1.0, thick, 0.98*pi/2, 4) +bogen( <0,1.7,0>, <-1.7, 0, 0>, <0,0,0>, pi/2, Blue) + arrow( <0,0,0>, <-2.0,0,0>, 0.99*thick, Blue) arrow( <0,0,0>, <0,2.0,0>, 0.99*thick, Blue) arrow( <0,0,0>, <0,0,2.0>, 0.99*thick, Red) diff --git a/buch/papers/clifford/3d/q31.jpg b/buch/papers/clifford/3d/q31.jpg index 10313fa..c240b4f 100644 Binary files a/buch/papers/clifford/3d/q31.jpg and b/buch/papers/clifford/3d/q31.jpg differ diff --git a/buch/papers/clifford/3d/q31.pov b/buch/papers/clifford/3d/q31.pov index 901f838..4abe1ed 100644 --- a/buch/papers/clifford/3d/q31.pov +++ b/buch/papers/clifford/3d/q31.pov @@ -10,3 +10,6 @@ circlearrow(<1,0,0>, 0.01*<0,-1,0>, <0, 0, 0>, 1.0, thick, 0.98*pi/2, 4) arrow( <0,0,0>, <-2.0,0,0>, 0.99*thick, Blue) arrow( <0,0,0>, <0,2.0,0>, 0.99*thick, Red) arrow( <0,0,0>, <0,0,2.0>, 0.99*thick, Blue) + +bogen( <0,0,1.7>, <-1.7, 0, 0>, <0,0,0>, pi/2, Blue) + diff --git a/buch/papers/clifford/3d/qq.pdf b/buch/papers/clifford/3d/qq.pdf index 4c55d57..fd7dbfa 100644 Binary files a/buch/papers/clifford/3d/qq.pdf and b/buch/papers/clifford/3d/qq.pdf differ 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(-) 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(-) 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(-) 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 db34dc83135d3f17713279a0a7265f9381417e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 18:02:12 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 14 ++++++-------- buch/papers/munkres/teil2.tex | 2 +- buch/papers/munkres/teil3.tex | 15 ++++++++------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index a0cc739..6d8762e 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -8,14 +8,14 @@ \rhead{Problemstellung} Das Spezielle an einem Zuordnungsproblem ist, dass es an jedem Ort nur eine Einheit angeboten bzw. nachgefragt wird. Es werden hier nicht Mengen möglichst kostenminimal von einem zum anderen -Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen, oder Bau-Maschinen auf bestimmte Orte, Stellen oder Aufgaben. +Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen oder Bau-Maschinen auf bestimmte Orte, Stellen oder Aufgaben. Um dieses Problem in einer einfachen, händischen Art und Weise zu lösen wurde der Munkres-Algorithmus, auch die Ungarische Methode genannt, entwickelt. Diese Methode ist ein weiteres Hauptthema dieses Kapitels. \subsection{Zuordnungsproblem an einem konkreten Beispiel \label{munkres:subsection:bonorum}} Als Beispiel betrachten wir den Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt, eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne soll möglichst klein werden. -Die Frage lautet, wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte $\mathbb{R}$ angenommen werden. +Die Frage lautet: Wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte $\mathbb{R}$ angenommen werden. Beim Beispiel mit den Kräne gibt es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran (Anzahl 1) von A nach B oder gar kein Kran (Anzahl 0) verschoben werden. Für solche Optimierungsprobleme für reelle Variablen sind verschiedene Verfahren entwickelt worden, die im Allgemeinen auch sehr effizient sind. Das reelle Problem ist also in einer einfachen Art und Weise lösbar. Doch das Problem bleibt, wie in der Illustration oben ersichtlich. Es kann mit ganzzahligen Punkten kein Optimum erzielt werden. Das Ziel ist es an das Optimum so nah wie möglich heranzukommen und dies ist eine vergleichsweise träge und langsame Angelegenheit. @@ -45,17 +45,15 @@ a_{21}&a_{22}&\dots &a_{2n}\\ a_{n1}&a_{n2}&\dots &a_{nn} \end{pmatrix} \] - -$A$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ - +$\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. -In der Zelle dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. -Sie entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. +In den Zellen dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. +Sie entstehen, wenn man z.B. einem Kran $i$ dem Einsatzort $j$ zuordnet. \subsection{Alternative Darstellungen des Zuordnungsproblems \label{munkres:subsection:bonorum}} \subsubsection{Netzwerk} -Ein (Fluss- oder Transport-) Netzwerk (engl. network) ist ein zusammenhängender Graph, bei dem jede Kante einen Fluss aufnehmen kann und jede Kante eine Kapazität für den Fluss hat. Die Menge des Flusses auf einer Kante kann die Kapazität der Kante nicht überschreiten. Ein Fluss muss die Einschränkung erfüllen, dass die Menge des Flusses in einen Knoten gleich der Menge des Flusses aus ihm heraus ist. Ein Fluss-Netzwerk (engl. flow network) ist ein Netzwerk, dessen Kanten zusätzlich Kosten pro Mengeneinheit des Flusses zugeordnet sind. Typischerweise will man einen Fluss durch die Kanten bestimmen, der den Einschränkungen des Netzwerks genügt und dessen Gesamtkosten minimal sind. Im Bild 21.2 dargestellt sind in den eckigen Klammern links die externen Flüsse $[1]$ für jeden Arbeiter und in den eckigen Klammern rechts eine $[-1]$ für jede Tätigkeit. Die Kosten sind entlang der Kanten als Zahlen in Klammern dargestellt. +Ein (Fluss- oder Transport-) Netzwerk (engl. network) ist ein zusammenhängender Graph, bei dem jede Kante einen Fluss aufnehmen kann und jede Kante eine Kapazität für den Fluss hat. Die Menge des Flusses auf einer Kante kann die Kapazität der Kante nicht überschreiten. Ein Fluss muss die Einschränkung erfüllen, dass die Menge des Flusses in einen Knoten gleich der Menge des Flusses aus ihm heraus ist. Ein Fluss-Netzwerk (engl. flow network) ist ein Netzwerk, dessen Kanten zusätzlich Kosten pro Mengeneinheit des Flusses zugeordnet sind. Typischerweise will man einen Fluss durch die Kanten bestimmen, der den Einschränkungen des Netzwerks genügt und dessen Gesamtkosten minimal sind. Im Bild 21.2 dargestellt sind in den eckigen Klammern links die externen Flüsse $[1]$ für jeden Kran und in den eckigen Klammern rechts eine $[-1]$ für jeden Baustellenort. Die Kosten sind entlang der Kanten als Zahlen in Klammern dargestellt. \subsubsection{Matrix} Im Bild 21.3 ist eine typische $4\times 4$ Matrix dargestellt. Die Zeilen A1 bis A4 betreffen z.B. vier bestehende Maschinenlager eines Unternehmers. In den Spalten B1 bis B4 sind vier neue Baustellenorte zugewiesen. Die Zahlen in der Matrix bedeuten z.B. die Distanz in Kilometer von dem jeweiligen Lager zur jeweiligen Baustelle. \subsubsection{Bitpartiter Graph} diff --git a/buch/papers/munkres/teil2.tex b/buch/papers/munkres/teil2.tex index a3b249e..9407c96 100644 --- a/buch/papers/munkres/teil2.tex +++ b/buch/papers/munkres/teil2.tex @@ -9,5 +9,5 @@ Eine Permutation ist eine Anordnung von Objekten in einer bestimmten Reihenfolge oder eine Umordnung von Objekten aus einer vorgegebenen Reihung. Ist eine optimale Zuordnung gefunden, so steht in jeder Zeile und jeder Spalte der Matrix genau ein Element, das zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird auch als Transversale der Matrix bezeichnet. -Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer $n$×$n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen gibt, also $n!$. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigender Permutationen. +Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer $n$×$n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen gibt, also $n!$. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigende Permutationen. diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 692bfdf..2693185 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -11,7 +11,7 @@ Mit der ungarischen Methode können also Optimierungsprobleme gelöst werden, die bei gewichteten Zuordnungen in bipartiten Graphen entstehen. Mit ihr kann die eindeutige Zuordnung von Objekten aus zwei Gruppen so optimiert werden, dass die Gesamtkosten minimiert werden bzw.~der -Gesamtgewinn maximiert werden kann. +Gesamtgewinn maximiert werden kann. \subsection{Geschichte \label{munkres:subsection:malorum}} @@ -32,27 +32,28 @@ um eine $O(n^3)$-Laufzeit zu erreichen. Die Ungarische Methode ist ein kombinatorischer Optimierungsalgorithmus, der das Zuordnungsproblem in polynomieller Zeit löst. Der Begriff polynomielle Laufzeit bedeutet, dass die Laufzeit des Programms -wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei die "Grösse" des Problems. +wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei die ''Grösse'' des Problems. \subsection{Unterschiedliche Anzahl von Quellen und Zielen \label{munkres:subsection:malorum}} -Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z.B. dann der Fall, wenn drei Mitarbeiter vier verschiedene Eignungstests absolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position quadratisch ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise wird eine $3\times 4$ zu einer $4\times 4$-Matrix. +Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z. B. dann der Fall, wenn drei Mitarbeiter vier verschiedene Eignungstests absolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position zu einem Quadrat ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise wird eine $3\times 4$ zu einer $4\times 4$-Matrix. \subsection{Beispiel eines händischen Verfahrens \label{munkres:subsection:malorum}} -Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Es gibt Situationen, in denen man nichts mehr tun muss, um eine optimale Zuordnung zu finden. Eine optimale Zuordnung ohne zusätzliche Kosten ist eine Auswahl genau eines Feldes in jeder Zeile und Spalte, welches 0 enthält. Das Ziel des Algorithmus ist also, die Matrix so zu ändern, dass genügend Nullen in der Matrix vorkommen. Es ist zudem wichtig, dass man nach jeder Modifikation der Matrix testet, ob man bereits eine Zuordnung machen kann, also genügend Nullen hat. +Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Wir gehen von der Kostenmatrix $A$ aus. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschliessend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Es gibt Situationen, in denen man nichts mehr tun muss, um eine optimale Zuordnung zu finden. Eine optimale Zuordnung ohne zusätzliche Kosten ist eine Auswahl genau eines Feldes in jeder Zeile und Spalte, welches 0 enthält. Das Ziel des Algorithmus ist also, die Matrix so zu ändern, dass genügend Nullen in der Matrix vorkommen. Es ist zudem wichtig, dass man nach jeder Modifikation der Matrix testet, ob man bereits eine Zuordnung machen kann, also genügend Nullen hat. Das Vorgehen wird in den nachfolgenden Schritten 1-6 beschrieben und auch in der Abbildung 21.5 dargestellt. \begin{enumerate} -\item Man beginnt mit der Zeilen-Reduktion. Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl, jeweils in rot markiert, wird bei allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. Man erkennt, dass die Nullen mit zwei Linien abdeckbar sind. Das heisst es gibt 2 Spalten bei denen noch keine Zuordnungen möglich sind. +\item Man beginnt mit der Zeilen-Reduktion. Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl, jeweils in rot markiert, wird bei allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. Man erkennt, dass die Nullen mit zwei Linien abdeckbar sind. Das heisst es gibt zwei Spalten bei denen noch keine Zuordnungen möglich sind. \item Auch im zweiten Schritt werden mittels der Spalten-Reduktion die unvermeidbaren Weg-Kosten abgezogen. Man zieht die kleinste Zahl, wiederum in rot markiert, in jeder Spalte von allen Zahlen in der Spalte ab. -Die Nullen können somit mit 3 Linien abgedeckt werden. Im Idealfall hat die Matrix in jeder Zeile und Spalte bereits genügend viele Nullen, so dass man bereits eine Zuordnung ohne Mehrkosten machen kann. Dies ist jedoch noch nicht der Fall. Es sollen weitere Nullen in die Matrix hineingebracht werden. +Die Nullen können somit mit drei Linien abgedeckt werden. Im Idealfall hat die Matrix in jeder Zeile und Spalte bereits genügend viele Nullen, so dass man bereits eine Zuordnung ohne Mehrkosten machen kann. Dies ist jedoch noch nicht der Fall. Es sollen weitere Nullen in die Matrix hineingebracht werden. \item Es bleiben jetzt einige Felder übrig, für die noch keine Zuordnung möglich ist. Die kleinste Ziffer wird dabei aus den noch nicht mit blau markierten Zahlen ausgewählt werden. Im Beispiel ist es die Zahl 1. Das Feld mit dem kleinsten Eintrag beinhaltet die Kosten, die unvermeidlich sind, wenn man für diese Felder auch noch eine Zuordnung machen will. Um neue Nullen zu bekommen, lagert man jetzt die Kosten auf die anderen Zeilen und Spalten um. Dies tut man, indem man in allen nicht abgedeckten Feldern die minimalen Kosten subtrahiert und in den blau markierten Kreuzungspunkten dazu addiert. +Dieser Schritt 3 muss so oft wiederholt werden, bis genügend viele Nullen in der Matrix vorhanden sind. -\item in Schritt 4 sollen jetzt möglichst viele Nullen markiert werden, welche freistehend sind. +\item In Schritt 4 sollen jetzt möglichst viele Nullen markiert werden, welche freistehend sind. Freistehend bedeutet, dass sowohl in der jeweiligen Zeile und Spalte keine andere markierte Null vorhanden ist. \item Alle markierten Nullen werden jetzt in eine 1 umgewandelt. Die restlichen Ziffern in der Matrix, exklusiv die einsen, sollen jetzt ignoriert und durch eine Null ersetzt werden. -- cgit v1.2.1 From 3b4f8802c52ed799fc37d3c1338ac71905c2ed12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 20:13:10 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 6d8762e..97359fb 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -44,8 +44,8 @@ a_{21}&a_{22}&\dots &a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ a_{n1}&a_{n2}&\dots &a_{nn} \end{pmatrix} +\in \mathbb{R}^{n,n} \] -$\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. In den Zellen dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. Sie entstehen, wenn man z.B. einem Kran $i$ dem Einsatzort $j$ zuordnet. -- 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(-) 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 From 7b66eb6617ad735754e009e3801aaa5acbcf2586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 20:34:58 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 2 +- buch/papers/munkres/teil2.tex | 1 - buch/papers/munkres/teil3.tex | 7 +++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 97359fb..aad45cc 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -47,7 +47,7 @@ a_{n1}&a_{n2}&\dots &a_{nn} \in \mathbb{R}^{n,n} \] kann der Faktor Kosten mit in die Rechnung eingebracht werden. -In den Zellen dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. +In den Zellen dieser Matrix sind die Zahlen $a_{i,j}$ dargestellt, welche den Weg in z.B. Kilometer beschreiben. Sie entstehen, wenn man z.B. einem Kran $i$ dem Einsatzort $j$ zuordnet. \subsection{Alternative Darstellungen des Zuordnungsproblems diff --git a/buch/papers/munkres/teil2.tex b/buch/papers/munkres/teil2.tex index 9407c96..2fe24f8 100644 --- a/buch/papers/munkres/teil2.tex +++ b/buch/papers/munkres/teil2.tex @@ -8,6 +8,5 @@ \rhead{Schwierigkeit der Lösung (Permutationen)} Eine Permutation ist eine Anordnung von Objekten in einer bestimmten Reihenfolge oder eine Umordnung von Objekten aus einer vorgegebenen Reihung. Ist eine optimale Zuordnung gefunden, so steht in jeder Zeile und jeder Spalte der Matrix genau ein Element, das zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird auch als Transversale der Matrix bezeichnet. - Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer $n$×$n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen gibt, also $n!$. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigende Permutationen. diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 2693185..fd25a74 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -71,7 +71,8 @@ Freistehend bedeutet, dass sowohl in der jeweiligen Zeile und Spalte keine ander \subsection{Zuordnung der Kräne \label{munkres:subsection:malorum}} -Als Resultat des Munkres-Algorithmus kann man jetzt die folgende Zuordnung aus der Matrix ablesen: +Als Resultat des Munkres-Algorithmus werden in Abbildung 21.6 nebst dem minimalsten Transportweg auch die optimalste Zuweisung der Kräne auf die neuen Standorte ersichtlich. +Es können die folgenden Zuordnungen aus der Matrix abgelesen werden: \begin{itemize} \item Der Kran von Baustelle A1 soll zur Baustelle B2. \item Der Kran von Baustelle A2 soll zur Baustelle B3. @@ -84,6 +85,4 @@ Als Resultat des Munkres-Algorithmus kann man jetzt die folgende Zuordnung aus d \includegraphics[width=3cm]{papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png} \caption{Händisches Beispiel des Munkres Algorithmus, Zuweisung der Kräne } \label{munkres:Vr2} -\end{figure} - -In Abbildung 21.6 ist nebst dem minimalsten Transportweg auch ersichtlich, wie die optimalste Zuweisung der Kräne auf die neuen Standorte erfolgen soll. \ No newline at end of file +\end{figure} \ No newline at end of file -- cgit v1.2.1 From 89874953eb8c9d2e4ac9bb1cfe77a4e7e2ace9a3 Mon Sep 17 00:00:00 2001 From: michael-OST <75078383+michael-OST@users.noreply.github.com> Date: Sun, 8 Aug 2021 21:32:38 +0200 Subject: minor improvements --- buch/papers/reedsolomon/endlichekoerper.tex | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/buch/papers/reedsolomon/endlichekoerper.tex b/buch/papers/reedsolomon/endlichekoerper.tex index d70125b..3019dd7 100644 --- a/buch/papers/reedsolomon/endlichekoerper.tex +++ b/buch/papers/reedsolomon/endlichekoerper.tex @@ -6,19 +6,20 @@ \section{Reed-Solomon in endlichen Körpern \label{reedsolomon:section:endlichekoerper}} \rhead{Reed-Solomon in endlichen Körpern} -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. +Im vorherigen Abschnitt haben wir gesehen, dass wir die Fehler mittels Approximation suchen und somit nur ungefähre Angaben haben, wo sich Fehler aufhalten. +Um dies zu ändern wechseln wir vom komplexen Zahlenraum in endliche Körper. +In endlichen Körpern gibt es keine Approximationen wie bei den rationalen und reellen Zahlen. +Alle Zahlen sind richtig oder falsch, ``fast richtig'' gibt es nicht. +Zudem beschränken sich die 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. -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}. +Um jetzt eine Nachricht in einem 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. +Diese Nachricht wird codiert, übertragen und beim Empfänger wieder decodiert. +In endlichen Körpern können wir jedoch nicht mehr die Fouriertransformation 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. +Auch beim Decodieren müssen wir uns etwas einfallen lassen, wenn die Vorgehensweise mit dem Lokator 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. % %Damit all diese Probleme möglichst verständlich -- cgit v1.2.1 From 28671e349f82540cf0a4b683a6d70206ce621de2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Mon, 9 Aug 2021 10:31:47 +0200 Subject: add chaosspiel.pdf --- buch/papers/ifs/images/chaosspiel.pdf | Bin 0 -> 12525821 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 buch/papers/ifs/images/chaosspiel.pdf diff --git a/buch/papers/ifs/images/chaosspiel.pdf b/buch/papers/ifs/images/chaosspiel.pdf new file mode 100644 index 0000000..23f0dd2 Binary files /dev/null and b/buch/papers/ifs/images/chaosspiel.pdf differ -- cgit v1.2.1 From 787033c0f57c0890d2c248e95df70281546b3313 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 9 Aug 2021 11:21:36 +0200 Subject: orthofehler korrigiert --- buch/papers/reedsolomon/dtf.tex | 67 ++++++++++++------------- buch/papers/reedsolomon/einleitung.tex | 2 +- buch/papers/reedsolomon/figures/plotfft.pdf | Bin 59772 -> 59772 bytes buch/papers/reedsolomon/idee.tex | 74 ++++++++++++++-------------- 4 files changed, 71 insertions(+), 72 deletions(-) diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 179d90d..559ea1b 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -4,15 +4,15 @@ \section{Übertragung mit Hilfe der Diskrten Fourier-Transformation \label{reedsolomon:section:dtf}} \rhead{Umwandlung mit DTF} -Die Grundidee eines fehlerkorrigierenden Code ist, dass Informationen eines Datenpunkt, -durch die Codierung, auf viele übertragene Werte verteilt werden. +Die Grundidee eines fehlerkorrigierenden Code ist, dass Informationen eines Datenpunkt +durch die Codierung auf viele übertragene Werte verteilt werden. Die Decodierung ist in der Lage, den ursprünglichen Datenwert zu rekonstruieren, sogar wenn einzelne wenige übertragene Werte beschädigt worden sind. \par Die Fourier-Transformation transformiert einen einzelnen Wert, eine Dirac-Funktion, auf ein Spektrum, welches sich über die ganze Frequenzachse erstreckt. -Aus der Filtertheorie ist bekannt, dass der ursprüngliche Impuls mehr oder weniger rekonstruierbar ist. -Forausgestzt, es gehen nicht zu viele Frequenzen bei der Übertragung verloren. +Aus der Filtertheorie ist bekannt, dass der ursprüngliche Impuls mehr oder weniger rekonstruierbar ist, + vorausgestzt, es gehen nicht zu viele Frequenzen bei der Übertragung verloren. \par Es liegt daher nahe zu versuchen, die Fourier-Transformation für Codierung und Decodierung zu verwenden. @@ -24,15 +24,15 @@ Das folgende Beispiel soll zeigen, wie Fehlerkorrektur möglich ist. Dieses auf eine Art, die der Funktionsweise des Reed-Solomon-Codes, der später erklärt wird, analog ist. \par -Der Auftrag ist nun 64 Daten zu übertragen, 32 Fehler erkennen und 16 Fehler rekonstruieren. -Mit hilfe der Fourier-Transformation werden die \textcolor{blue}{blauen Datenpunkte} transformiert, +Der Auftrag ist nun 64 Datenwerte zu übertragen, 32 Fehler zu erkennen und 16 Fehler zu rekonstruieren. +Mit Hilfe der Fourier-Transformation werden die \textcolor{blue}{blauen Datenpunkte} transformiert, zu den \textcolor{darkgreen}{grünen Übertragungspunkten}. Durch eine Rücktransformation könnnen die \textcolor{blue}{blauen Datenpunkte} wieder rekonstruiert werden. -\begin{figure} +\begin{figure}%[!ht] \centering \resizebox{\textwidth}{!}{ - \includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft} + \includegraphics[width=\textwidth]{papers/reedsolomon/figures/fourier} %\input{papers/reedsolomon/tikz/plotfftraw.tex} } \caption{Übertragungsabfolge \ref{reedsolomon:subsection:sendbsp}} @@ -41,34 +41,33 @@ Durch eine Rücktransformation könnnen die \textcolor{blue}{blauen Datenpunkte} In der Abbildung \ref{fig:sendorder} wird eine Übertragung Schritt für Schritt illustriert. In der folgenden Aufzählung werden diese einzelne Schritte erklärt und erläutert: \begin{enumerate}[(1)] - \item Das Signal ist mit 64 zufälligrn, ganzzahligen Datenwerten, zwischen 0 und 10. + \item Das Signal besteht aus 64 zufälligen, ganzzahligen Datenwerten zwischen 0 und 10. Für die Rekonstruktion werden zusäzlich Datenwert benötigt, wir fügen deshalb 32 Werte hinzu. - Diese setzen wir willkürlich auf Null und nennen sie Fehlerkorrekturstellen - \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:Fehlerkorrekturstellen}. - Wir erhalten so einen erweiterten Signalvektor der länge $N =96$. + Diese setzen wir willkürlich auf Null und nennen sie Fehlerkorrekturstellen. + Wir erhalten so einen erweiterten Signalvektor der Länge $N =96$. \item Mit der Fourier-Transformation wird der ganze Signalvektor codiert. Dadurch wird jede Informationseinheit auf alle Punkte des Spektrums verteilt. - \item Wir dürfen annehmen, dass bei der Übertragung, nur einzelne übertragene Werte durch Fehler, - verändert werden. + \item Wir dürfen annehmen, dass bei der Übertragung, nur einzelne übertragene + Werte durch Fehler verändert werden. \par - Im Beispiel sind dies die Werte an den Stellen 7, 21 und 75(\textcolor{red}{rote Kurve}), - die um einen Betrag verändert werden. + Im Beispiel sind dies die Werte an den Stellen 6, 20 und 74 (\textcolor{red}{rote Kurve}), + die um einen Betrag verändert werden. Dieser ist bis zu 150-mal kleiner, als die ursprünglichen codierte Werte. Der Empfänger kennt daher im allgemeinen nicht, ob und wo Übertragungsfehler aufgetreten sind. - \item Ohne Übertragungsfehler kann der Signalvektor durch Inverse Fourier-Transformation vollständig - wiederhergestellt werden. + \item Ohne Übertragungsfehler kann der Signalvektor durch inverse Fourier-Transformation vollständig + wiederhergestellt werden. Dazu gehören auch die Nullen an den Fehlerkorrekturstellen 64 - 96. \par - Sind Übertragungsfehler aufgetreten, werden an diesen Stellen, Werte abweichend von Null, auftreten. + Sind Übertragungsfehler aufgetreten, werden an diesen Stellen Werte abweichend von Null auftreten. Somit haben wir bereits Fehler erkannt. - \item Die Werte an den Fehlerkorrekturstellen 64 - 96, die nicht mehr Null sind, nennenwir das Syndrom. - Im Syndrom steckt nur Information über die Fehler, sie werden durch die Inverse Fourier-Transformation erzeugt. - \item Um die Fehler zu rekonstruieren, ann man versuchen, die Information im Syndrom mit Fourier-Transformation zu transformieren. + \item Die Werte an den Fehlerkorrekturstellen 64 - 96, die nicht mehr Null sind, nennen wir das Syndrom. + Im Syndrom steckt nur Information über die Fehler, sie werden durch die inverse Fourier-Transformation erzeugt. + \item Um die Fehler zu rekonstruieren, kann man versuchen, die Information im Syndrom mit Fourier-Transformation zu transformieren. Da das Syndrom nur ein Teil der Fehlerinformation ist, liefert die Fourier-Transformation eine Approximation der Fehler. - Diese Approximation der Fehler ist genau genug, um die Fehlerstellen zu localisieren. + Diese Approximation der Fehler ist genau genug, um die Fehlerstellen zu lokalisieren. \end{enumerate} Im Beispiel haben wir mit dem Syndrom nur etwa ein Drittel der Fehlerinformation, es ist daher zu erwarten, -dass die Fehlerwerte auch nur ein drittel so gross sind. +dass die Fehlerwerte auch nur ein Drittel so gross sind. \par Damit können die Fehler korrigiert und die Orginaldaten wiederhergestellt werden. Der Rekonstruktionsauftrag ist damit erfolgreich ausgeführt. @@ -87,8 +86,7 @@ Die 7 Übertragungspunkte könnten ein Polynom \end{equation} sechsten Grades bestimmen. Durch die Wahl von $\textcolor{gray}{a_3=0}$, $\textcolor{gray}{a_4=0}$, $\textcolor{gray}{a_5=0}$, $\textcolor{gray}{a_6=0}$ -erzeugen wir die, für die Fehlerkorrektur, -nötige Redundanz, ganz analog zum Schritt (1) im Beispiel. +erzeugen wir die für die Fehlerkorrektur nötige Redundanz, ganz analog zum Schritt (1) im Beispiel. \par Die Analogie geht aber noch weiter. Schreibt man @@ -101,25 +99,24 @@ Die Analogie geht aber noch weiter. {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn} ,\label{reedsolomon:DFT} \end{equation} - für die Diskrte-Fourier-Transformation das Polynom + für die diskrete-Fourier-Transformation das Polynom \begin{equation} q(w)= - \frac{{f}_0}{N} + \frac{{f}_1}{N} w^1 + \frac{{f}_2}{N} w^2 + \dots + \frac{{f}_{N-1}}{N} w^{N-1} + \frac{{f}_0}{N} + \frac{{f}_1}{N} w^1 + \frac{{f}_2}{N} w^2 + \dots + \frac{{f}_{N-1}}{N} w^{N-1}. \label{reedsolomon:DFT_polynom} \end{equation} - Im Beispiel werden aber Werte des des Polynoms $q(w)$ für verschieden - \( w = e^{-\frac{2\pi j}{N} k}, k=1, \dots , k=N-1\) übermittelt. + Im Beispiel werden aber Werte des Polynoms \begin{equation} \textcolor{darkgreen}{q(w)}= \frac{\textcolor{blue}{{f}_0}}{N} + \frac{\textcolor{blue}{{f}_1}}{N} w^1 + \frac{\textcolor{blue}{{f}_2}}{N} w^2 + \dots + \frac{\textcolor{blue}{{f}_{63}}}{N} w^{63} + \frac{\textcolor{gray}{{f}_{64}}}{N} w^{64} + \textcolor{gray}{\dots} + \frac{\textcolor{gray}{{f}_{N-1}}}{N} w^{N-1} \label{reedsolomon:DFT_polynom2} \end{equation} -Das syndrom entstand durch die Wahl ${f_{64}}=0$ bis ${f}_{N-1}=0$.(graue koeffizenten) + für verschiedene \( w = e^{-\frac{2\pi j}{N} k}, k=1, \dots ,N-1\) übermittelt. +Das Syndrom entstand durch die Wahl ${f_{64}}=0$ bis ${f}_{N-1}=0$.(graue koeffizenten) \par -Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reelen Zahlen. +Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reeleen Zahlen. Wenn die Approximation nicht mehr genügend gut ist um die Fehler zu erkennen und rekonstruieren, -dann müssen wir von den Reelen-Zahlen weg und zum endlichen Körpern, oder auch Galios-Körper genannt. -Deshalb haben die Mathematiker einen neuen Körper gesucht und ihn in der Endlichkeit gefunden, -dies wird nun im nächsten Abschnitt genauer erklärt. +dann müssen wir von den reeleen Zahlen weg und zum endlichen Körpern, oder auch Galios-Körper genannt. +Dies wird nun im nächsten Abschnitt genauer erklärt. diff --git a/buch/papers/reedsolomon/einleitung.tex b/buch/papers/reedsolomon/einleitung.tex index ca4f398..04f1fe2 100644 --- a/buch/papers/reedsolomon/einleitung.tex +++ b/buch/papers/reedsolomon/einleitung.tex @@ -6,7 +6,7 @@ \section{Einleitung \label{reedsolomon:section:einleitung}} \rhead{Einleitung} -Der Reed-Solomon-Code wurde von den beiden Mathematiker Irving S.Reed und Gustave Solomon, im Jahre 1960, entwickelt. +Der Reed-Solomon-Code wurde von den beiden Mathematiker Irving S. Reed und Gustave Solomon im Jahre 1960 entwickelt. Dabei haben sie das Problem der Fehler bei der Datenübertragung gelöst. In diesem Abschnitt wird möglichst verständlich die mathematische Abfolge, Funktion oder Algorithmus des Reed-Solomon-Code erklärt. diff --git a/buch/papers/reedsolomon/figures/plotfft.pdf b/buch/papers/reedsolomon/figures/plotfft.pdf index b455da5..80adafb 100644 Binary files a/buch/papers/reedsolomon/figures/plotfft.pdf and b/buch/papers/reedsolomon/figures/plotfft.pdf differ diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 2142f88..26e617c 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -5,18 +5,18 @@ \label{reedsolomon:section:idee}} \rhead{Problemstellung} Um Fehler in einer Datenübertragung zu erkennen, könnte man die Daten jeweils doppelt senden, - also immer zwei gleich Werte miteinander und so jeweilige einzelne Fehler erkennen. -Wenn jedoch mehr als nur ein Fehler erkennt werden soll und sogar noch das orginal rekonstruiert werden soll, + also immer zwei gleich Werte miteinander und so jeweils einzelne Fehler erkennen. +Wenn jedoch mehr als nur ein Fehler erkannt werden soll und sogar noch das Orginal rekonstruiert werden soll, dann werden die Daten drei oder vierfach versendet. Doch nur schon um Fehler zu erkennen werden überproportional viele Daten doppelt und dreifach gesendet. Das Problem liegt darin Informationen, Zahlen, zu Übertragen und Fehler zu erkennen und zu korrigieren. -Der Unterschied des Fehler erkennen und korrigiren, ist das beim Erkennen nur die Frage beantwortet wird: Ist die Übertragung fehlerhaft oder nicht? -Beim Korrigieren werden Fehler erkannt und dann zusätzlich noch den original Wert rekonstruieren. -Eine weitere Möglichkeit wäre, dass der Empfänger nach einer fehlerhaften Übertragung die selben Daten nochmals auffordert. -Dies führt wieder zu unerwünschten mehrfach Übertragung. -In Anwendungen des Reed-Soöomon-Code \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung} -ist dies vom Empfänger gesteuerte erneute Übertragen meistens nicht sinnvoll oder sogar unmöglich. +Der Unterschied des Fehler Erkennens und Korrigirens, ist das beim Erkennen nur die Frage beantwortet wird: Ist die Übertragung fehlerhaft oder nicht? +Beim Korrigieren werden Fehler erkannt und dann zusätzlich noch die Originalwerte rekonstruiert. +Eine weitere Möglichkeit wäre, dass der Empfänger nach einer fehlerhaften Übertragung die selben Daten nochmals anfordert. +Dies führt wieder zu unerwünschten mehrfachen Übertragung. +In Anwendungen des Reed-Solomon-Codes Abschnitt \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung} + ist diese vom Empfänger gesteuerte erneute Übertragen meistens nicht sinnvoll oder sogar unmöglich. Der Reed-Solomon-Code macht dies Übertragung auf eine andere, clevere Weise. \subsection{Polynom-Ansatz @@ -34,35 +34,35 @@ p(x) \end{equation}. \par Ein Polynome zweiten Grades ist durch drei Punkte eindeutig bestimmbar. -Bei einer fehlerlosen Übertragung, können wir mit 3 übertragene Werte, +Bei einer fehlerlosen Übertragung können wir mit 3 übertragene Werte das Polynom durch Polynominterpolation volständig rekonstruieren. -Weder erkläre noch erläutere ich die Polynominterpolation, - wir brauchen sie als Funktion, die von Punktn ein Polynom errechnet. -Die koeffizente, des rekonstruierten Polynoms, sind dann unsere gesendten Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}. +Wir brauchen Polynominterpolation als Methode, um aus Punkte wieder Polynom zu berechnen. +Die Koeffizente des rekonstruierten Polynoms sind dann unsere gesendeten Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}. +\par Wie können wir nun Fehler erkennen oder sogar korrigieren? -Versuchen wir doch mehr Werte zu Übertragen, wir nehmen im Beispiel 7 Werte. +Versuchen wir doch mehr Werte zu übertragen, wir nehmen im Beispiel 7 Werte. Übertragen werden nun die \textcolor{darkgreen}{grünen Werte} - dieses 7 Werte \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3\dots 7 . + dieses \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3, \dots , 7. In Abbildung \ref{fig:polynom} ist das zu den \textcolor{blue}{Datenpunkten} gehörige Polynom blau dargestellt, -die \textcolor{darkgreen}{übertragene Werte} des Polynoms sind grün. + die \textcolor{darkgreen}{übertragenen Werte} des Polynoms sind grün. Die grünen Punkte bestimmen die Parabel. -Damit können die Fehler erkannt werden, weil die empfangenen Punktenicht auf der Parabel liegen. -Somit könnendie grauen Punkte auf der Parabel ersetzt werden und sind damit korrigiert. -bis zu wivielen Fehler können wir nun korrigieren im Beispiel korrigieren? +Damit können die Fehler erkannt werden, weil die empfangenen Punkte nicht auf der Parabel liegen. +Somit können die grauen Punkte auf der Parabel ersetzt werden und sind damit korrigiert. +Bis zu wievielen Fehler können wir nun im Beispiel korrigieren? Wir erhöhen nun die Fehleranzahl Schritt für Schritt: \begin{itemize} - \item Bei \textit{1 Fehler} können konkurenzierende Polynome, zusammen mit zwei originalen Punkten fehlleiten. - Dabei kann aber maximal 3 Punkte auf diesem Konkurrenzpolynom sein. - Da 6 übereinstimende grössser als 3 ist haben wir unser original Polynom gefunden. - \item Bei \textit{2 Fehler} kann ein Fehler mit zwei originalen Punkten ein fehlleitendes Konkurrenzpolynom bilden. + \item Bei \textit{1 Fehler} können konkurrenzierende Polynome, zusammen mit zwei originalen Punkten entstehen. + Dabei können aber maximal 3 Punkte auf diesem Konkurrenzpolynom sein. + Da 6 > 3 ist haben wir unser original Polynom gefunden. + \item Bei \textit{2 Fehlern} kann ein Fehler mit zwei originalen Punkten ein Konkurrenzpolynom bilden. Da der zweite Fehler frei wählbar ist, kann dieser auch auf dem Konkurrenzpolynom liegen, wie in der Abbilbung \ref{fig:polynom}. - Nun haben wir, ein originles Polynom mit 5 übereinstimmenden und eine konkurrenzierendes mit 4 Punkten. - Da 5 noch grösser als 4 ist, können wir sagen, welches das original Polynom ist. - \item Bei \textit{3 Fehler} kann genau wie bei 2 Fehler, ein Fehler ein fehlleitendes Polynom mit 2 original Punkten bestimmen werden. + Nun haben wir, ein originales Polynom mit 5 übereinstimmenden und eine konkurrenzierendes mit 4 Punkten. + Da 5 noch grösser als 4 ist, können wir sagen, welches das Originalpolynom ist. + \item Bei \textit{3 Fehlern} kann genau wie bei 2 oder 1 Fehler, ein konkurenzierendes Polynom mit einem Fehler und zwei originalen Punkten bestimmen werden. Auch hier sind die anderen Fehler frei wählbar und liegen auf dem Konkurrenzpolynom. - Nun ist es so das 5 Punkte auf diesem konkurenzierenden Polynom und 4 Punkte auf dem Originalen. - Das Original Polynom kann nicht mehr gefunden werden. - \item Bei \textit{4 Fehler} Es kann noch erkennt weden das Fehler statt gefunden haben, da 3 orginale Punkte das ursprüngliche Polynom ergeben. + Nun ist es so das 5 Punkte auf diesem konkurenzierenden Polynom und 4 Punkte auf dem originalen. + Das Originalpolynom kann nicht mehr gefunden werden. + \item Bei \textit{4 Fehlern} Es kann noch erkannt werden, dass Fehler statt gefunden haben, da 3 orginale Punkte das ursprüngliche Polynom ergeben. Somit haben wir mindestens 2 verschieden Polynome, dass bedeutet Fehler sind entstanden. \item Bei \textit{5 Fehler} Mit den 2 originalen Punkte kann das Originale Polynom nicht mehr erkannt werden und somit auch keine Aussgae gemacht werden ob Fehler statt gefunden haben oder nicht. @@ -75,17 +75,18 @@ Wir erhöhen nun die Fehleranzahl Schritt für Schritt: \caption{Polynom $p(x)$ von der Gleichung\eqref{reedsolomon:equation1}} \label{fig:polynom} \end{figure} +\qedhere \end{beispiel} \section{Anzahl Übertragungswerte bestimmen \label{reedsolomon:section:Fehlerkorrekturstellen}} Um zu bestimmen, wieviel zusätzliche \textcolor{darkgreen}{Übertragungspunkte} notwendig sind, um die Fehler zu korrigieren, muss man zuerst wissen, wieviel \textcolor{blue}{Datenwerte} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen. -Die Anzahl \textcolor{blue}{Datenwerte}, ergeben die anzahl Polynomkoeffizente $k$ und somit den Grad $k-1$. -Die Bestimmung der Anzahl der Fehler $t$, welche korrigiert werden können, brauchen redundanz. +Die Anzahl \textcolor{blue}{Datenwerte}, ergeben die Anzahl Polynomkoeffizente $k$ und somit den Grad $k-1$. +Die Bestimmung der Anzahl der Fehler $t$, welche korrigiert werden können, braucht Redundanz. Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, erkennt man almählich ein Muster. -\begin{table} +\begin{table}%[!ht] \centering \begin{tabular}{ c c | c} \hline @@ -101,17 +102,18 @@ Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, \caption{ Fehlerkorrekturstellen Bestimmung.} \label{tab:fehlerkorrekturstellen} \end{table} -Es müssen mehr Punkte auf dem \textcolor{blue}{originalen Polynom} liegen, als auf dem Konkurenzierenden. -Somit braucht man für die Übertragung pro Fehler 2 übertragungspunkte mehr. +Es müssen mehr Punkte auf dem \textcolor{blue}{originalen Polynom} liegen, als auf dem konkurenzierenden. +Somit braucht man für die Übertragung pro Fehler zwei Übertragungspunkte mehr. Wie in der Tabelle ergibt sich diese Übertragungsanzahl \begin{equation} \textcolor{darkgreen}{u}= - \textcolor{blue}{k}+2\textcolor{red}{t} + \textcolor{blue}{k}+2\textcolor{red}{t}. \label{reedsolomon:equation2} -\end{equation}. +\end{equation} Ein Nebeneffekt ist, dass auch $2t$ Fehler erkannt werden können, nicht aber korrigiert. -Nun haben wir für jede rekonstruktion des Polynoms, die Polynominterpolation gebraucht. +Für die Polynomkoeffizente nach der Übertragung zu rekonstruieren, + haben wir jedes mal die Polynominterpolationmethode angewendet. Diese Polynoiminterpolation ist leider schwierig und fehleranfällig. Deshalb finden wir eine alternative im nächsten Abschnitt. -- cgit v1.2.1 From 098cc6c392283476e84a47f3a193b8f5f79ec413 Mon Sep 17 00:00:00 2001 From: Reto Fritsche Date: Mon, 9 Aug 2021 11:47:16 +0200 Subject: searching latex error --- buch/papers/mceliece/aufbau.tex | 56 ++++++++++++--------- buch/papers/mceliece/funktionsweise.tex | 86 +++++++++++++++++++++++++++------ 2 files changed, 102 insertions(+), 40 deletions(-) diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex index 0ee95fa..f8533d6 100644 --- a/buch/papers/mceliece/aufbau.tex +++ b/buch/papers/mceliece/aufbau.tex @@ -49,7 +49,7 @@ Beispielsweise \] \subsection{Linear-Code-Generatormatrix $G_{n,k}$ -\label{mceliece:subsection:g_m}} +\label{mceliece:subsection:g_nk}} Das wichtigste Element des McEliece-Systems ist ein fehlerkorrigierender Code, der in der Lage ist, $t$ Fehler zu korrigieren. Im Zusammenhang mit McEliece werden dabei meist Goppa-Codes verwendet, @@ -76,7 +76,7 @@ Beispiel \] \subsection{Permutations-Matrix $P_n$ -\label{mceliece:subsection:p_m}} +\label{mceliece:subsection:p_n}} Mit der zufällig generierten Permutationsmatrix $P_n$ wird die Reihenfolge der Bits geändert. Mit der Inversen $P_n^{-1}$ kann die Bitvertauschung rückgängig gemacht werden. Beispiel @@ -106,12 +106,33 @@ Beispiel \end{pmatrix} \] +\subsection{Public-Key $K_{n,k}$ +\label{mceliece:subsection:k_nk}} +Der öffentliche Schlüssel, welcher zum Verschlüsseln verwendet wird, +berechnet sich aus den bereits bekannten Matrizen wiefolgt: +\[ + K_{n,k}=P_{n}\cdot G_{n,k}\cdot S_{k}\,. +\] +Beispiel +\[ + K_{7,4}= + \begin{pmatrix} + 0 & 0 & 1 & 0\\ + 1 & 0 & 0 & 1\\ + 0 & 0 & 1 & 1\\ + 1 & 1 & 1 & 1\\ + 0 & 1 & 0 & 1\\ + 0 & 1 & 0 & 0\\ + 1 & 0 & 0 & 0 + \end{pmatrix} +\] + \subsection{Fehler-Vektor $e_n$ -\label{mceliece:subsection:p_m}} +\label{mceliece:subsection:e_n}} Dieser Vektor der Länge $n$ besteht aus $t$ Einsen, welche zufällig innerhalb des Vektors angeordnet sind, alle anderen Einträge sind Null. Dieser Fehlervektor besitzt also gleich viele Einer, -wie die Anzahl Fehler, die der Linearcode zu korrigieren vermag. +wie die Anzahl Fehler, die der Linearcode der Generatormatrix $G_{n,k}$ zu korrigieren vermag. Beispiel \[ @@ -127,23 +148,10 @@ Beispiel \end{pmatrix} \] -\subsection{Public-Key $K_{n,k}$ -\label{mceliece:subsection:k_m}} -Der öffentliche Schlüssel, welcher zum Verschlüsseln verwendet wird, -berechnet sich mit -\[ - K_{n,k}=P_{n}\cdot G_{n,k}\cdot S_{k}\,. -\] -Beispiel -\[ - K_{7,4}= - \begin{pmatrix} - 0 & 0 & 1 & 0\\ - 1 & 0 & 0 & 1\\ - 0 & 0 & 1 & 1\\ - 1 & 1 & 1 & 1\\ - 0 & 1 & 0 & 1\\ - 0 & 1 & 0 & 0\\ - 1 & 0 & 0 & 0 - \end{pmatrix} -\] \ No newline at end of file +\subsection{Daten-Vektor $d_k$ +\label{mceliece:subsection:d_k}} +In diesem Vektor der länge $k$ ist die Nachricht (oder einen Teil davon) enthalten. + +\subsection{Code-Vektor $c_n$ +\label{mceliece:subsection:c_n}} +In diesem Vektor der länge $n$ ist die verschlüsselte Nachricht (oder einen Teil davon) enthalten. \ No newline at end of file diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex index 3dfc963..e412313 100644 --- a/buch/papers/mceliece/funktionsweise.tex +++ b/buch/papers/mceliece/funktionsweise.tex @@ -6,22 +6,76 @@ \section{Funktionsweise \label{mceliece:section:funktionsweise}} \rhead{Funktionsweise} -Um den Ablauf des Datenaustausches mittels M +Um den Ablauf des Datenaustausches mittels McEliece-Verschlüsselung zu erläutern, +wird ein Szenario verwendet, +bei dem Bob an Alice eine verschlüsselte Nachticht über ein öffentliches Netzwerk zukommen lässt. -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:bonorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. +\subsection{Vorbereitung +\label{mceliece:section:vorbereitung}} +Damit der Nachrichtenaustausch stattfinden kann, muss Alice (Empfängerin) +zuerst ein Schlüsselpaar definieren. +Dazu erstellt sie die einzelnen Matrizen $S_k$, $G_{n,k}$ und $P_n$. +Diese drei einzelnen Matrizen bilden den privaten Schlüssel von Alice +und sollen geheim bleiben. +Der öffentliche Schlüssel $K_{n,k}$ hingegen berechnet sich +aus der Multiplikation der privaten Matrizen\ref{mceliece:subsection:k_nk} +und wird anschliessend Bob, zugestellt. +\subsection{Verschlüsselung +\label{mceliece:section:verschl}} +Bob berechnet nun die verschlüsselte Nachricht $c_n$, indem er seine Daten $d_k$ +mit dem öffentlichen Schlüssel $K_{n,k}$ von Alice multipliziert +und anschliessend durch eine Addition mit einem Fehlervektor $e_n$ einige Bitfehler hinzufügt. +\[ + c_n\,=\,K_{n,k}\cdot d_k + e_n\,. +\] +Dabei wird für jede Nachricht (oder für jedes Nachrichtenfragment) +einen neuen, zufälligen Fehlervektor generiert. +Die verschlüsselte Nachricht $c_n$ wird anschliessend Alice zugestellt. +\subsection{Entschlüsselung +\label{mceliece:section:entschl}} +Alice entschlüsselt die erhaltene Nachricht in mehreren einzelnen Schritten. +Um etwas Transparenz in diese Prozedur zu bringen, wird der öffentliche Schlüssel mit seinen Ursprungsmatrizen dargestellt. +\[ + \begin{align*}​ + c_n\,&=\,K_{n,k}\cdot d_k + e_n \\​ + &= P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + e_n \\​ + \end{align*}​ +\] +Zuerst wird der Effekt der Permutationsmatrix rückgängig gemacht, +indem das Codewort mit dessen Inversen $P_n^{-1}​$ multipliziert wird. + +\[ + \begin{align*}​ + c_{n}''\,=\,P_n^{-1}\cdot \hat{c}_n\,&= P_n^{-1}\cdot P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ + &= G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ + \end{align*}​ +\] + +Eine weitere Vereinfachung ist nun möglich, +weil $P_n^{-1}​$ einerseits auch eine gewöhnliche Permutationsmatrix ist +und andererseits ein zufälliger Fehlerwektor $e_n$ multipliziert mit einer Permutationsmatrix +wiederum einen gleichwertigen, zufälligen Fehlerwektor $e_n'$ ergibt. +\[ + \begin{align*}​ + c_{n}''\,&=\,G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ + &=\,G_{n,k}\cdot S_{k}\cdot d_k + e'_n\quad \quad \quad \quad | \,​ + e'_n\,=\,P_n^{-1}\cdot e_n​ + \end{align*} +\] + +Dank des Linearcodes können nun die Bitfehler, verursacht durch den Fehlervektor $e'_n$, +entfernt werden. +Da es sich bei diesem Schritt nicht um eine einfache Matrixmultiplikation handelt, +wird die Operation durch eine Funktion dargestellt. +Wie dieser Decoder genau aufgebaut ist ist, +hängt vom verwendeten Linearcode ab. + +\[ + \begin{align*}​ + c_{k}'\,&=\text{Linear-Code-Decoder($c''_n$)}\\​ + &=\text{Linear-Code-Decoder($G_{n,k}\cdot S_{k}\cdot d_k + e'_n$)}\\​ + &=S_{k}\cdot d_k + \end{align*} +\] \ No newline at end of file -- cgit v1.2.1 From f54db89a60364ccec5822ab025d2caadb52def8c Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 9 Aug 2021 13:45:45 +0200 Subject: feinheiten --- buch/papers/reedsolomon/Makefile | 2 +- buch/papers/reedsolomon/dtf.tex | 2 +- buch/papers/reedsolomon/figures/fourier.pdf | Bin 0 -> 59770 bytes buch/papers/reedsolomon/idee.tex | 23 +++++++++++----------- buch/papers/reedsolomon/standalone/standalone.pdf | Bin 1835588 -> 1837295 bytes 5 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 buch/papers/reedsolomon/figures/fourier.pdf diff --git a/buch/papers/reedsolomon/Makefile b/buch/papers/reedsolomon/Makefile index 25fd98b..4be963e 100644 --- a/buch/papers/reedsolomon/Makefile +++ b/buch/papers/reedsolomon/Makefile @@ -24,7 +24,7 @@ SOURCES := \ TIKZFIGURES := \ tikz/polynom2.tex \ - tikz/plotfft.tex + tikz/fourier.tex FIGURES := $(patsubst tikz/%.tex, figures/%.pdf, $(TIKZFIGURES)) diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 559ea1b..7c88c16 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -1,7 +1,7 @@ % % dtf.tex -- Idee mit DFT % -\section{Übertragung mit Hilfe der Diskrten Fourier-Transformation +\section{Übertragung mit Hilfe der diskrten Fourier-Transformation \label{reedsolomon:section:dtf}} \rhead{Umwandlung mit DTF} Die Grundidee eines fehlerkorrigierenden Code ist, dass Informationen eines Datenpunkt diff --git a/buch/papers/reedsolomon/figures/fourier.pdf b/buch/papers/reedsolomon/figures/fourier.pdf new file mode 100644 index 0000000..4995141 Binary files /dev/null and b/buch/papers/reedsolomon/figures/fourier.pdf differ diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 26e617c..6ee42ef 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -51,20 +51,20 @@ Somit können die grauen Punkte auf der Parabel ersetzt werden und sind damit ko Bis zu wievielen Fehler können wir nun im Beispiel korrigieren? Wir erhöhen nun die Fehleranzahl Schritt für Schritt: \begin{itemize} - \item Bei \textit{1 Fehler} können konkurrenzierende Polynome, zusammen mit zwei originalen Punkten entstehen. + \item[\textit{1 Fehler}:] Bei einem Fehler können konkurrenzierende, aber falsche Polynome zusammen mit zwei originalen Punkten entstehen. Dabei können aber maximal 3 Punkte auf diesem Konkurrenzpolynom sein. Da 6 > 3 ist haben wir unser original Polynom gefunden. - \item Bei \textit{2 Fehlern} kann ein Fehler mit zwei originalen Punkten ein Konkurrenzpolynom bilden. - Da der zweite Fehler frei wählbar ist, kann dieser auch auf dem Konkurrenzpolynom liegen, wie in der Abbilbung \ref{fig:polynom}. - Nun haben wir, ein originales Polynom mit 5 übereinstimmenden und eine konkurrenzierendes mit 4 Punkten. + \item[\textit{2 Fehler}:] Bei Zwei Fehlern kann ein Fehler mit zwei originalen Punkten ein konkurrenzierendes, aber falsches Polynom bilden. + Da der zweite \textcolor{red}{Fehler} frei wählbar ist, kann dieser auch auf dem \textcolor{gray}{Konkurrenzpolynom} liegen, wie in der Abbilbung \ref{fig:polynom}. + Nun haben wir, ein \textcolor{blue}{originales Polynom} mit \textcolor{darkgreen}{5} übereinstimmenden und eine konkurrenzierendes mit 4 Punkten. Da 5 noch grösser als 4 ist, können wir sagen, welches das Originalpolynom ist. - \item Bei \textit{3 Fehlern} kann genau wie bei 2 oder 1 Fehler, ein konkurenzierendes Polynom mit einem Fehler und zwei originalen Punkten bestimmen werden. + \item[\textit{3 Fehler}:] Bei Drei kann genau wie bei 2 oder 1 Fehler, ein konkurenzierendes Polynom mit einem Fehler und zwei originalen Punkten bestimmen werden. Auch hier sind die anderen Fehler frei wählbar und liegen auf dem Konkurrenzpolynom. Nun ist es so das 5 Punkte auf diesem konkurenzierenden Polynom und 4 Punkte auf dem originalen. Das Originalpolynom kann nicht mehr gefunden werden. - \item Bei \textit{4 Fehlern} Es kann noch erkannt werden, dass Fehler statt gefunden haben, da 3 orginale Punkte das ursprüngliche Polynom ergeben. + \item[\textit{4 Fehler}:] Bei Vier, kann es noch erkannt werden, dass Fehler statt gefunden haben, da 3 orginale Punkte das ursprüngliche Polynom ergeben. Somit haben wir mindestens 2 verschieden Polynome, dass bedeutet Fehler sind entstanden. - \item Bei \textit{5 Fehler} Mit den 2 originalen Punkte kann das Originale Polynom nicht mehr erkannt werden und + \item[\textit{5 Fehler}] Bei Fünf, kann mit den 2 originalen Punkte das Originale Polynom nicht mehr erkannt werden und somit auch keine Aussgae gemacht werden ob Fehler statt gefunden haben oder nicht. \end{itemize} @@ -82,8 +82,8 @@ Wir erhöhen nun die Fehleranzahl Schritt für Schritt: \label{reedsolomon:section:Fehlerkorrekturstellen}} Um zu bestimmen, wieviel zusätzliche \textcolor{darkgreen}{Übertragungspunkte} notwendig sind, um die Fehler zu korrigieren, muss man zuerst wissen, wieviel \textcolor{blue}{Datenwerte} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen. -Die Anzahl \textcolor{blue}{Datenwerte}, ergeben die Anzahl Polynomkoeffizente $k$ und somit den Grad $k-1$. -Die Bestimmung der Anzahl der Fehler $t$, welche korrigiert werden können, braucht Redundanz. +Die Anzahl Datenwerte, ergeben die Anzahl Polynomkoeffizente \textcolor{blue}{$k$} und somit den Grad $k-1$. +Die Bestimmung der Anzahl der Fehler \textcolor{red}{$t$}, welche korrigiert werden können, braucht Redundanz. Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, erkennt man almählich ein Muster. \begin{table}%[!ht] @@ -102,9 +102,10 @@ Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, \caption{ Fehlerkorrekturstellen Bestimmung.} \label{tab:fehlerkorrekturstellen} \end{table} +\par Es müssen mehr Punkte auf dem \textcolor{blue}{originalen Polynom} liegen, als auf dem konkurenzierenden. -Somit braucht man für die Übertragung pro Fehler zwei Übertragungspunkte mehr. -Wie in der Tabelle ergibt sich diese Übertragungsanzahl +Somit braucht man für die Übertragung pro \textcolor{red}{Fehler} zwei Übertragungspunkte mehr. +Wie in der Tabelle ergibt sich diese \textcolor{darkgreen}{Übertragungsanzahl} \begin{equation} \textcolor{darkgreen}{u}= \textcolor{blue}{k}+2\textcolor{red}{t}. diff --git a/buch/papers/reedsolomon/standalone/standalone.pdf b/buch/papers/reedsolomon/standalone/standalone.pdf index dc34b2d..dfa9eea 100644 Binary files a/buch/papers/reedsolomon/standalone/standalone.pdf and b/buch/papers/reedsolomon/standalone/standalone.pdf differ -- cgit v1.2.1 From 49646a239bcd153e6fb2b85f5839d2f1853b33f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Mon, 9 Aug 2021 14:14:19 +0200 Subject: fix right axis --- buch/papers/reedsolomon/tikz/fourier.pdf | Bin 59767 -> 59721 bytes buch/papers/reedsolomon/tikz/fourier.tex | 8 +------- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf index 25e8d6d..7e0198b 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 d151b2b..7b4ccea 100644 --- a/buch/papers/reedsolomon/tikz/fourier.tex +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -48,13 +48,7 @@ \end{scope} \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, + \begin{axis}[title = {\large Codiert\strut}, xtick={0,32,64,96}, axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] -- cgit v1.2.1 From 180fac4090c0d412b7742b89b380fb44d3abb271 Mon Sep 17 00:00:00 2001 From: Reto Fritsche Date: Mon, 9 Aug 2021 23:10:57 +0200 Subject: scratch ready --- buch/papers/mceliece/aufbau.tex | 5 ++- buch/papers/mceliece/einleitung.tex | 10 +++-- buch/papers/mceliece/fazit.tex | 77 ++++++++++++++++++++------------- buch/papers/mceliece/funktionsweise.tex | 74 ++++++++++++++++--------------- buch/papers/mceliece/references.bib | 37 ++++++++-------- 5 files changed, 112 insertions(+), 91 deletions(-) diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex index f8533d6..521488d 100644 --- a/buch/papers/mceliece/aufbau.tex +++ b/buch/papers/mceliece/aufbau.tex @@ -28,7 +28,8 @@ Für kleine Matrizen kann durchaus jedes Matrizenelement zufällig generiert wer wobei danach mithilfe des Gauss-Algorythmusses deren Inverse bestimmt werden kann. Da eine solche Matrix möglicherweise singulär ist, muss in diesem Fall eine neue Zufallsmatrix erzeugt werden. Für grössere Matrizen existieren bessere Methoden, auf welche hier nicht weiter eingegangen wird \cite{mceliece:GenerationRandMatrix}. -Beispielsweise + +Beispiel: \[S_4= \begin{pmatrix} 0 & 0 & 1 & 1\\ @@ -79,6 +80,7 @@ Beispiel \label{mceliece:subsection:p_n}} Mit der zufällig generierten Permutationsmatrix $P_n$ wird die Reihenfolge der Bits geändert. Mit der Inversen $P_n^{-1}$ kann die Bitvertauschung rückgängig gemacht werden. + Beispiel \[ P_7= @@ -113,6 +115,7 @@ berechnet sich aus den bereits bekannten Matrizen wiefolgt: \[ K_{n,k}=P_{n}\cdot G_{n,k}\cdot S_{k}\,. \] + Beispiel \[ K_{7,4}= diff --git a/buch/papers/mceliece/einleitung.tex b/buch/papers/mceliece/einleitung.tex index 48b55b0..cebb8ed 100644 --- a/buch/papers/mceliece/einleitung.tex +++ b/buch/papers/mceliece/einleitung.tex @@ -6,9 +6,11 @@ \section{Einleitung \label{mceliece:section:einleitung}} \rhead{Einleitung} -Das McEliece-Kryptosystem ist eine Variante zum Austausch -von Schlüsselpaaren über ein Netzwerk analog dem Diffie-Hellman-Schlüsseltausch \ref{buch:subsection:diffie-hellman}, -wobei das McEliece-System als Quantencomputerresistent gilt. -Das Verschlüsseln/Entschlüsseln von Nachrichten wird bei diesem System hauptsächlich mit Matrizenoperationen durchgeführt. +Beim McEliece-Kryptosystem handelt es sich um ein asymetrisches Verschlüsselungsverfahren, welches erlaubt, +Daten verschlüsselt über ein Netzwerk zu übermitteln, ohne dass vorab ein gemeinsamer, +geheimer Schlüssel unter den Teilnehmern ausgetauscht werden müsste. +Eine andere, bereits erläuterte Variante einer asymetrischen Verschlüsselung ist das Diffie-Hellman-Verfahren \ref{buch:subsection:diffie-hellman}. +Im Gegensatz zu Diffie-Hellman gilt das McEliece-System als Quantencomputerresistent +und das Verschlüsseln/Entschlüsseln von Nachrichten wird hauptsächlich mit Matrizenoperationen durchgeführt. diff --git a/buch/papers/mceliece/fazit.tex b/buch/papers/mceliece/fazit.tex index 37152bf..3451250 100644 --- a/buch/papers/mceliece/fazit.tex +++ b/buch/papers/mceliece/fazit.tex @@ -6,35 +6,52 @@ \section{Fazit \label{mceliece:section:fazit}} \rhead{Fazit} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:malorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. +Ein kurzer Vergleich des McEliece-Systems +mit dem oft verwendeten RSA-System soll zeigen, wo dessen Vor- und Nachteile liegen. +\subsection{Resourcen} +Eine Eigenheit des McEliece-Systems ist das hinzufügen von Rauschen (mit Fehlervektor $e_n$). +Damit diese mit dem Lienarcode-Decoder wieder entfernt werden können, +wird Redundanz benötigt, +weshalb dessen Kanalefizienz (Nutzbits/Übertragungsbits) sinkt. +Die Schlüsselgrösse des McEliece-Systems ist deshalb so riesig, weil es sich um eine zweidimensionale Matrix handelt, währenddem RSA mit nur zwei Skalaren auskommt. +Das McEliece-System benötigt dafür weniger Rechenaufwand beim Verschlüsseln/Entschlüsseln, da die meisten Operationen mit Matrixmultiplikationen ausgeführt werden können (Aufwand ist in binären Operationen pro Informationsbit)\cite{mceliece:CodeBasedCrypto}. +Beim Rechenaufwand sei noch erwähnt, +dass asymetrische Verschlüsselungen meist nur dazu verwendet werden, +um einen Schlüssel für eine symetrische Verschlüsselung auszutauschen. +\begin{center} +\begin{tabular}{c|c|c} + &McEliece (n=2048, k=1718, t = 30) &RSA (2048, e = 216 + 1)\\ + \hline + Schlüssegrösse: (Public) &429.5 KByte &0.5 KByte \\ + Kanaleffizienz: &83.9 \% &100 \% \\ + Verschlüsselungsaufwand: &1025 &40555 \\ + Entschlüsselungsaufwand: &2311 &6557176, 5 +\end{tabular} +\end{center} +\subsection{Sicherheit} +Grosse unterschiede zwischen den beiden Kryptosystemen gibt es jedoch bei der Sicherheit. +Der Kern der RSA-Verschlüsselung beruht auf dem Problem, eine grosse Zahl in ihre beiden Primfaktoren zu zerlegen. +Bei genügend grossen Zahlen ist diese Zerlegung auch mit den heute besten verfügbaren Computern kaum innerhalb vernünftiger Zeit zu lösen. +Weiter ist aber bekannt, +dass mithilfe des sogenannten Shor-Algorithmuses \cite{mceliece:shor} und einem Quantencomputer auch diese Zerlegung zügig realisiert werden könnte, +was zur Folge hätte, dass die Verschlüsselung von RSA unwirksam würde. +Zurzeit sind die Quantencomputer jedoch noch bei weitem nicht in der Lage, grosse Zahlen mithilfe dieses Algorithmuses zu zerlegen. +Das McEliece-System hingegen beruht auf dem Problem des "Syndrome decoding" (Korrektur von Bitfehlern eines Codewortes, das mit dem entsprechenden Linearcode codiert wurde). +Für das "Syndrome decoding" sind bis heute keine Methoden bekannt, +welche nennenswerte Vorteile gegenüber dem durchprobieren (brute-force) bringen, +auch nicht mithilfe eines Quantencomputers. +\begin{center} +\begin{tabular}{c|c|c} + &McEliece &RSA \\ +\hline + Grundlage Verschlüsselung &Syndrome decoding &Integer factoring\\ + Aufwand (gewöhnliche CPU) &exponential &< exponential \\ + Aufwand (Quantencomputer) &> polynomial &$\mathcal{O}(\log(N)^3)$ +\end{tabular} +\end{center} +Die Verbreitung des McEliece-Kryptosystems ist zurzeit äusserst gering. +Das liegt einerseits an der immensen Grösse des öffentlichen Schlüssels, +andererseits wird aber auch in naher Zukunft nicht mit einem genügend starken Quantencomputer gerechnet, +welcher andere asymetrische Verschlüsselungen gefährden würde. diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex index e412313..93bb1c7 100644 --- a/buch/papers/mceliece/funktionsweise.tex +++ b/buch/papers/mceliece/funktionsweise.tex @@ -19,7 +19,7 @@ Diese drei einzelnen Matrizen bilden den privaten Schlüssel von Alice und sollen geheim bleiben. Der öffentliche Schlüssel $K_{n,k}$ hingegen berechnet sich aus der Multiplikation der privaten Matrizen\ref{mceliece:subsection:k_nk} -und wird anschliessend Bob, zugestellt. +und wird anschliessend Bob zugestellt. \subsection{Verschlüsselung \label{mceliece:section:verschl}} @@ -36,46 +36,48 @@ Die verschlüsselte Nachricht $c_n$ wird anschliessend Alice zugestellt. \subsection{Entschlüsselung \label{mceliece:section:entschl}} Alice entschlüsselt die erhaltene Nachricht in mehreren einzelnen Schritten. -Um etwas Transparenz in diese Prozedur zu bringen, wird der öffentliche Schlüssel mit seinen Ursprungsmatrizen dargestellt. -\[ - \begin{align*}​ - c_n\,&=\,K_{n,k}\cdot d_k + e_n \\​ - &= P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + e_n \\​ - \end{align*}​ -\] +Um etwas Transparenz in diese Prozedur zu bringen, wird der öffentliche Schlüssel $K_{n,k}$ mit seinen Ursprungsmatrizen dargestellt. +\begin{align*} + c_n\,&=\,K_{n,k}\cdot d_k + e_n \\ + &= P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + e_n +\end{align*} Zuerst wird der Effekt der Permutationsmatrix rückgängig gemacht, -indem das Codewort mit dessen Inversen $P_n^{-1}​$ multipliziert wird. - -\[ - \begin{align*}​ - c_{n}''\,=\,P_n^{-1}\cdot \hat{c}_n\,&= P_n^{-1}\cdot P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ - &= G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ - \end{align*}​ -\] - +indem das Codewort mit dessen Inversen $P_n^{-1}$ multipliziert wird. +\begin{align*} + c_{n}''\,=\,P_n^{-1}\cdot c_n\,&= P_n^{-1}\cdot P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\ + &= G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\ +\end{align*} Eine weitere Vereinfachung ist nun möglich, -weil $P_n^{-1}​$ einerseits auch eine gewöhnliche Permutationsmatrix ist -und andererseits ein zufälliger Fehlerwektor $e_n$ multipliziert mit einer Permutationsmatrix -wiederum einen gleichwertigen, zufälligen Fehlerwektor $e_n'$ ergibt. -\[ - \begin{align*}​ - c_{n}''\,&=\,G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ - &=\,G_{n,k}\cdot S_{k}\cdot d_k + e'_n\quad \quad \quad \quad | \,​ - e'_n\,=\,P_n^{-1}\cdot e_n​ - \end{align*} -\] - -Dank des Linearcodes können nun die Bitfehler, verursacht durch den Fehlervektor $e'_n$, +weil $P_n^{-1}$ einerseits auch eine gewöhnliche Permutationsmatrix ist +und andererseits ein zufälliger Fehlervektor $e_n$ multipliziert mit einer Permutationsmatrix +wiederum einen gleichwertigen, zufälligen Fehlervektor $e_n'$ ergibt. +\begin{align*} + c_{n}''\,&=\,G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\ + &=\,G_{n,k}\cdot S_{k}\cdot d_k + e'_n\quad \quad \quad | \, + e'_n\,=\,P_n^{-1}\cdot e_n +\end{align*} +Dank des fehlerkorrigierenden Codes, der durch die implizite Multiplikation mittels $G_{n,k}$ auf die Daten angewendet wurde, +können nun die Bitfehler, verursacht durch den Fehlervektor $e'_n$, entfernt werden. Da es sich bei diesem Schritt nicht um eine einfache Matrixmultiplikation handelt, wird die Operation durch eine Funktion dargestellt. Wie dieser Decoder genau aufgebaut ist ist, hängt vom verwendeten Linearcode ab. +\begin{align*} + c_{k}'\,&=\text{Linear-Code-Decoder($c''_n$)}\\ + &=\text{Linear-Code-Decoder($G_{n,k}\cdot S_{k}\cdot d_k + e'_n$)}\\ + &=S_{k}\cdot d_k +\end{align*} +Zum Schluss wird das inzwischen fast entschlüsselte Codewort $c'_k$ mit der inversen der zufälligen Binärmatrix $S^{-1}$ multipliziert, +womit der Inhalt der ursprünglichen Nachricht nun wiederhergestellt wurde. +\begin{align*} + c_{k}'\,&=S_{k}\cdot d_k \quad | \cdot S_k^{-1}\\ + d'_{k}\,=\,S_{k}^{-1} \cdot c'_k&=S_{k}^{-1} \cdot S_{k}\cdot d_k\\ + &=d_k +\end{align*} -\[ - \begin{align*}​ - c_{k}'\,&=\text{Linear-Code-Decoder($c''_n$)}\\​ - &=\text{Linear-Code-Decoder($G_{n,k}\cdot S_{k}\cdot d_k + e'_n$)}\\​ - &=S_{k}\cdot d_k - \end{align*} -\] \ No newline at end of file +\subsection{Beispiel} + +TODO: +-alle Beispielmatrizen- und Vektoren hierhin zügeln, numerisches Beispiel kreieren\\ +-erläutern des 7/4-codes (ja/nein)? \ No newline at end of file diff --git a/buch/papers/mceliece/references.bib b/buch/papers/mceliece/references.bib index 56f2d19..52aa166 100644 --- a/buch/papers/mceliece/references.bib +++ b/buch/papers/mceliece/references.bib @@ -13,26 +13,6 @@ day = {29} } -@book{mceliece:numerical-analysis, - title = {Numerical Analysis}, - author = {David Kincaid and Ward Cheney}, - publisher = {American Mathematical Society}, - year = {2002}, - isbn = {978-8-8218-4788-6}, - inseries = {Pure and applied undegraduate texts}, - volume = {2} -} - -@article{mceliece:mendezmueller, - author = { Tabea Méndez and Andreas Müller }, - title = { Noncommutative harmonic analysis and image registration }, - journal = { Appl. Comput. Harmon. Anal.}, - year = 2019, - volume = 47, - pages = {607--627}, - url = {https://doi.org/10.1016/j.acha.2017.11.004} -} - @online{mceliece:lorenz, title = {Cryptography based on error correcting codes}, url = {https://algo.epfl.ch/_media/en/projects/lorenz_thesis.pdf}, @@ -40,4 +20,21 @@ year = {2021}, month = {7}, day = {29} +} + +@online{mceliece:shor, + title = {Shor's algorithm}, + url = {https://en.wikipedia.org/wiki/Shor%27s_algorithm}, + year = {2021}, + month = {8}, + day = {9} +} + +@online{mceliece:CodeBasedCrypto, + title = {Code based cryptography and steganography}, + url = {https://www.researchgate.net/publication/268009418_Code_Based_Cryptography_and_Steganography}, + date = {2013-05-30}, + year = {2021}, + month = {8}, + day = {9} } \ No newline at end of file -- cgit v1.2.1 From d1de888f9a0bd9f6940827944943ae6486eeae82 Mon Sep 17 00:00:00 2001 From: Reto Fritsche Date: Mon, 9 Aug 2021 23:29:00 +0200 Subject: =?UTF-8?q?corrected=20some=20=C2=B4=C2=B4...''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/mceliece/fazit.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buch/papers/mceliece/fazit.tex b/buch/papers/mceliece/fazit.tex index 3451250..d618993 100644 --- a/buch/papers/mceliece/fazit.tex +++ b/buch/papers/mceliece/fazit.tex @@ -38,8 +38,8 @@ Weiter ist aber bekannt, dass mithilfe des sogenannten Shor-Algorithmuses \cite{mceliece:shor} und einem Quantencomputer auch diese Zerlegung zügig realisiert werden könnte, was zur Folge hätte, dass die Verschlüsselung von RSA unwirksam würde. Zurzeit sind die Quantencomputer jedoch noch bei weitem nicht in der Lage, grosse Zahlen mithilfe dieses Algorithmuses zu zerlegen. -Das McEliece-System hingegen beruht auf dem Problem des "Syndrome decoding" (Korrektur von Bitfehlern eines Codewortes, das mit dem entsprechenden Linearcode codiert wurde). -Für das "Syndrome decoding" sind bis heute keine Methoden bekannt, +Das McEliece-System hingegen beruht auf dem Problem des ``Syndrome decoding'' (Korrektur von Bitfehlern eines Codewortes, das mit dem entsprechenden Linearcode codiert wurde). +Für das ``Syndrome decoding'' sind bis heute keine Methoden bekannt, welche nennenswerte Vorteile gegenüber dem durchprobieren (brute-force) bringen, auch nicht mithilfe eines Quantencomputers. \begin{center} -- cgit v1.2.1 From 23df345f724b32bb8d5ad6f103c0581458c977a9 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Wed, 11 Aug 2021 17:04:24 +0200 Subject: =?UTF-8?q?=C3=BCbergang=20Endlichek=C3=B6rper=20vereinfacht.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/reedsolomon/dtf.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 7c88c16..d05f60f 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -117,6 +117,6 @@ Das Syndrom entstand durch die Wahl ${f_{64}}=0$ bis ${f}_{N-1}=0$.(graue koeffi \par Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reeleen Zahlen. Wenn die Approximation nicht mehr genügend gut ist um die Fehler zu erkennen und rekonstruieren, -dann müssen wir von den reeleen Zahlen weg und zum endlichen Körpern, oder auch Galios-Körper genannt. -Dies wird nun im nächsten Abschnitt genauer erklärt. - +dann brauchen wir andere varianten. +Um dieser Aproximation zu entkommen, verlassen wir die reeleen Zahlen und gehen zum endlichen Körpern, oder auch Galios-Körper genannt. +Dieser bietet uns eingie Vorteile. \ No newline at end of file -- cgit v1.2.1