日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据链路层差错控制——奇偶校验码、循环冗余码和汉明码(海明码)

發布時間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据链路层差错控制——奇偶校验码、循环冗余码和汉明码(海明码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

差錯控制

傳輸中的差錯由噪聲引起。一類稱為熱噪聲,是信道所固有的、持續的,并且隨機的。另一類是外界環境造成的短暫的沖擊噪聲。熱噪聲可以通過提升信噪比降低干擾。而后者不可以通過提升信號幅度來避免干擾,帶來差錯

通常采用編碼技術來進行差錯控制,主要有兩類:自動重傳請求(ARQ)和前向控制(FEC)。在ARQ方式中,接收端只進檢錯,而不進行糾錯。而在FEC方式中,不僅進行檢錯,還可以檢測出二進制數碼錯誤位置,并加以糾正。常見的檢錯編碼有奇偶校驗碼和循環冗余校驗碼海明碼是常用的糾錯編碼

奇偶校驗碼

包含奇校驗偶校驗。由n-1位信息元和1位校驗元組成,屬于冗余編碼技術。如果是奇校驗,在添加一個校驗碼之后,碼長為n的碼字中1的個數為奇數個。在偶校驗中,添加1位校驗碼之后,碼字中1的個數為偶數個。

循環冗余校驗碼(CRC)

又稱多項式碼。將一個由二進制數位串組成的代碼和一個僅有0和1兩個系數的多項式建立一一對應關系。例如:1110011有7位,其對應的多項式為X6+X5+X4+X+1X^6+X^5+X^4+X+1X6+X5+X4+X+1,而多項式X5+X4+X2+XX^5+X^4+X^2+XX5+X4+X2+X對應的二進制碼串為110110.

CRC檢錯過程為:發送端發送一個m bit的幀,并生成一個r bit的序列,稱為幀檢驗序列。發送方和接受方事先約定一個多項式G(x)G(x)G(x),使這個帶檢驗碼的幀正好被G(x)G(x)G(x)整除。從而進行檢驗。

幀檢驗序列的計算過程為:假設一幀有m位,其對應的多項式為M(x)M(x)M(x)

  • 加0操作。假設約定好的多項式G(x)G(x)G(x)的階為rrr,在待發送的m幀后面加上rrr個0.
  • 模2除法操作。利用模2除法,用G(x)G(x)G(x)去除(1)中得到的數據串,得到的余數即為幀檢驗序列,共rrr位,前面的0不可省略。(PS:模2運算加減法滿足異或操作,乘除法類似二進制運算)
  • 幀檢驗序列(冗余碼)的計算舉例:設G(x)=1101G(x)=1101G(x)=1101(即r=3r=3r=3),待傳送數據M=101001M=101001M=101001(即m=6m=6m=6),經模2除法運算后的結果是:商Q=110101Q=110101Q=110101(沒有實際用途),余數為R=001R=001R=001。所以發送出去的數據為101001001.

    海明碼

    海明碼可以發現雙比特錯誤,但只能糾正單比特錯誤。海明碼將碼字內的位從左至右依次編號,編號為2的冪的位為校驗位,其余位填入要傳輸的m位數據。將編號為k的數據位改寫成2的冪的和,例如11=1+2+8,29=1+4+8+16。編號為k的數據僅由擴展式中所示編號的位檢測。

    m個信息位插入rrr個校驗位組成m+r位碼字,他們必須滿足的關系是2r≥m+r+12^{r} \geq m+r+12rm+r+1.以典型的4位數據編碼為例,海明碼加入3個校驗位。
    數據位:1位 2位 3位 4位 5位 6位 7位
    代碼:P1P2D1P3D2D3D4P_{1} P_{2} D_{1} P_{3} D_{2} D_{3} D_{4}P1?P2?D1?P3?D2?D3?D4?
    其中PPP為校驗位,DDD為數據位。

    以數據碼1101為例。此時D1=1,D2=1,D3=0,D4=1D_{1}=1,D_{2}=1,D_{3}=0,D_{4}=1D1?=1,D2?=1,D3?=0,D4?=1。對于7位碼字的編號為(4位數據,3位檢驗):1位=1,2位=2,3位=1+2,4位=4,5位=1+4,6位=2+4,7位=1+2+4。因此,P1P_{1}P1?所檢驗的位數為1,3,5,7(碼字編號中對應數字1的)。另P1⊕D1⊕D2⊕D4=0P_{1} \oplus D_{1} \oplus D_{2} \oplus D_{4}=0P1?D1?D2?D4?=0,求得P1=1P_{1}=1P1?=1P2P_{2}P2?所檢驗的數據位為2,3,6,7(碼字編號中對應數字2的)。令P2⊕D1⊕D3⊕D4=0P_{2} \oplus D_{1} \oplus D_{3} \oplus D_{4} =0P2?D1?D3?D4?=0,得P2=0P_{2}=0P2?=0P3P_{3}P3?檢驗的數據位為4,5,6,7(碼字編號中對應數字4的)。令P3⊕D4⊕D5⊕D6⊕D7=0P_{3} \oplus D_{4} \oplus D_{5} \oplus D_{6} \oplus D_{7}=0P3?D4?D5?D6?D7?=0,得P3=0P_{3}=0P3?=0.因此海明碼的編碼結果為:1010101.(PS:⊕\oplus表示異或運算)

    糾錯過程:接受方接受到的正確碼字應為1010101。當受到干擾接收到的碼字為1010111。D1D_{1}D1?位由0變為1。檢測時,P1⊕D1⊕D2⊕D4=0P_{1} \oplus D_{1} \oplus D_{2} \oplus D_{4}=0P1?D1?D2?D4?=0,第一位糾錯碼正確。P2⊕D1⊕D3⊕D4=1P_{2} \oplus D_{1} \oplus D_{3} \oplus D_{4} =1P2?D1?D3?D4?=1,第二位糾錯碼為1,有錯誤。P3⊕D4⊕D5⊕D6⊕D7=1P_{3} \oplus D_{4} \oplus D_{5} \oplus D_{6} \oplus D_{7}=1P3?D4?D5?D6?D7?=1,第三位糾錯碼為1,有錯誤。三個糾錯碼從高到低排列為110,對應的十進制為6,即為第六位數據發生錯誤,也就是D1D_{1}D1?位,取反即可。

    有任何問題,歡迎留言交流。

    總結

    以上是生活随笔為你收集整理的数据链路层差错控制——奇偶校验码、循环冗余码和汉明码(海明码)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。