Messwerte aus dem Gewächshaus
13 BEAFB I–IIEine Wetterstation im Gewächshaus funkt ihre Messwerte als 7-Bit-Datenwörter an einen Empfänger. Zur Fehlererkennung wird an jedes Datenwort ein Paritätsbit mit gerader Parität angehängt (Daten zuerst, Paritätsbit zuletzt).
- Beschreiben Sie, wie der Sender das Paritätsbit bei gerader Parität bildet und wie der Empfänger prüft. (3 BE)
- Bestimmen Sie die Codewörter zu den Messwerten 1010010, 0011011, 1111110 und prüfen Sie die empfangenen Wörter 10110011, 01011010, 11000110. (4 BE)
- Begründen Sie, dass zwei gekippte Bits vom Empfänger nicht bemerkt werden. (3 BE)
- Die Station sendet jede Minute einen Messwert. Berechnen Sie, wie viele Bit pro Tag übertragen werden und wie viele davon Prüfbits sind. (3 BE)
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Hinweis zu Aufgabe d)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Sender: Einsen der 7 Datenbits zählen; ist die Anzahl ungerade, wird 1 angehängt, sonst 0 — das Codewort hat dann eine gerade Anzahl Einsen. Empfänger: Einsen aller 8 Bits zählen; gerade → Wort annehmen, ungerade → Fehler melden und das Wort erneut anfordern.
Erwartungshorizont zu Aufgabe b)
1010010 → 10100101 (3 Einsen), 0011011 → 00110110 (4 Einsen), 1111110 → 11111100 (6 Einsen).
10110011: 5 Einsen → Fehler; 01011010: 4 Einsen → angenommen; 11000110: 4 Einsen → angenommen.
Erwartungshorizont zu Aufgabe c)
Jedes gekippte Bit ändert die Anzahl der Einsen um +1 oder −1. Zwei Änderungen ergeben +2, 0 oder −2 — eine gerade Zahl. Die Parität bleibt gerade, der Empfänger nimmt das falsche Wort an.
Erwartungshorizont zu Aufgabe d)
\(1440\cdot8=11\,520\) Bit pro Tag, davon \(1440\) Prüfbits (12,5 %).
Kreuzparität für Datenblöcke
15 BEAFB II–IIIFür eine Übertragung werden je 16 Datenbits als 4 × 4-Block in einer Reihung int[][] block gespeichert (Zeile z, Spalte s, Index ab 0). Zu jeder Zeile und jeder Spalte wird ein gerades Paritätsbit gebildet (zeilenP, spaltenP).
| 0 | 1 | 2 | 3 | |
|---|---|---|---|---|
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 2 | 1 | 1 | 0 | 0 |
| 3 | 0 | 0 | 1 | 1 |
| 0 | 1 | 2 | 3 | |
|---|---|---|---|---|
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 2 | 1 | 0 | 0 | 0 |
| 3 | 0 | 0 | 1 | 1 |
- Ermitteln Sie die Zeilen- und Spalten-Paritätsbits (gerade Parität) für den Block
blockin der Abbildung. (3 BE) - Empfangen wird der Block mit einem gekippten Bit (zweite Abbildung) zusammen mit den Paritätsbits aus a). Erläutern Sie, wie der Empfänger das Bit findet und korrigiert. (4 BE)
- Implementieren Sie eine Methode
static int[] fehlerPosition(int[][] block, int[] zeilenP, int[] spaltenP), die Zeilen- und Spaltenindex des gekippten Bits zurückgibt bzw.{-1, -1}, wenn alle Paritäten stimmen. (5 BE) - In einer Zeile kippen zwei Bits. Beurteilen Sie, ob die Methode dies erkennt, und bewerten Sie den Einsatz der Kreuzparität. (3 BE)
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Hinweis zu Aufgabe d)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Zeilen-p: 1, 0, 0, 0; Spalten-p: 0, 0, 1, 0.
| 0 | 1 | 2 | 3 | Zeilen-p | |
|---|---|---|---|---|---|
| 0 | 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 | 0 | 0 |
| 2 | 1 | 1 | 0 | 0 | 0 |
| 3 | 0 | 0 | 1 | 1 | 0 |
| Spalten-p | 0 | 0 | 1 | 0 |
Erwartungshorizont zu Aufgabe b)
Zeile 2 enthält mit Paritätsbit 0 nur eine Eins → ungerade. Spalte 1 enthält mit Paritätsbit 0 genau eine Eins → ungerade. Alle anderen Zeilen und Spalten sind gerade. Das gekippte Bit liegt im Schnittpunkt block[2][1]; der Empfänger setzt es von 0 auf 1 zurück.
Erwartungshorizont zu Aufgabe c)
public static int[] fehlerPosition(int[][] block, int[] zeilenP, int[] spaltenP) {
int zeile = -1;
int spalte = -1;
for (int z = 0; z < block.length; z++) {
int einsen = zeilenP[z];
for (int s = 0; s < block[z].length; s++) {
einsen = einsen + block[z][s];
}
if (einsen % 2 == 1) {
zeile = z; // Zeile verletzt die Parität
}
}
for (int s = 0; s < block[0].length; s++) {
int einsen = spaltenP[s];
for (int z = 0; z < block.length; z++) {
einsen = einsen + block[z][s];
}
if (einsen % 2 == 1) {
spalte = s; // Spalte verletzt die Parität
}
}
return new int[] {zeile, spalte};
}Für den Block aus b) liefert die Methode {2, 1}, für den Block aus a) {-1, -1}.
Erwartungshorizont zu Aufgabe d)
Die Zeile bleibt gerade, aber zwei Spalten werden ungerade. Die Methode liefert Zeile −1 und die letzte der beiden Spalten — ein Fehler ist erkennbar (nicht beide Werte −1), aber nicht korrigierbar. Kreuzparität korrigiert Einzelfehler mit wenig Aufwand (8 Prüfbits für 16 Datenbits) und erkennt viele Mehrfachfehler; Bündelfehler in einer Zeile kann sie nicht beheben.
