0 Daumen
641 Aufrufe

Aufgabe Hamming-Code Sichern:

(a) Bestimmen Sie, welcher \( (s, s-q) \) -Hamming-Code für die Sicherung des Datenworts \( D=11001100001 \) geeignet ist. Begründen Sie Ihre Entscheidung.

(b) Sichern Sie nun das Datenwort \( D \) mit einem Hammingcode mit gerader Parität der Prüfbits und geben Sie das komplette, gesicherte Codewort mit Daten- und Prüfbits an. Geben Sie den kompletten Lösungsweg an.

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Bestimmung des geeigneten (s, s-q) -Hamming-Codes

Um zu bestimmen, welcher \( (s, s-q) \) -Hamming-Code für die Sicherung des gegebenen Datenworts \( D=11001100001 \) geeignet ist, müssen wir zuerst die Anzahl der benötigten Prüfbits (\( q \)) berechnen. Diese hängt von der Länge des Datenworts (\( s-q \)) und der Anzahl der zusätzlichen Prüfbits ab, die benötigt werden, um Fehler zu erkennen und zu korrigieren. Die Beziehung zwischen der Länge des gesicherten Codeworts (\( s \)), der Länge des ursprünglichen Datenworts (\( s-q \)) und der Anzahl der Prüfbits (\( q \)) lässt sich wie folgt ausdrücken:

\( 2^q \geq s-q+1 \)

In unserem Fall ist \( s-q = 11 \) (die Länge des Datenworts \( D \)).

(a) Beginnen wir damit, \( q \) zu finden, das diese Bedingung erfüllt:

\( 2^q \geq 11 + q + 1 \)

Wir erhöhen \( q \) schrittweise, bis die Ungleichung erfüllt ist.

- Für \( q = 1 \): \( 2^1 = 2 \), was nicht größer oder gleich \( 11 + 1 + 1 = 13 \) ist.
- Für \( q = 2 \): \( 2^2 = 4 \), was nicht größer oder gleich \( 11 + 2 + 1 = 14 \) ist.
- Für \( q = 3 \): \( 2^3 = 8 \), was nicht größer oder gleich \( 11 + 3 + 1 = 15 \) ist.
- Für \( q = 4 \): \( 2^4 = 16 \), was größer oder gleich \( 11 + 4 + 1 = 16 \) ist.

Daher benötigen wir mindestens \( 4 \) Prüfbits, was zu einem \( (15, 11) \) -Hamming-Code führt.

Sicherung des Datenworts D mittels Hamming-Code mit gerader Parität

(b) Um das Datenwort \( D = 11001100001 \) mit einem \( (15, 11) \)-Hamming-Code zu sichern, folgen wir den allgemeinen Schritten, Prüfbits an bestimmten Positionen einzufügen und diese so zu berechnen, dass jede Teilmenge von Positionen, die einer Potenz von \( 2 \) entspricht, eine gerade Anzahl von Einsen beinhaltet.

Das Datenwort hat eine Länge von 11 Bits, und wir fügen 4 Prüfbits hinzu, was zu einem 15-Bit codierten Wort führt. Die Prüfbits setzen wir an die Stellen, die Potenzen von \( 2 \) entsprechen: Positionen 1, 2, 4, und 8. Das Ergebnis wird wie folgt dargestellt, wobei p die Prüfbits sind und d die Datenbits:

\( XXpXXpXdXdXdXXd \)

Setze D in das Muster:

\( XXpXXpX110010110001 \)

Nun berechnen wir die Prüfbits \( p_1, p_2, p_4 \) und \( p_8 \) so, dass alle Paritätsbits eine gerade Parität aufweisen:

- \( p_1 \) wird so berechnet, dass die Summe der Einsen an den Positionen 1, 3, 5, 7, 9, 11, 13, und 15 eine gerade Zahl ist.
- \( p_2 \) wird so berechnet, dass die Summe der Einsen an den Positionen 2, 3, 6, 7, 10, 11, 14, und 15 eine gerade Zahl ist.
- \( p_4 \) wird so berechnet, dass die Summe der Einsen an den Positionen 4, 5, 6, 7, 12, 13, 14, und 15 eine gerade Zahl ist.
- \( p_8 \) wird so berechnet, dass die Summe der Einsen an den Positionen 8, 9, 10, 11, 12, 13, 14, und 15 eine gerade Zahl ist.

Hier implementieren wir Python-Code, um die Prüfbits zu berechnen und das gesicherte Codewort zu erstellen:

python
def calc_parity_bits(data: str) -> str:
    n = len(data)
    r = 4  # Da wir wissen, dass wir 4 Prüfbits benötigen

    # Positionen der Prüfbits mit Füllwerten
    codeword = ['p']*r + list(data)

    # Berechnung der Positionen für jedes Prüfbit
    for i in range(r):
        position = 2**i
        xor = 0
        for j in range(1, len(codeword) + 1):
            if j & position:
                if codeword[j-1] != 'p':
                    xor ^= int(codeword[j-1])
        codeword[position-1] = str(xor)

    # Umformatierung in ein String-Format
    codewort = ''.join(codeword).replace('p', '')

    return codewort

# Gegebenes Datenwort D
data = "11001100001"
# Berechne das gesicherte Codewort
secured_codeword = calc_parity_bits(data)
print(f"Das gesicherte Codewort mit Prüfbits ist: {secured_codeword}")


Dieser Code fügt die Prüfbits mit gerader Parität entsprechend der Berechnung ein und gibt das vollständige, gesicherte Codewort aus.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community