因為2的0次方,2的1次方,2的2次方...(以下類推)要作為漢明碼 的填入位置,所以先寫成如下這樣 1 2 3 4 5 6 7 8 9 先在紙上寫出1-9再將資料 1 1 0 1 0 由左至右順序填入 為什麼有四個空格(或者說怎麼知道要空這四格),是因為有一個 公式:2^K>=M+K+1(M就是資料位元有5,所以2^K要>=5+K+1,算出 K=4) 接下來再畫一個如下的表 8 4 2 1 ←這一行只是方便我們看十進位的值是多少 1 0 0 0 □ ←先留空格是因為還不知道該填什麼 2 0 0 □ 0 填表的方式是 3 0 0 1 1 (a)若資料為 0 則相對應的位置填 0。 4 0 □ 0 0 (b)若資料為 1 則以其相對應的位置值 5 0 1 0 1 化成二進位碼,並填入相對應的位置中。 6 0 0 0 0 ←所以這一行才會都是0 7 0 1 1 1 ←這一行就是因為上面7的地方是1所以改為 8 □ 0 0 0 二進制後填入 9 0 0 0 0 ←這一行也都是0 --------------------- 再來就要依另一個規則決定漢明碼:各數位的 1 值個數需為偶數個 依此原則決定所有漢明碼的值 8 4 2 1 1 0 0 0 □ ←空格填1,最右邊這行由上往下數有3個1,如 2 0 0 □ 0 果要湊成偶數個1,則空格要填入1 3 0 0 1 1 4 0 □ 0 0 ←空格填0,因為由上往下數已經有2個1,所以 5 0 1 0 1 不用另外填1 6 0 0 0 0 7 0 1 1 1 8 □ 0 0 0 9 0 0 0 0 --------------------- 再回到剛剛寫的兩列數字 1 2 3 4 5 6 7 8 9 1 1 0 1 0 1 0 0 0 這時候就知道空白該填入什麼了 ---------------------------------- 1 0 1 0 1 0 1 0 0 所以兩個合併出來的就是漢明碼 也就是(101010100) ------------------------分隔線------------------------------ 再來舉錯誤更正 題目:101010101 一樣先寫出1-9,這次不用什麼公式了,因為資料就是9位元,而且我們 現在要反推,所以也不用空格 1 2 3 4 5 6 7 8 9 1 0 1 0 1 0 1 0 1 ←同樣由左至右順序填入 再來畫一個表格,照上面所說的填表方式填入 8 4 2 1 1 0 0 0 1 2 0 0 0 0 3 0 0 1 1 4 0 0 0 0 5 0 1 0 1 6 0 0 0 0 7 0 1 1 1 8 0 0 0 0 9 1 0 0 1 ------------------- 這時候可以記一個規則,一行內有奇數個1則線下方填1,反之,有偶數個1 則線下方填0。所以可以把表改成這樣: 8 4 2 1 1 0 0 0 1 2 0 0 0 0 3 0 0 1 1 4 0 0 0 0 5 0 1 0 1 6 0 0 0 0 7 0 1 1 1 8 0 0 0 0 9 1 0 0 1 ------------------- 1 0 0 1 把線下方取得的二進位碼轉成十進位得到9,這代表第"9"個位元出錯了, 所以把原來題目(101010101)的第9個位元(一樣由左往右算)改成0, 得到答案(101010100。其實就是第一題的漢明碼啦^_^)
文章出處:http://hwtm.pixnet.net/blog/post/566437
解碼時如果為正確的位元,斜線下方應為0000(不論當初設計是奇同位或是偶同位),但斜線下方現在為1001,表示上排的8,4,2,1當中的8與1出現錯誤,而對應左方數字1~9的位元位置,只有當位元9(9=8+1)錯誤時才有可能造成上排8與1位置"同時"出錯,故證明位元資訊當中位置9應改為0,才能解碼出正確的資訊。
回覆刪除