2024年3月31日發(fā)(作者:校服的故事)

海明碼及碼距
一、碼距
一個編碼系統(tǒng)中任意兩個合法編碼(碼字)之間不同的二進(jìn)數(shù)位(bit)數(shù)叫這兩個碼
字的碼距,而整個編碼系統(tǒng)中任意兩個碼字的的最小距離就是該編碼系統(tǒng)的碼距。
如圖1所示的一個編碼系統(tǒng),用三個bit來表示八個不同信息中。在這個系統(tǒng)中,兩
個碼字之間不同的bit數(shù)從1到3不等,但最小值為1,故這個系統(tǒng)的碼距為1。如果任何
碼字中一位或多位被顛倒了,結(jié)果這個碼字就不能與其它有效信息區(qū)分開。例如,如果傳
送信息001,而被誤收為011,因011仍是表中的合法碼字,接收機(jī)仍將認(rèn)為011是正確
的信息。
然而,如果用四個二進(jìn)數(shù)字來編8個碼字,那么在碼字間的最小距離可以增加到2,
如圖2的表中所示。
信息序號
二進(jìn)碼字
a2 a1 a0
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1
6 1
7 1
圖 1
信息序號
二進(jìn)碼字
a3 a2
0 0
1 1
2 1
0 1
1 0
1 1
a1
0 0
0 0
0 1
a0
0
1
0
3 0 0 1 1
4 1 1 0 0
5 0 1 0 1
6 0 1 1 0
7 1 1 1 1
圖 2
注意,圖8-2的8個碼字相互間最少有兩bit的差異。因此,如果任何信息的一個數(shù)
位被顛倒,就成為一個不用的碼字,接收機(jī)能檢查出來。例如信息是1001,誤收為1011,
接收機(jī)知道發(fā)生了一個差錯,因為1011不是一個碼字(表中沒有)。然而,差錯不能被糾
正。假定只有一個數(shù)位是錯的,正確碼字可以是1001,1111,0011或1010。接收者不
能確定原來到底是這4個碼字中的那一個。也可看到, 在這個系統(tǒng)中,偶數(shù)個(2或4)
差錯也無法發(fā)現(xiàn)。
為了使一個系統(tǒng)能檢查和糾正一個差錯,碼間最小距離必須至少是“3”。最小距離為
3時,或能糾正一個錯,或能檢二個錯,但不能同時糾一個錯和檢二個錯。編碼信息糾錯
和檢錯能力的進(jìn)一步提高需要進(jìn)一步增加碼字間的最小距離。圖8-3的表概括了最小距離
為1至7的碼的糾錯和檢錯能力。
碼距
碼 能 力
檢錯 糾錯
1 0 0
2 1 0
3 2 或 1
4 2 加 1
5 2 加 2
6 3 加 2
7 3 加 3
圖3
碼距越大,糾錯能力越強(qiáng),但數(shù)據(jù)冗余也越大,即編碼效率低了。所以,選擇碼距要
取決于特定系統(tǒng)的參數(shù)。數(shù)字系統(tǒng)的設(shè)計者必須考慮信息發(fā)生差錯的概率和該系統(tǒng)能容許
的最小差錯率等因素。要有專門的研究來解決這些問題。
二、奇偶校驗
奇偶校驗碼是一種增加二進(jìn)制傳輸系統(tǒng)最小距離的簡單和廣泛采用的方法。例如,單
個的奇偶校驗將使碼的最小距離由一增加到二。
一個二進(jìn)制碼字,如果它的碼元有奇數(shù)個1,就稱為具有奇性。例如,碼字“10110101”
有五個1,因此,這個碼字具有奇性。同樣,偶性碼字具有偶數(shù)個1。注意奇性檢測等效
于所有碼元的模二加,并能夠由所有碼元的異或運算來確定。對于一個n位字,奇性由下
式給出:
奇性=a0⊕a1⊕a2⊕…⊕an
奇偶校驗可描述為:給每一個碼字加一個校驗位,用它來構(gòu)成奇性或偶性校驗。例如,
在圖8-2 中,就是這樣做的。可以看出,附加碼元d2,是簡單地用來使每個字成為偶性
的。因此,若有一個碼元是錯的,就可以分辨得出,因為奇偶校驗將成為奇性。奇偶校驗
編碼通過增加一位校驗位來使編碼中1個個數(shù)為奇數(shù)(奇校驗)或者為偶數(shù)(偶校驗),從
而使碼距變?yōu)?。因為其利用的是編碼中1的個數(shù)的奇偶性作為依據(jù),所以不能發(fā)現(xiàn)偶數(shù)
位錯誤。
再以數(shù)字0的七位ASCII碼(0110000)為例,如果傳送后右邊第一位出錯,0變成 1。
接收端還認(rèn)為是一個合法的代碼0110001(數(shù)字1的ASCII碼)。若在最左邊加一位奇校
驗位,編碼變?yōu)?0110000,如果傳送后右邊第一位出錯,則變成10110001,1的個數(shù)
變成偶數(shù),就不是合法的奇校驗碼了。但若有兩位(假設(shè)是第1、2位)出錯就變成
10110011,1的個數(shù)為5,還是奇數(shù)。接收端還認(rèn)為是一個合法的代碼(數(shù)字3的ASCII
碼)。所以奇偶校驗不能發(fā)現(xiàn)。
奇偶校驗位可由硬件電路(異或門)或軟件產(chǎn)生:
偶校驗位 an =a0⊕a1⊕a2⊕…⊕an-1, 奇校驗位 an =NOT(a0⊕a1⊕a2⊕…⊕
an-1)。
在一個典型系統(tǒng)里,在傳輸以前,由奇偶發(fā)生器把奇偶校驗位加到每個字中。原有信
息中的數(shù)字在接收機(jī)中被檢測, 如果沒有出現(xiàn)正確的奇、偶性,這個信息標(biāo)定為錯誤的,
這個系統(tǒng)將把錯誤的字拋掉或者請求重發(fā)。
在實際工作中還經(jīng)常采用縱橫都加校驗奇偶校驗位的編碼系統(tǒng)--分組奇偶校驗碼。
現(xiàn)在考慮一個系統(tǒng), 它傳輸若干個長度為m位的信息。如果把這些信息都編成每組
n個信息的分組,則在這些不同的信息間,也如對單個信息一樣,能夠作奇偶校驗。圖4
中n個信息的一個分組排列成矩形式樣,并以橫向奇偶(HP)及縱向奇偶(VP)的形式
編出奇偶校驗位。
m位數(shù)字
橫向奇偶位
n
個
碼
字
a1 a2 … am-1 am HP1
b1 b2 … bm-1 bm HP2
c1 c2 … cm-1 cm HP3
… … … … … …
n1 n2 … nm-1 nm HPn
VP1 VP2 … VPm-1 VPm HPn+1
縱向奇偶位
圖 4 用綜橫奇偶校驗的分組奇偶校驗碼
研究圖4可知:分組奇偶校驗碼不僅能檢測許多形式的錯誤。并且在給定的行或列中
產(chǎn)生孤立的錯誤時,還可對該錯誤進(jìn)行糾正。
在初級程序員試題中(早期也出現(xiàn)在程序員試題中),經(jīng)常有綜橫奇偶校驗的題目。一
般解法應(yīng)該是這樣:先找一行或一列已知數(shù)據(jù)完整的,確定出該行(或列)是奇校驗還是
偶校驗。并假設(shè)行與列都采用同一種校驗(這個假設(shè)是否正確,在全部做完后可以得到驗
證)。然后找只有一個未知數(shù)的行或列,根據(jù)校驗性質(zhì)確定該未知數(shù),這樣不斷做下去,就
能求出所有未知數(shù)。
【例】2001年初級程序員試題
由 6 個字符的 7 位 ASCII 編碼排列,再加上水平垂直奇偶校驗位構(gòu)成下列矩陣(最
后一列為水平奇偶校驗位,最后一行為垂直奇偶校驗位):
字符 7 位 ASCII 碼 HP
3 0 X1 X2 0 0 1 1 0
Y1 1 0 0 1 0 0 X3 1
+ X4 1 0 1 0 1 1 0
Y2 0 1 X5 X6 1 1 1 1
D 1 0 0 X7 1 0 X8 0
= 0 X9 1 1 1 X10 1 1
VP 0 0 1 1 1 X11 1 X12
則 X1 X2 X3 X4 處的比特分別為 __(36)__ ;
X5 X6 X7 X8 處的比特分別為 ____ ;
X9 X10 XI1 X12 處的比特分別為 __(38)__ ;Y1 和 Y2 處的字符分別為 __(39)__
和 __(40)__ 。
[解]
從ASCII碼左起第5列可知垂直為偶校驗。則:
從第1列可知X4=0;從第3行可知水平也是偶校驗。
從第2行可知X3=1;從第7列可知X8=0;從第8列可知X12=1;
從第7行可知X11=1;從第6列可知X10=0;從第6行可知X9=1;從第2列可知
X1=1;
從第1行可知X2=1;從第3列可知X5=1;從第4行可知X6=0;
從第4列(或第5行)可知X7=0;整理一下:
(36) X1X2X3X4 = 1110
(37) X5X6X7X8 = 1000
(38) X9X10X11X12 = 1011
(39) 由字符Y1的ASCII碼1001001=49H知道,Y1即是“I”(由“D”的ASCII碼
是1000100=44H推得)
(40) 由字符Y2的ASCII碼0110111=37H知道,Y2即是“7”(由“3”的ASCII
碼是0110011=33H推得)
假如你能記住“0”的ASCII碼是0110000=30H;“A”的ASCII碼是1000001=41H,
則解起來就更方便了。
三、海明校驗
我們在前面指出過要能糾正信息字中的單個錯誤,所需的最小距離為3。實現(xiàn)這種糾
正的方法之一是海明碼。
海明碼是一種多重(復(fù)式)奇偶檢錯系統(tǒng)。它將信息用邏輯形式編碼,以便能夠檢錯和
糾錯。用在海明碼中的全部傳輸碼字是由原來的信息和附加的奇偶校驗位組成的。每一個
這種奇偶位被編在傳輸碼字的特定位置上。實現(xiàn)得合適時,這個系統(tǒng)對于錯誤的數(shù)位無論
是原有信息位中的,還是附加校驗位中的都能把它分離出來。
推導(dǎo)并使用長度為m位的碼字的海明碼,所需步驟如下:
1、確定最小的校驗位數(shù)k,將它們記成D1、D2、…、Dk,每個校驗位符合不同的奇
偶測試規(guī)定。
2、原有信息和k個校驗位一起編成長為m+k位的新碼字。選擇k校驗位(0或1)
以滿足必要的奇偶條件。
3、對所接收的信息作所需的k個奇偶檢查。
4、如果所有的奇偶檢查結(jié)果均為正確的,則認(rèn)為信息無錯誤。
如果發(fā)現(xiàn)有一個或多個錯了,則錯誤的位由這些檢查的結(jié)果來唯一地確定。
校驗位數(shù)的位數(shù)
推求海明碼時的一項基本考慮是確定所需最少的校驗位數(shù)k。考慮長度為m位的信息,
若附加了k 個校驗位,則所發(fā)送的總長度為m+k。在接收器中要進(jìn)行k個奇偶檢查,每
個檢查結(jié)果或是真或是偽。這個奇偶檢查的結(jié)果可以表示成一個k位的二進(jìn)字,它可以確
定最多2k(2的K次冪)種不同狀態(tài)。這些狀態(tài)中必有一個其所有奇偶測試試都是真的,
它便是判定信息正確的條件。于是剩下的(2k-1)種狀態(tài),可以用來判定誤碼的位置。于
是導(dǎo)出下一關(guān)系:
2k-1≥m+k
碼字格式
從理論上講,校驗位可放在任何位置,但習(xí)慣上校驗位被安排在1、2、4、8、…的位
置上。
圖5列出了m=4,k=3時,信息位和校驗位的分布情況。
碼字位置 B1 B2 B3 B4 B5 B6 B7
校驗位 x x x
信息位 x x x x
復(fù)合碼字 P1 P2 D1 P3 D2 D3 D4
圖5 海明碼中校驗位和信息位的定位
校驗位的確定
k個校驗位是通過對m+k位復(fù)合碼字進(jìn)行奇偶校驗而確定的。
其中:P1位負(fù)責(zé)校驗海明碼的第1、3、5、7、…(P1、D1、D2、D4、…)位,(包
括P1自己)
P2負(fù)責(zé)校驗海明碼的第2、3、6、7、…(P2、D1、D3、D4、…)位,(包括P2自
己)
P3負(fù)責(zé)校驗海明碼的第4、5、6、7、…(P3、D2、D3、D4、…)位,(包括P3自
己)
對m=4,k=3,偶校驗的例子,只要進(jìn)行三次偶性測試。這些測試(以A、B、C表
示)在圖6所示各位的位置上進(jìn)行。
奇偶條件
碼 字 位 置
1 2 3 4 5 6 7
A
B
C
x
x
x
x
x
x
x
x
x
x
x
x
圖6 奇偶校驗位置
因此可得到三個校驗方程及確定校驗位的三個公式:
A=B1⊕B3⊕B5⊕B7=0 得P1=D1⊕D2⊕D4
B=B2⊕B3⊕B6⊕B7=0 得P2=D1⊕D3⊕D4
C=B4⊕B5⊕B6⊕B7=0 得P3=D2⊕D3⊕D4
若四位信息碼為1001,利用這三個公式可求得三個校驗位P1、P2、P3值。和海明
碼,如圖7則表示了信息碼為1001時的海明碼編碼的全部情況。而圖8中則列出了全部
16種信息(D1D2D3D4=0000~1111)的海明碼。
碼字位置
B1
B2
B3
B4
B5
B6
B7
碼位類型
P1
P2
D1
P3
D2
D3
D4
信息碼
-
-
1
-
0
0
1
校驗位
0
0
-
1
-
-
-
編碼后的海明碼
0
0
1
1
0
0
1
圖7 四位信息碼的海明編碼
P1 P2 D1 P3 D2
0 0 0 0 0
1 1 0 1 0
D3 D4
0 0
0 1
0 1 0 1 0 1 0
1 0 0 0 0 1 1
1 0 0 1 1 0 0
0 1
1 1
0 0
1 1
0 0
1 0
0 1
0 1
1 0
0 0
0 0
0 0
0 1
1 0
1 1
1 1
1 0
1 1
1 0
1 0
1 0
1 1
1 1
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1
0
1
0
1
0
1
0
1
0
1 1 1 1 1 1 1
圖8 未編碼信息的海明碼
上面是發(fā)送方的處理
在接收方,也可根據(jù)這三個校驗方程對接收到的信息進(jìn)行同樣的奇偶測試:
A=B1⊕B3⊕B5⊕B7=0;
B=B2⊕B3⊕B6⊕B7=0;
C=B4⊕B5⊕B5⊕B7=0。
若三個校驗方程都成立,即方程式右邊都等于0,則說明沒有錯。若不成立即方程式右
邊不等于 0,說明有錯。從三個方程式右邊的值,可以判斷那一位出錯。例如,如果第3
位數(shù)字反了,則C=0(此方程沒有B3),A=B=1(這兩個方程有B3)。可構(gòu)成二進(jìn)數(shù)CBA,
以A為最低有效位,則錯誤位置就可簡單地用二進(jìn)數(shù)CBA=011指出。
同樣,若三個方程式右邊的值為001,說明第1位出錯。若三個方程式右邊的值為100,
說明第4位出錯。
海明碼的碼距應(yīng)該是3,所以能糾正1位出錯。而奇偶校驗碼的碼距才是2,只能發(fā)
現(xiàn)1位出錯,但不能糾正(不知道那一位錯)。無校驗的碼距是1,它出任何一位出錯后還
是合法代碼,所以也就無法發(fā)現(xiàn)出錯。
這是關(guān)于海明碼的經(jīng)典說法,即碼距為3,可以發(fā)現(xiàn)2位,或者糾正1位錯。應(yīng)滿足
2k-1≥m+k。
但在清華的王愛英主編的《計算機(jī)組成與結(jié)構(gòu)》(該書已成為國內(nèi)的權(quán)威)中還提出了
一種碼距為4的海明碼,可以發(fā)現(xiàn)2位,并且糾正1位錯。應(yīng)滿足2(k-1)≥m+k。
由于王愛英書上對這兩種概念沒有很仔細(xì)解釋(特別對碼距為3的海明碼),過渡很突
然。有些書簡單抄襲時沒有仔細(xì)消化,所以出現(xiàn)一些概念錯。對于一般碼距為3的海明碼,
應(yīng)該是“可以發(fā)現(xiàn)2位,或者糾正1位錯”,而不是“可以發(fā)現(xiàn)2位,并且糾正1位錯”。
在試題中出現(xiàn)過類似的錯誤。
四、循環(huán)冗余校驗碼
在串行傳送(磁盤、通訊)中,廣泛采用循環(huán)冗余校驗碼(CRC)。CRC也是給信息
碼加上幾位校驗碼,以增加整個編碼系統(tǒng)的碼距和查錯糾錯能力。
CRC的理論很復(fù)雜,一般書上只介紹已有生成多項式后計算校驗碼的方法。檢錯能力
與生成多項式有關(guān),只能根據(jù)書上的結(jié)論死記。
循環(huán)冗余校驗碼(CRC)的基本原理是:在K位信息碼后再拼接R位的校驗碼,整個
編碼長度為 N位,因此,這種編碼又叫(N,K)碼。對于一個給定的(N,K)碼,可以
證明存在一個最高次冪為N-K=R的多項式G(x)。根據(jù)G(x)可以生成K位信息的校驗碼,
而G(x)叫做這個CRC碼的生成多項式。
校驗碼的具體生成過程為:假設(shè)發(fā)送信息用信息多項式C(X)表示,將C(x)左移R位,
則可表示成C(x)*2R,這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。通過C(x)*2R
除以生成多項式G(x)得到的余數(shù)就是校驗碼。
幾個基本概念
1、多項式與二進(jìn)制數(shù)碼
多項式和二進(jìn)制數(shù)有直接對應(yīng)關(guān)系:x的最高冪次對應(yīng)二進(jìn)制數(shù)的最高位,以下各位
對應(yīng)多項式的各冪次,有此冪次項對應(yīng)1,無此冪次項對應(yīng)0。可以看出:x的最高冪次為
R,轉(zhuǎn)換成對應(yīng)的二進(jìn)制數(shù)有R+1位。
多項式包括生成多項式G(x)和信息多項式C(x)。
如生成多項式為G(x)=x4+x3+x+1, 可轉(zhuǎn)換為二進(jìn)制數(shù)碼11011。
而發(fā)送信息位 1111,可轉(zhuǎn)換為數(shù)據(jù)多項式為C(x)=x3+x2+x+1。
2、生成多項式
是接受方和發(fā)送方的一個約定,也就是一個二進(jìn)制數(shù),在整個傳輸過程中,這個數(shù)始
終保持不變。
在發(fā)送方,利用生成多項式對信息多項式做模2除生成校驗碼。在接受方利用生成多項
式對收到的編碼多項式做模2除檢測和確定錯誤位置。
應(yīng)滿足以下條件:
a、生成多項式的最高位和最低位必須為1。
b、當(dāng)被傳送信息(CRC碼)任何一位發(fā)生錯誤時,被生成多項式做模2除后應(yīng)該使
余數(shù)不為0。
c、不同位發(fā)生錯誤時,應(yīng)該使余數(shù)不同。
d、對余數(shù)繼續(xù)做模2除,應(yīng)使余數(shù)循環(huán)。
將這些要求反映為數(shù)學(xué)關(guān)系是比較復(fù)雜的。但可以從有關(guān)資料查到常用的對應(yīng)于不同
碼制的生成多項式如圖9所示:
N K 碼距d G(x)多項式 G(x)
7 4 3 x3+x+1 1011
7 4 3 x3+x2+1 1101
7 3 4 x4+x3+x2+1 11101
7 3 4 x4+x2+x+1 10111
15 11 3 x4+x+1 10011
15 7 5 x8+x7+x6+x4+1 111010001
31 26 3 x5+x2+1 100101
31 21 5 x10+x9+x8+x6+x5+x3+1
63 57 3 x6+x+1 1000011
63 51 5 x12+x10+x5+x4+x2+1 1
1041 1024 x16+x15+x2+1
11101
圖9 常用的生成多項式
3、模2除(按位除)
模2除做法與算術(shù)除法類似,但每一位除(減)的結(jié)果不影響其它位,即不向上一位
借位。所以實際上就是異或。然后再移位移位做下一位的模2減。步驟如下:
a、用除數(shù)對被除數(shù)最高幾位做模2減,沒有借位。
b、除數(shù)右移一位,若余數(shù)最高位為1,商為1,并對余數(shù)做模2減。若余數(shù)最高位為
0,商為0,除數(shù)繼續(xù)右移一位。
c、一直做到余數(shù)的位數(shù)小于除數(shù)時,該余數(shù)就是最終余數(shù)。
【例】1111000除以1101:
1011———商
————
1111000-----被除數(shù)
1101———— 除數(shù)
————
010000
1101
————
01010
1101
————
111————余數(shù)
CRC碼的生成步驟
1、將x的最高冪次為R的生成多項式G(x)轉(zhuǎn)換成對應(yīng)的R+1位二進(jìn)制數(shù)。
2、將信息碼左移R位,相當(dāng)與對應(yīng)的信息多項式C(x)*2R
3、用生成多項式(二進(jìn)制數(shù))對信息碼做模2除,得到R位的余數(shù)。
4、將余數(shù)拼到信息碼左移后空出的位置,得到完整的CRC碼。
【例】假設(shè)使用的生成多項式是G(x)=x3+x+1。4位的原始報文為1010,求編碼后
的報文。
解:
1、將生成多項式G(x)=x3+x+1轉(zhuǎn)換成對應(yīng)的二進(jìn)制除數(shù)1011。
2、此題生成多項式有4位(R+1),要把原始報文C(x)左移3(R)位變成1010000
3、用生成多項式對應(yīng)的二進(jìn)制數(shù)對左移4位后的原始報文進(jìn)行模2除:
1001-------商
------------------------
1010000
1011----------除數(shù)
------------
1000
1011
------------
011-------余數(shù)(校驗位)
5、編碼后的報文(CRC碼):
1010000
+ 011
------------------
1010011
CRC的和糾錯
在接收端收到了CRC碼后用生成多項式為G(x)去做模2除,若得到余數(shù)為0,則碼字
無誤。若如果有一位出錯,則余數(shù)不為0,而且不同位出錯,其余數(shù)也不同。可以證明,
余數(shù)與出錯位的對應(yīng)關(guān)系只與碼制及生成多項式有關(guān),而與待測碼字(信息位)無關(guān)。圖
10給出了G(x)=1011,C(x)=1010的出錯模式,改變C(x)(碼字),只會改變表中碼字
內(nèi)容,不改變余數(shù)與出錯位的對應(yīng)關(guān)系。
收到的CRC碼字
余數(shù) 出錯位
碼位
A7 A6
正確
1 0
000 無
錯
誤
1 0
1 0
1 0
A5
0
0
0
0
A4 A3
0 1
0 1
0 0
1 1
A2 A1
1
0
1
1
1
1
1
1
1 0 1 1 0 1 1
1 0 0 0 0 1 1
1 1 1 0 0 1 1
0 0
001
010
100
011
110
111
101
1
2
0 0 1 1 1
3
4
5
6
7
圖10 (7,4)CRC碼的出錯模式(G(x)=1011)
如果循環(huán)碼有一位出錯,用G(x)作模2除將得到一個不為0的余數(shù)。如果對余數(shù)補0
繼續(xù)除下去,我們將發(fā)現(xiàn)一個有趣的結(jié)果;各次余數(shù)將按圖10順序循環(huán)。例如第一位出
錯,余數(shù)將為001,補0后再除(補0后若最高位為1,則用除數(shù)做模2減取余;若最高
位為0,則其最低3位就是余數(shù)),得到第二次余數(shù)為010。以后繼續(xù)補0作模2除,依次
得到余數(shù)為100,0ll…,反復(fù)循環(huán),這就是“循環(huán)碼”名稱的由來。這是一個有價值的特
點。如果我們在求出余數(shù)不為0后,一邊對余數(shù)補0繼續(xù)做模2除,同時讓被檢測的校驗
碼字循環(huán)左移。圖10說明,當(dāng)出現(xiàn)余數(shù) (101)時,出錯位也移到A7位置。可通過異或門
將它糾正后在下一次移位時送回A1。這樣我們就不必像海明校驗?zāi)菢佑米g碼電路對每一位
提供糾正條件。當(dāng)位數(shù)增多時,循環(huán)碼校驗?zāi)苡行У亟档陀布鷥r,這是它得以廣泛應(yīng)用
的主要原因。
【例】對圖10的CRC碼(G(x)=1011,C(x)=1010),若接收端收到的碼字為
1010111,用G(x)=1011做模2除得到一個不為0的余數(shù)100,說明傳輸有錯。將此余
數(shù)繼續(xù)補0用G(x)=1011作模2除,同時讓碼字循環(huán)左移1010111。做了4次后,得到
余數(shù)為101,這時碼字也循環(huán)左移4位,變成1111010。說明出錯位已移到最高位A7,
將最高位1取反后變成0111010。再將它循環(huán)左移3位,補足7次,出錯位回到A3位,
就成為一個正確的碼字1010011。
通信與網(wǎng)絡(luò)中常用的CRC
在數(shù)據(jù)通信與網(wǎng)絡(luò)中,通常k相當(dāng)大,由一千甚至數(shù)千數(shù)據(jù)位構(gòu)成一幀,而后采用CRC
碼產(chǎn)生r 位的校驗位。它只能檢測出錯誤,而不能糾正錯誤。一般取r=16,標(biāo)準(zhǔn)的16位
生成多項式有CRC-16=x16+x15+x2+1 和 CRC-CCITT=x16+x15+x2+1。
一般情況下,r位生成多項式產(chǎn)生的CRC碼可檢測出所有的雙錯、奇數(shù)位錯和突發(fā)長
度小于等于 r的突發(fā)錯以及(1-2-(r-1))的突發(fā)長度為r+1的突發(fā)錯和(1-2-r)的突發(fā)
長度大于r+1的突發(fā)錯。例如,對上述r=16的情況,就能檢測出所有突發(fā)長度小于等于
16的突發(fā)錯以及99.997%的突發(fā)長度為17的突發(fā)錯和99.998%的突發(fā)長度大于17
的突發(fā)錯。所以CRC碼的檢錯能力還是很強(qiáng)的。這里,突發(fā)錯誤是指幾乎是連續(xù)發(fā)生的一
串錯,突發(fā)長度就是指從出錯的第一位到出錯的最后一位的長度(但是,中間并不一定每一
位都錯)。
【例1】某循環(huán)冗余碼(CRC)的生成多項式 G(x)=x3+x2+1,用此生成多項式產(chǎn)生
的冗余位,加在信息位后形成 CRC 碼。若發(fā)送信息位 1111 和 1100 則它的 CRC 碼分
別為_A_和_B_。由于某種原因,使接收端收到了按某種規(guī)律可判斷為出錯的 CRC 碼,
例如碼字_C_、_D_、和_E_。(1998年試題11)
供選擇的答案
A:① lllll00 ② 1111101 ③ 1111110 ④ 1111111
B:① 1100100 ② 1100101 ③ 1100110 ④ 1100111
C~E:① 0000000 ② 0001100 ③ 0010111
⑤ 1000110 ⑥ 1001111 ⑦ 1010001 ⑧ 1011000
解:
A:G(x)=1101,C(x)=1111 C(x)*23÷G(x)=1111000÷1101=1011余111
得到的CRC碼為1111111
B:G(x)=1101,C(x)=1100 C(x)*23÷G(x)=1100000÷1101=1001余101
得到的CRC碼為1100101
C~E:
分別用G(x)=1101對①~⑧ 作模2除: ① 0000000÷1101 余000 ② 1111101÷
1101 余001
③ 0010111÷1101 余000 ④ 0011010÷1101 余000 ⑤ 1000110÷1101 余
000
⑥ 1001111÷1101 余100 ⑦ 1010001÷1101 余000 ⑧ 1011000÷1101 余
100
所以_C_、_D_和_E_的答案是②、⑥、⑧
【例2】計算機(jī)中常用的一種檢錯碼是CRC,即 _A_ 碼。在進(jìn)行編碼過程中要使用 _B_
運算。假設(shè)使用的生成多項式是 G(X)=X4+X3+X+1, 原始報文為,則編
碼后的報文為 _C_ 。CRC碼 _D_ 的說法是正確的。
在無線電通信中常采用它規(guī)定碼字長為7位.并且其中總有且僅有3個“1”。這種碼
的編碼效率為_E_。
供選擇的答案:
A:① 水平垂直奇偶校驗 ② 循環(huán)求和
③ 循環(huán)冗余 ④正比率
B:① 模2除法 ②定點二進(jìn)制除法
③二-十進(jìn)制除法 ④循環(huán)移位法
C:① 11 ② 111
③ 110 ④ 111
D:① 可糾正一位差錯 ②可檢
測所有偶數(shù)位錯
③ 可檢測所有小于校驗位長度的突發(fā)錯 ④可檢測所有小于、等于
校驗位長度的突發(fā)錯
E:① 3/7 ② 4/7 ③ log23/log27 ④ (log235)/7
解:從前面有關(guān)CRC的論述中可得出: A:③ 循環(huán)冗余 B:① 模2除法
C:G(x)=11011,C(x)=,C(x)*24÷G(x)=110÷11011
余0011
得到的CRC碼為② 111
D:從前面有關(guān)通信與網(wǎng)絡(luò)中常用的CRC的論述中可得出:④ 可檢測所有小于、等
于校驗位長度的突發(fā)錯
E:定比碼又叫定重碼,是奇偶校驗的推廣。在定比碼中,奇數(shù)或偶數(shù)的性質(zhì)保持不變,
然而附加一種限制,每個字中1的總數(shù)是固定的。隨用途之不同,定比碼要求的附加校驗
位可能多于一個,但較之單一的奇偶校驗將增加更多的檢錯能力。
所謂7中取3定比碼,就是整個碼字長度為7位,其中1的位數(shù)固定為3。所有128
個7位代碼(0000000~1111111)中只有1的位數(shù)固定為3的才是其合法碼字。可以用
求組合的公式求出其合法碼字?jǐn)?shù)為:C73=7!/(3!* (7-3)!)=7*6*5/(1*2*3)=35
編碼效率=合法碼字所需位數(shù)/碼字總位數(shù)=(log235)/7
本文發(fā)布于:2024-03-31 07:28:11,感謝您對本站的認(rèn)可!
本文鏈接:http://www.newhan.cn/zhishi/a/1711841292261916.html
版權(quán)聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時內(nèi)刪除。
本文word下載地址:海明碼及碼距.doc
本文 PDF 下載地址:海明碼及碼距.pdf
| 留言與評論(共有 0 條評論) |