{"id":2780,"date":"2016-02-19T20:48:51","date_gmt":"2016-02-19T18:48:51","guid":{"rendered":"http:\/\/fernuni.digreb.net\/?p=2780"},"modified":"2016-02-26T19:47:43","modified_gmt":"2016-02-26T17:47:43","slug":"hamming-code-und-hamming-abstand","status":"publish","type":"post","link":"https:\/\/fernuni.digreb.net\/?p=2780","title":{"rendered":"Hamming-Code und Hamming-Abstand"},"content":{"rendered":"<p>Im Rahmen meiner Vorbereitungen auf die Klausur habe ich mich etwas l\u00e4nger als gew\u00fcnscht mit der Berechnung des Hamming-Codes und des Hamming-Abstands herumschlagen m\u00fcssen. Der Hamming-Code kann dazu benutzt werden, einfache Fehler in Worten zu finden und zu korrigieren. Wir definieren hier mal zun\u00e4chst den Hamming-Abstand wie im Skript:<\/p>\n<p style=\"padding-left: 30px;\"><strong>Hamming-Abstand<\/strong> (hd) zwischen zwei Worten ist die Anzahl der der Bitstellen, an denen sich zwei Worte\u00a0unterscheiden.<\/p>\n<p style=\"padding-left: 30px;\"><strong>Hamming-Abstand<\/strong> (HD) des gesamten Codes\u00a0ist der Mindestabstand zwischen den einzelnen Worten. D. h. haben wir Worte $$w_1$$,\u00a0$$w_2$$ und\u00a0$$w_1$$, so berechnen wir zun\u00e4chst die Abst\u00e4nde $$hd(w_1, w_2)$$,\u00a0$$hd(w_1, w_3)$$,\u00a0$$hd(w_2, w_3)$$ und\u00a0w\u00e4hlen davon den kleinsten.<\/p>\n<p><strong>Beispiel<\/strong>:\u00a0$$w_1=10110$$,\u00a0$$w_2=11010$$ und\u00a0$$w_1=01010$$. Unser Codewort $$C$$ ist:<\/p>\n<p style=\"padding-left: 30px;\">$$w_1=10110$$<br \/>\n$$w_2=11010$$<br \/>\n$$w_3=01010$$<\/p>\n<p>$$hd(w_1, w_2)=2$$, da sich $$w_1$$ und $$w_2$$ an Stellen 2 und 3 unterscheiden.<\/p>\n<p>$$hd(w_1, w_3)=3$$, da sich\u00a0$$w_1$$ und $$w_3$$ an Stellen 1, 2 und 3 unterscheiden.<\/p>\n<p>$$hd(w_2, w_3)=1$$,\u00a0da sich\u00a0$$w_3$$ und $$w_4$$ nur an Stelle 1 unterscheidet.<\/p>\n<p>Damit ist der Hamming-Abstand des gesamten Codes $$HD(C)=1$$<\/p>\n<h2>Berechnung des Hamming-Codes<\/h2>\n<p>Wie berechnen wir nun den Hamming-Code eines gegebenen Datenworts? Das ist ebenfalls nicht schwer, l\u00e4dt aber dazu ein, sich zu verrechnen.<\/p>\n<p><strong>Beispiel:<\/strong> Hamming-Code f\u00fcr $$01001101$$<\/p>\n<p>1.\u00a0Festlegeung wie viele Pr\u00fcfbits ben\u00f6tigt werden: Jedes Bit an Stelle einer Zweierpotenz $$(1,2,4,8,16,32, &#8230;)$$ wird ein\u00a0Pr\u00fcfbit. Wir haben 8\u00a0Stellen in unserem Datenwort und brauchen daher 4 Pr\u00fcfbits. Macht also insg. 12 Bits in unserem neuen Codewort.<\/p>\n<p>2. Damit sieht unser &#8222;Platzhalter-Codewort&#8220; wie folgt aus:<\/p>\n<pre>_ _ 0 _ 1 0 0 _ 1  1  0  1<\/pre>\n<p>mit Platzhaltern f\u00fcr Pr\u00fcfbits $$C_1, C_2, C_4$$ und $$C_8$$.<\/p>\n<p>3. Nun schauen wir, was der Inhalt der Pr\u00fcfbits wird, denn nicht jedes Datenbit geht in die Berechnung eines jeden\u00a0Pr\u00fcfbits ein. Wir legen folgendes fest (und das wird nun ein komischer Satz, aber keine Sorge, er wird gleich erkl\u00e4rt): Ein Bit aus dem Datenwort auf Postion $$k$$ wird nur dann in die Berechnung des Pr\u00fcfbits $$C_i$$ einbezogen, wenn die bin\u00e4re Darstellung von $$k$$ an Position $$log_2(i)$$ eine $$1$$ hat. Puh!<\/p>\n<p>Aber keine Sorge, das entschl\u00fcsseln wir\u00a0gleich. Frage ist: Welche Datenbits aus unserem Datenwort gehen in die Berechnung von\u00a0$$C_1, C_2, C4$$ und $$C8$$ ein?\u00a0Dazu gehen wir wie folgt vor:<\/p>\n<p>3a. Wir nummerieren die 12 Bits \/ Stellen unseres &#8222;Platzhalter-Codeworts&#8220; von links nach rechts:<\/p>\n<pre>1 2 3 4 5 6 7 8 9 10 11 12\r\n_ _ 0 _ 1 0 0 _ 1  1  0  1<\/pre>\n<p>Z. B. F\u00fcr Pr\u00fcfbit $$C_1$$ muss lt. Definition an Stelle $$log_2(1)=0$$ der bin\u00e4ren Darstellung der\u00a0Position $$k$$ im\u00a0&#8222;Platzhalter-Codeworts&#8220; eine $$1$$ stehen, wenn der Wert von der Position $$k$$ aus dem\u00a0&#8222;Platzhalter-Codeworts&#8220; in die Berechnung von $$C_1$$ einflie\u00dfen darf. Die Werte f\u00fcr $$k$$ sind die Positionen der Datenbits (die Pr\u00fcfbits gehen ja nicht in die Berechnung ein), d. h. $$3,5,6,7,9,10,11$$ und $$12$$. Wir stellen also Positionen 3, 5, 6, 7, 9, 10, 11, 12 zun\u00e4chst in bin\u00e4r dar.<\/p>\n<p>Da wir nun f\u00fcr alle Codeworte $$C_i$$ pr\u00fcfen m\u00fcssen, ob an der betreffenden Stelle $$log_2(i)$$ eine $$1$$ steht, nummerieren wir diese Auflistung der \u00dcbersichtlichkeit halber (nicht vergessen: hier gilt von rechts nach links):<\/p>\n<pre>Bin\u00e4r        8 4 2 1\r\n-------------------- \r\nPosition 03: 0 0 1 1\r\nPosition 05: 0 1 0 1\r\nPosition 06: 0 1 1 0\r\nPosition 07: 0 1 1 1\r\nPosition 09: 1 0 0 1\r\nPosition 10: 1 0 1 0\r\nPosition 11: 1 0 1 1\r\nPosition 12: 1 1 0 0\r\n--------------------\r\nStelle       3 2 1 0<\/pre>\n<ul>\n<li>Wir pr\u00fcfen f\u00fcr alle Positionen\u00a0nun f\u00fcr $$C_1$$, ob an Stelle $$log_2(1) = 0$$ eine $$1$$ steht: bei Position 3, 5, 7, 9, 11 steht das. Also gehen Positionen\u00a03, 5, 7, 9\u00a0und 11 des &#8222;Platzhalter-Codeworts&#8220; in die Berechnung von $$C_1$$ ein.<\/li>\n<li>Nun ist\u00a0$$C_2$$ dran. Die zu pr\u00fcfende Stelle ist\u00a0$$log_2(2) = 1$$. Positiv f\u00fcr Position: 3,6,7,10,11.<\/li>\n<li>F\u00fcr $$C_4$$: Die zu pr\u00fcfende Stelle ist\u00a0$$log_2(4) = 2$$. Positiv f\u00fcr Position:\u00a05,6,7,12.<\/li>\n<li>$$C_8$$: Die zu pr\u00fcfende Stelle ist\u00a0$$log_2(4) = 3$$. Positiv f\u00fcr Position: 9,10,11,12.<\/li>\n<\/ul>\n<p>Ist die Summer der Positionen gerade, so ist $$C_i=0$$. Ist sie ungerade, so ist $$C_i=1$$. Hier noch einmal unser &#8222;Platzhalter-Codewort&#8220; mit nummerierten Stellen:<\/p>\n<pre>1 2 3 4 5 6 7 8 9 10 11 12\r\n_ _ 0 _ 1 0 0 _ 1  1  0  1<\/pre>\n<p>Wir berechnen nun die Pr\u00fcfbits.<\/p>\n<ul>\n<li>$$C_1=0$$, da $$P_3+P_5+P_7+P_9+P_{11}=0+1+0+1+0=2$$ (gerade)<\/li>\n<li>$$C_2=1$$, da $$P_3+P_6+P_7+P_{10}+P_{11}=0+0+0+1+0=1$$ (ungerade)<\/li>\n<li>$$C_4=0$$, da $$P_5+P_6+P_7+P_{12}=1+0+0+1=2$$ (gerade)<\/li>\n<li>$$C_8=1$$, da $$P_9+P_10+P_{11}+P_{12}=1+1+0+1=3$$ (ungerade)<\/li>\n<\/ul>\n<p>4. Nun haben wir unsere Pr\u00fcfbits berechnet uns setzen sie an entsprechender Stelle in unser &#8222;Platzhalter-Codewort&#8220; (Pr\u00fcfbits sind fett):<\/p>\n<pre>1 2 3 4 5 6 7 8 9 10 11 12\r\n<strong>0 1<\/strong> 0 <strong>0<\/strong> 1 0 0 <strong>1<\/strong> 1  1  0  1<\/pre>\n<p>Damit ist unser gesuchtes Hamming-Codewort: $$010010011101$$<\/p>\n<p><strong>Beispiel 2<\/strong>: Versucht es mal selbst mit $$10011010$$<\/p>\n<p><a class=\"spoiler_link_show\" href=\"javascript:void(0)\" onclick=\"wpSpoilerToggle(document.getElementById('id582048010'), this, 'L\u00f6sung zeigen', 'L\u00f6sung verstecken')\">L\u00f6sung zeigen<\/a>\n<div class=\"spoiler_div\" id=\"id582048010\" style=\"display:none\"><\/p>\n<pre><strong>0 1 <\/strong>1 <strong>1 <\/strong>0 0 1 <strong>0 <\/strong>1 0 1 0<\/pre>\n<p><\/div>\n<\/p>\n<h2>Und wieder zur\u00fcck<\/h2>\n<p>Stellt sich die Frage, wie wir eingeschlichene Fehler wieder beseitigt bekommen. Wir bleiben bei unserem ersten Beispiel und nehmen an, das obige Codewort sei falsch \u00fcbertragen worden:<\/p>\n<pre>1 2 3 4 5 6 7 8 9 10 11 12\r\n<strong>0 1<\/strong> 0 <strong>0<\/strong> 1 0 0 <strong>1<\/strong> 1  1  0  1 (korrektes Codewort)\r\n<strong>0 1<\/strong> 0 <strong>0<\/strong> 1 0 0 <strong>1<\/strong> <span style=\"color: #ff0000;\">0<\/span>  1  0  1 (falsch \u00fcbertragenes Codewort, Fehler rot markiert)<\/pre>\n<p>1. Wir empfangen das fehlerhafte Codewort und schreiben uns zun\u00e4chst die Pr\u00fcfbits $$C_i$$ und die zugeh\u00f6rigen Bitpositionen zum Pr\u00fcfbit raus:<\/p>\n<ul>\n<li>$$C_1=0$$, es ist aber $$P_3+P_5+P_7+P_9+P_{11}=0+1+0+0+0=1$$ (ungerade) &#8211;<span style=\"color: #ff0000;\"> Fehler!<\/span><\/li>\n<li>$$C_2=1$$, es ist $$P_3+P_6+P_7+P_{10}+P_{11}=0+0+0+1+0=1$$ (ungerade) &#8211; <span style=\"color: #00ff00;\">OK!<\/span><\/li>\n<li>$$C_4=0$$, es ist $$P_5+P_6+P_7+P_{12}=1+0+0+1=2$$ (gerade) &#8211; <span style=\"color: #00ff00;\">OK!<\/span><\/li>\n<li>$$C_8=1$$, es ist aber $$P_9+P_10+P_{11}+P_{12}=0+1+0+1=2$$ (gerade) &#8211; <span style=\"color: #ff0000;\">Fehler!<\/span><\/li>\n<\/ul>\n<p>2. Wir haben damit in $$C_8$$ und $$C_1$$ einen Fehler. $$8+1=9$$. Der Fehler im Codewort ist also auf in Bit\u00a0<strong>9<\/strong>!<\/p>\n<p>Gar nicht so schwer, oder?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Rahmen meiner Vorbereitungen auf die Klausur habe ich mich etwas l\u00e4nger als gew\u00fcnscht mit der Berechnung des Hamming-Codes und des Hamming-Abstands herumschlagen m\u00fcssen. Der Hamming-Code kann dazu benutzt werden, einfache Fehler in Worten zu finden und zu korrigieren. Wir definieren hier mal zun\u00e4chst den Hamming-Abstand wie im Skript: Hamming-Abstand (hd) zwischen zwei Worten ist &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/fernuni.digreb.net\/?p=2780\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eHamming-Code und Hamming-Abstand\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2780","post","type-post","status-publish","format-standard","hentry","category-fernuni"],"_links":{"self":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/2780","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2780"}],"version-history":[{"count":20,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/2780\/revisions"}],"predecessor-version":[{"id":2800,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/2780\/revisions\/2800"}],"wp:attachment":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2780"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2780"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2780"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}