MINT lernen

Abituraufgaben: Fehler erkennen: Paritätsbit

Zwei Abituraufgaben zur Parität — vom Paritätsbit bis zur Kreuzparität in Java.

Dein Fortschritt:
0 / 0 Aufgaben
1

Messwerte aus dem Gewächshaus

13 BEAFB I–II

Eine 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).

  1. Beschreiben Sie, wie der Sender das Paritätsbit bei gerader Parität bildet und wie der Empfänger prüft. (3 BE)
  2. Bestimmen Sie die Codewörter zu den Messwerten 1010010, 0011011, 1111110 und prüfen Sie die empfangenen Wörter 10110011, 01011010, 11000110. (4 BE)
  3. Begründen Sie, dass zwei gekippte Bits vom Empfänger nicht bemerkt werden. (3 BE)
  4. 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)
Zwei Rollen: Sender und Empfänger.
Hinweis zu Aufgabe b)
Einsen zählen; beim Prüfen alle 8 Bits.
Hinweis zu Aufgabe c)
Wie ändert jedes gekippte Bit die Anzahl der Einsen?
Hinweis zu Aufgabe d)
1 Tag = 1440 Minuten.

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 %).

2

Kreuzparität für Datenblöcke

15 BEAFB II–III

Fü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).

Gesendeter Block
0123
01011
10110
21100
30011
Empfangener Block (ein Bit gekippt)
0123
01011
10110
21000
30011
  1. Ermitteln Sie die Zeilen- und Spalten-Paritätsbits (gerade Parität) für den Block block in der Abbildung. (3 BE)
  2. 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)
  3. 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)
  4. 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)
Je Zeile und je Spalte die Einsen zählen.
Hinweis zu Aufgabe b)
Welche Zeile, welche Spalte ist ungerade?
Hinweis zu Aufgabe c)
Zwei getrennte Durchläufe: erst Zeilen, dann Spalten; Paritätsbit mitzählen.
Hinweis zu Aufgabe d)
Was sagen die Zeile und die beiden Spalten?

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Zeilen-p: 1, 0, 0, 0; Spalten-p: 0, 0, 1, 0.

0123Zeilen-p
010111
101100
211000
300110
Spalten-p0010
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.