電腦群組成.其實機器也會出錯.錯誤檢驗與錯誤修正的資料編碼

來源:互聯網
上載者:User

標籤:

  • 周五Java布置的實驗寫了一天,,,心好累
  • 周六上午志願者活動導致睡了一下午晚上又去看錶演,,,心好累
  • 後來發現我的C幣漲了不少,,,驚訝,,,是因為我寫的部落格的原因嗎?,,,開心~
  • 錯誤檢驗與錯誤修正確實是電腦在處理、儲存和傳輸資訊時非常重要的一部分。
  • 就算電腦再強大,處理的資料都是錯誤的,那又有何用?
  • 就算你再努力,方向是錯的,到頭來還不是一場空
  • 就算是人算,也難免會出錯。想起一個遙遠的故事,那個算錯了小數點而自殺提前去天堂佔座的數學家,,,,,,不過似乎自殺的話去不了天堂?不太懂,,,,,,
  • 所謂錯誤,就是對於電腦中的用1和0表示的位元據來說,某個或某些位在某種影響下改變了,比如原本的“0001”的第二位受到了某種神秘的影響,導致資料變成了“0011”,自然是很大的錯誤。
  • 某種神秘的影響包括
    • 電磁幹擾,輻射,震動,,,,,,
    • 裝置的老化、損壞,,,,,,
同位碼
  • 分析一個問題最常見的思維就是從最簡單的情況入手
  • 奇偶檢驗碼的原理:
    • 多設定一個位(檢驗位)來記錄一個位元據也就是一串01裡面所包含的1的個數的奇偶性
    • 根據不同的實現方式,分為奇檢驗和偶檢驗
  • 奇檢驗Odd Parity
    • 檢驗位為1,表示資料(不包含檢驗位)中1的個數為偶數個,加上檢驗位的話也就是由“奇數”個,正所謂奇檢驗
    • 檢驗位為0,表示資料(不包含檢驗位)中1的個數為奇數個,本來就已經是奇數了,那就不需要檢驗位的幫忙了,檢驗位取0就好
  • 偶檢驗Even Parity
    • 和奇檢驗相對稱。
  • 怎麼算?還記得神奇的異或運算嗎?
    • 兩個數做異或運算
      • 相同為0
      • 不同為1
    • 而n個數做異或運算
      • 如果n個數中有奇數個1,則結果為1
      • 如果n個數中有偶數個1,則結果為0
    • 異或大法好,一下就可以得出奇偶性了。
  • 為啥這樣規定?
    • 直覺上我們想,奇檢驗的檢驗位為1,1表示真,也就是資料中“真的有奇數個1”
    • 但是實際在編碼的時候,檢驗位也屬於資料啊!所以奇檢驗的檢驗位為1所表示的“真”的含義,就是所有的資料位元包括檢驗位中1的個數為奇數個。
    • 這樣也方便電腦實現,而不需要單獨把檢驗位挑出來,只需要事先規定好我們用的是奇檢驗還是偶檢驗就可以。
      • 對於奇檢驗,我們把所有的資料包括檢驗位一起做XOR運算,如果結果為1則認為資料沒出錯,否則認為資料有誤。
      • 對於偶檢驗,一起做XOR的結果應當為0才認為資料沒有出錯。
  • 然而奇偶檢驗只能發現“奇數個資料位元的錯誤”,因為“奇數”才能影響原本的奇偶性
  • 不過因為實現起來很簡單,而且實際上占不小比例的錯誤都只是一個位的出錯,所以奇偶檢驗應用很廣泛
海明碼
  • 但畢竟奇偶檢驗的檢驗能力太低,而且只能“檢驗”而不能“錯誤修正”,在資料的準確性要求更高的領域裡,奇偶檢驗顯然就不足以支撐檯面了

  • 格雷(Marcel Golay)於1949年、海明(Richar Hamming)於1950年分別獨立設計了一種具備錯誤修正能力的編碼。後來被人們稱為海明碼。

  • 基於資訊編碼理論的最小碼距的概念,海明碼的最小碼距為3,具有檢查並糾正一位錯誤,檢測兩位錯誤的能力。
    • 最小碼距:在一套編碼系統中,任意一個合法的編碼變成另外一個合法的編碼所必須改變的最少的二進位位元。
    • 如奇偶檢驗的最小碼距為2,這是因為最少需要改變兩個位就可以不改變原本1的個數的奇偶性,從而通過了奇偶檢驗。
細說海明碼
  • 海明碼具有多個檢驗位,具體多少個還得根據原本資料的長度來算。
  • 而且這多個檢驗位是和資料位元混雜在一起的,不過也有規律可循就是了

  • 編碼位設定編號從1開始,分別記為B1、B2、B3……的話

    • 檢驗位:所有編號為2^n的位為檢驗位,即B1、B2、B4、B8……為檢驗位,我們把檢驗位再單獨排序稱為C1、C2、C3、C4……
      • 則有:Ci = B(2^i-1)
    • 資料位元:存放實際的資料,除檢驗位之外依次存放,單獨編碼為D1、D2、D3、D4…..
    • 由於是二進位,實際上這種編碼的方案在二進位下有更為顯然的規律
  • 看錶。我尤其喜歡MarkDown的文法,尤其是表格
編碼位 B1 B2 B3 B4 B5 B6 B7 B8 …
二進位編號 0001 0010 0011 0100 0101 0110 0111 1000 …
對應含義 P1 P2 D1 P3 D2 D3 D4 P4 …
檢驗位 P1 P2 P3 P4 …
資料位元 D1 D2 D3 D4 …
  • 很有美感的規律
    • 檢驗位 Pi 對應的編碼位為 Bj ,則有 j 的二進位編碼有且僅有第i位為1
      • P1,對應2^0=1,對應B1,即“0001”僅有第1位為1
      • P2,對應2^1=2,對應B2,即“0010”僅有第2為為1
      • P3,對應2^2=4,對應B4,即“0100”僅有第3位為1
      • P4,對應2^3=8,對應B8,即“1000”僅有第4位為1
海明碼的編碼方法
  • 具體的編碼方法
    • 資料位元D1、D2、D3、D4……即存放原始的資料
    • 下面講檢驗位要如何得到:
      • 每個檢驗位所負責的資料位元
        • P1:B1、B3、B5、B7……
        • P2:B2、B3、B6、B7……
        • P3:B4、B5、B6、B7……
        • P4:B8、B9、B10、B11……
      • 看上面的大概是很難看出什麼規律,不過我們把 Bj 的 j 寫成二進位的話,那就有一個很美的規律了
        • P1:B0001、B0011、B0101、B0111……
        • P2:B0010、B0011、B0110、B0111……
        • P3:B0100、B0101、B0110、B0111……
        • P4:B1000、B1001、B1010、B1011……
      • 噹噹當,規律就是
        • Pi 所負責的所有的 Bj,其 j 的二進位編碼的第 i 位都是1
        • 也就是對於任意一個 Bj,如果 j 的二進位編碼的第 i 位為1,則 Bj 就會由 Pi 負責。
      • 顯然,一個 Bj 有可能會有多位為1,那麼這一位 Bj 自然也就對應著多個負責的檢驗位
        • 對於檢驗位,由於檢驗位對應的 Bj 的 j 的二進位有且只有一位為1,所以檢驗位實際上必然只對自己負責
        • 對於資料位元,由於對應的 Bj 的 j 的二進位必然有2位以上為1(因為只有1位為1的必然是檢驗位),所以一個資料位元至少被兩個檢驗位所負責
      • 規定好了每個檢驗位所負責的編碼位了之後,那麼檢驗位如何求呢?很簡單,那就是奇偶檢驗
編碼位 B1 B2 B3 B4 B5 B6 B7 B8 …
二進位編號 0001 0010 0011 0100 0101 0110 0111 1000 …
對應含義 P1 P2 D1 P3 D2 D3 D4 P4 …
負責關係P1 P1 D1 D2 D4 …
負責關係P2 P2 D1 D3 D4 …
負責關係P3 P3 D2 D3 D4 …
負責關係P4 P4 …
海明碼的使用方法
  • 那麼我們如何來看待這種美感規律之下的編碼呢?即這種編碼方案下如何檢驗錯誤與錯誤修正呢?
    • 我們說海明碼具有1位的檢驗與錯誤修正能力,和2位的檢驗能力
    • 對於1位的出錯
      • 若為檢驗位,則該檢驗位所對應的一個負責關係將通不過奇偶檢驗
      • 若為資料位元,則該資料位元對應的多個負責關係將通不過奇偶檢驗
      • 那麼對於所有的負責關係,我們按照其負責的檢驗位的順序來產生一個位元字,即如果 Pi 所在的負責關係通不過奇偶檢驗,則該產生的位元字的第 i 位記為1,否則記為0
      • 神奇的事發生了。我們最後得出來的數字,剛剛好就是出錯的那一位
        • 如果是檢驗位出錯,而我們規定檢驗位 Pi 的位置是 B(2^i-1),即 Pi 所在的位置 Bj ,其 j 的二進位編碼有且僅有第 i 位為1,也就是說 Pi 出了錯,而 Pi 的位置剛好是“二進位編碼有且僅有第 i 位為1”的位置。對應關係豈不妙哉
        • 如果是資料位元出錯,而我們探索資料位的編碼位 Bj,其 j總是含有多個為1的位,對於每一個第 i 位為1都對應了一個 Pi,那麼在檢驗的時候,必然導致這多個負責關係 Pi 通不過奇偶檢驗,進而產生的位元字的編碼則如同“光路可逆”一般,正好講每一個第 i 位都設定成了1,也就剛好得出了出錯的資料位元的位置。更妙更妙。
      • 就此而言,海明碼是我所見過的對二進位規則運用最妙的結構之一。
    • 對於2位出錯,仍按上述規則來產生最後的數字,但是此時無法判斷出是哪一位出錯,但產生是數字總不是0。
      • 反證法。如果兩位出錯而產生的數字為0。記Bx和By出錯
      • 1、若 Bx 為檢驗位,設 Bx 對應的檢驗位為 Pi,由於最後的數字為0,這就要求負責關係 Pi 能通過奇偶檢驗,而奇偶檢驗的最小碼距為2,Pi 本身已經出錯了,所以負責關係 Pi 中必然還有一個編碼為要出錯,而這一位只可能是資料位元,即By只能為資料位元。By若為資料位元,則 By 必然對應兩個以上的負責關係,除了負責關係Pi 外,設第二個為負責關係 Pj,則負責關係 Pj 有且只有 By 對應的資料位元出錯,所以負責關係 Pj 必然通不過奇偶檢驗,所以產生的數字必然不是0。矛盾。
      • 2、若 Bx 和 By 均為檢驗位,由1的分析可知不可能。如果假設Bx和By均為檢驗位的話,那麼分別對應了兩個負責關係 Pi 和 Pj,則產生的數字必然不是0。
      • 3、若 Bx 和 By 均為資料位元,則 Bx 和 By 必然分別對應著兩個以上的負責關係。由於每個負責關係均為奇偶檢驗,最小碼距為2,這也就要求所有被 Bx 和 By 涉及到的負責關係都需要同時包含 Bx 和 By 才能保證通過奇偶檢驗,所以 Bx 和 By 就必然是同一個編碼位。矛盾。
    • 對於3位以上的出錯,產生的數字就有可能是0了。這和資料無誤的最後產生的數字相同。如B3、B5和B6。也就是說我們最少需要改變三位,就可以得到另一個在海明碼規則下合法的編碼了。所以最小碼距為3。
  • 實際使用的時候
    • 對於常見的1位出錯,如果我們發現的是檢驗位出錯,但實際是檢驗位出錯並不會影響資料位元,也就是說實際的資料無誤,則實際上並不影響資料的傳輸,可以無須糾正。
    • 對於2位出錯,我們只能判斷“出錯了”。然而實際上我們也無法確定這究竟是一位的出錯還是兩位的出錯。
      • 如果對精度要求不是那麼高的話,一般會預設出錯都是1位出錯,並根據是否是檢驗位來判斷是否需要糾正。
      • 如果要求高的話,那麼“一旦出錯”,則會要求重新發送資料。
    • 對於3位及以上的錯,部分是可以被檢驗出出錯來的,只有較少數情況下,而且這種情況發生的機率也是十分小的,才會“混過了海明碼檢驗”。
迴圈冗餘校正碼
  • CRC碼。Cyclic Redundancy Check。
  • 資料通訊領域中最常用的一種查錯校正碼
  • 資訊欄位和校正欄位的長度可以任意選定,相對于海明碼那種硬性的結構規定,因為運用了更為靈活的數學知識,所以CRC在長度方面極具靈活性
  • 因為不在考試範圍之內,雖然我也憑著興趣研究了一番,然而在過程中極為痛苦,雖然用到了很多數學名詞,然而並沒有讓我感受到數學的美,所以也就不打算在這裡講來讓大家看得痛苦了讓我自己也難受了……
  • 有興趣的可以自行Google百度。
Internet Checksum
  • 查詢相關內容的時候又發現的一種編碼。
  • 不做介紹只記錄下來有這樣一種方法就成
  • 以後如果翻到這篇筆記的話,若仍有興緻,可自行Google百度
  • 感覺這篇部落格有點水,,,,,,不過我主要是想講海明碼,而又沒有合適的配套講的東西
  • 之後我想整理一下編碼,如ASCII、Unicode、UFT,,,這又不只是課本上的一兩頁了。。。比較麻煩而且考試還不考,,不過個人高度興趣就是了。
  • 之後會講內容比較多的處理器,以及指令流的概念、最佳化、調度演算法等等,怕是超出了電腦群組成原理的範圍,因為我也想講講電腦體繫結構裡的內容,尤其是指令的動態調度演算法。

電腦群組成.其實機器也會出錯.錯誤檢驗與錯誤修正的資料編碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.