\section{Codierung}

\subsection{Arten von Codierungen}

\begin{itemize}
	\item \textbf{Zeichencodierung:} Darstellung von Schriftzeichen
	\item \textbf{Zahlencodierung:} Darstellung von Zahlenwerten
	\item \textbf{Anwendungscodierung:} Darstellung von Informationen einer Anwendung
	\item \textbf{Verschlüsselung:} Umcodierung, sodass die Daten nur mit zusätzlichen Informationen entschlüsselt werden können
	\item \textbf{Komprimierung:} Reduzierung der Datenmenge durch Umcodierung
	\item \textbf{Signalcodierung:} Darstellung abstrakter Info als \\Signal/Signalfolge
\end{itemize}

\subsection{Zeichencodierung}

\begin{itemize}
	\item \textbf{ASCII:} 7-Bit-Zeichensatz, viele nationale Zeichen nicht enthalten
	\item \textbf{ISO 8859-X:} 8-Bit-Zeichensatz, erweitert ASCII um nationale Zeichen
	\item \textbf{Unicode:} 8/16/32-Bit-Zeichensatz, enthält fast alle Schriftzeichen, enthält Fortsetzungszeichen
\end{itemize}

\subsection{Zahlencodierung}

\subsubsection{Abzählsysteme}

Jedes Symbol hat einen Symbolwert, aufaddieren der Symbolwerte ergibt den Zahlenwert.

\subsubsection{Fingerabzählsystem}

$A = \{\mathrm{Finger}\}$ \\
$S(\mathrm{Finger}) = 1$ \\
Wertebereich $[0, 10[$ \\
Keine negativen Zahlen möglich, sehr einfach

\subsubsection{Einfache Strichliste}

$A = \{\mid\}$ \\
$S(\mid) = 1$ \\
Wertebereich $[0, \infty[$ \\
Keine negativen Zahlen möglich, sehr einfach, keine Subtraktion möglich, Übersichtlich bis ca. $10$

\subsubsection{erweiterte Strichliste}

$A = \{\mid, \cancel{\mid\mid\mid\mid}\}$ \\
$S(\mid) = 1$ \\
$S(\cancel{\mid\mid\mid\mid}) = 5$ \\
Wertebereich $[0, \infty[$ \\
Sortieren und zusammenfassen wenn möglich \\
Keine negativen Zahlen möglich, einfach, keine Subtraktion möglich, Übersichtlich bis ca. $50$

\subsubsection{Römisches Zahlensystem}

$A = \{I, V, X, L, C, D, M\}$ \\
$S(I) = 1$ \\
$S(V) = 5$ \\
$S(X) = 10$ \\
$S(L) = 50$ \\
$S(C) = 100$ \\
$S(D) = 500$ \\
$S(M) = 1000$ \\
Wertebereich $[0, 3999]$ \\
Keine negativen Zahlen möglich, keine Subtraktion möglich, wenig verständlich, nicht einfach

\subsection{Stellenwertsysteme}

Gängige Stellenwertsysteme:

\begin{itemize}
	\item Dezimalsystem: Basis 10
	\item Binärsystem: Basis 2
	\item Oktalsystem: Basis 8
	\item Hexadezimalsystem: Basis 16
\end{itemize}

Darstellung von negativen Zahlen:

\begin{itemize}
	\item Vorzeichen und Betrag
	\item Einerkomplement
	\item Zweierkomplement
\end{itemize}

Darstellung von Kommazahlen:

\begin{itemize}
	\item \textbf{Bruchdarstellung:} Unendlich viele Möglichkeiten
	\item \textbf{Festkommadarstellung:} Feste Anzahl an Nachkommastellen (Verschiebung des Kommas)
	\item \textbf{Gleitkommadarstellung:} Mantisse und Exponent
\end{itemize}

\subsubsection{IEEE 754}

Sign Bit $S$ statt 2er Komplement. Manitisse $M$ und Exponent $E$. \\
$S \cdot M \cdot 2^E$

\paragraph{Normalisierte Darstellung} \ \\
\textbf{Zwei Optionen:} \\
Mantisse mit genau einer Ziffer vor dem Komma ODER
Manitisse mit $0$ vor dem Komma und erstem Nachkommastellenzeichen $1$

\paragraph{reservierte Bitmuster} \ \\
Exponent $0$: keine Normalisierung, kein Hidden Bit $\to$ Exponent = 1 - Bias \\
$\to$ Mantisse $0$: $\pm 0$ \\
Exponent $2^e - 1$: Zahl nicht darstellbar \\
$\to$ Mantisse $0$: $\pm \infty$ \\
$\to$ Mantisste $\neq 0$: NaN

\paragraph{Umrechnung}
\begin{enumerate}
	\item Vorzeichen merken, weiter mit Betrag
	\item Darstellung als Festkommazahl also Exponent (Basis 10) = 0
	\item Umrechnung als Festkommazahl ins Binärsystem (Mantisse (bei 16 Bit → 10) Stellen nach der 1. “1” berechnen)
	\item Bestimmung von Exponent real durch Kommaverschiebung bei der Mantisse hinter die erste “1” (Normalisierung)
	\item Bestimmung von Exponent gespeichert (Exponent reals + Bias)
	\item Umrechnung Exponent gespeichert ins Binärsystem
	\item Notation des Bitmusters (fehlende Stellen bei Exponent mit führenden “0”, bei Mantisse mit “0” am ende auffüllen, bei zu großen Zahlen → Bitmuster für Unendlich)
\end{enumerate}

\subsubsection{Codierungsmethoden}

\begin{itemize}
	\item Wertecodierung: Wert wird insgesamt codiert
	\item Zifferncodierng: Ziffern werden einzeln codiert
\end{itemize}

\paragraph{BCD (Binary Coded Decimal)} \ \\
4-Bit-Code für jede Dezimalziffer, 0-9 codiert, 1010-1111 reserviert

\paragraph{Gray-Code} \ \\
Wechsel nur einer Bitstelle bei aufeinanderfolgenden Zahlen, um lesefehler zu vermindern.\\
Beginend mit $0\dots0$ je das rechteste Bit invertieren, sodass ein bislang nicht vorkommender Code entsteht.

\subsection{Signalcodierung}

Mögliche Signalarten:

\begin{itemize}
	\item elektrische Signale (z.B. in Computern verwendet)
	\item optische Signale
	\item mechanische Signale
\end{itemize}

\subsubsection{NRZ (Non Return to Zero)}

symmetrische oder single-ended Pegel \\
Während eines Bitintervalls wird ein Signalpegel gehalten.

\begin{itemize}
	\item \textbf{TRG}: Bei jedem Pegelwechsel ist Taktrückgewinnung möglich
	\item \textbf{GSF}: Nur bei symmetrischen Pegel und gleichverteiltung von 0 und 1 Gleichstromfrei.
	\item \textbf{SSH}: Störsicherheit optimal, da nur 2 Pegel
	\item \textbf{BBB}: Halbe Schrittweite, also optimaler Bandbreitenbedarf
\end{itemize}

\subsubsection{RZ (Return to Zero)}

symmetrische oder single-ended Pegel \\
Während eines Bitintervalls wird ein Signalpegel gehalten, in der Mitte des Intervalls wird der Pegel auf 0 zurückgesetzt.

\begin{itemize}
	\item \textbf{TRG}: Bei jeder 1 ist Taktrückgewinnung möglich
	\item \textbf{GSF}: in der Praxis nie Gleichstromfrei.
	\item \textbf{SSH}: Störsicherheit optimal, da nur 2 Pegel
	\item \textbf{BBB}: schlecht (vorallem bei vielen 1)
\end{itemize}

\subsubsection{AMI (Alternate Mark Inversion)}

symmetrische Pegel + 0-Pegel. \\
Zwei Signalpegel für die $1$-Darstellung. \\
Die beiden Signalpegel wechseln sich ab.

\begin{itemize}
	\item \textbf{TRG}: Bei jeder 1 ist Taktrückgewinnung möglich
	\item \textbf{GSF}: nach jeder 2ten 1 Gleichstromfrei (in der Praxis immer)
	\item \textbf{SSH}: Störsicherheit schlecht, da 3 Pegel
	\item \textbf{BBB}: Halbe Schrittweite, also optimaler Bandbreitenbedarf
\end{itemize}

\subsubsection{Manchester}

symmetrische Pegel \\
Darstellung eines Bits mithilfe eines Pegelwechsels in der Mitte des Bitintervalls.\\
z.B. $0 \to 01$ und $1 \to 10$

\begin{itemize}
	\item \textbf{TRG}: immer Taktrückgewinnung möglich
	\item \textbf{GSF}: immer Gleichstromfrei
	\item \textbf{SSH}: optimal, da nur 2 Pegel
	\item \textbf{BBB}: schlecht
\end{itemize}

\subsubsection{TRG ermöglichen}

\begin{enumerate}
	\item \textbf{Startbitsequenz}: \\
	      Vor jedem Datenblock eine Startbitsequenz, die eine Taktrückgewinnung ermöglicht.
	\item \textbf{Bit-Stuffing}: \\
	      Wenn zu viele gleiche Bits hintereinander auftreten, wird ein zusätzliches Bit eingefügt.
	\item \textbf{Blockcodierung}: \\
	      Daten werden in Blöcke der länge n+1 umcodiert, die eine Taktrückgewinnung ermöglichen.
\end{enumerate}
