CRC(Cyclic Redundancy Check)循環冗余校驗碼與海明碼的計算題


(17)采用CRC進行差錯校驗,生成多項式為G(X)=X4+X+1,信息碼字為10111,則計算出的CRC校驗碼是  (17)  。
A.0000  B.0100   C.0010   D.1100
試題解析: 
 
        
2011年05月16日 - kelly - 天使的翅膀
 

答案:(17)D
CRC(Cyclic Redundancy Check)循環冗余校驗碼    是常用的校驗碼,在早期的通信中運用廣泛,因為早期的通信技術不夠可靠(不可靠性的來源是通信技術決定的,比如電磁波通信時受雷電等因素的影響),不可靠的通信就會帶來‘確認信息’的困惑,書上提到紅軍和藍軍通信聯合進攻山下的敵軍的例子,第一天紅軍發了條信息要藍軍第二天一起進攻,藍軍收到之后,發一條確認信息,但是藍軍擔心的是‘確認信息’如果也不可靠而沒有成功到達紅軍那里,那自己不是很危險?於是紅軍再發一條‘對確認的確認信息’,但同樣的問題還是不能解決,紅軍仍然不敢冒然行動。      對通信的可靠性檢查就需要‘校驗’,校驗是從數據本身進行檢查,它依靠某種數學上約定的形式進行檢查,校驗的結果是可靠或不可靠,如果可靠就對數據進行處理,如果不可靠,就丟棄重發或者進行修復。      CRC碼是由兩部分組成,前部分是信息碼,就是需要校驗的信息,后部分是校驗碼,如果CRC碼共長n個bit,信息碼長k個bit,就稱為(n,k)碼。 它的編碼規則是:    1、首先將原信息碼(kbit)左移r位(k+r=n)    2、運用一個生成多項式g(x)(也可看成二進制數)用模2除上面的式子,得到的余數就是校驗碼。      非常簡單,要說明的:模2除就是在除的過程中用模2加,模2加實際上就是我們熟悉的異或運算,就是加法不考慮進位,公式是:    0+0=1+1=0,1+0=0+1=1  即‘異’則真,‘非異’則假。    由此得到定理:a+b+b=a 也就是‘模2減’和‘模2加’直值表完全相同。      有了加減法就可以用來定義模2除法,於是就可以用生成多項式g(x)生成CRC校驗碼。    例如: g(x)=x4+x3+x2+1,(7,3)碼,信息碼110產生的CRC碼就是:               101  11101 | 110,0000          111 01            1 0100            1 1101              1001  余數是1001,所以CRC碼是110,1001    標准的CRC碼是,CRC-CCITT和CRC-16,它們的生成多項式是:    CRC-CCITT=x16+x12+x5+1    CRC-16=x16+x15+x2+1

一、CRC編碼
1、已知多項式和原報文,求CRC編碼,如:使用多項式G(x)=x^5 + x^4 + x +1,對報文10100110進行CRC編碼,則編碼后的報文是什么?
方法與步驟:

步驟1:對報文10100110,在末尾添加所給多項式的最高次階個0,如本題為x^5,則添加5個0,變為:1010011000000。

步驟2:由多項式G(x)=x^5 + x^4 + x +1,得其階數為1的二進制編碼為:110011。

步驟3:步驟1中求得的1010011000000對步驟2中求得的110011進行模二除法,所得到的余數即為校驗碼,把校驗碼添加在原報文尾部即為所求的編碼報文1010011011000,具體如下:

海明碼和CRC編碼


2.已知道接收到的CRC編碼,求原編碼或判斷是否出錯,如:已知G(x)=x^5 + x^4 + x +1,接收的為1010011011001,問是否出錯?

步驟一:由多項式G(x)=x^5 + x^4 +海明碼和CRC編碼 x +1,得其階數為1的二進制編碼為:110011。

步驟二:用接收的報文1010011011001對步驟一的110011進行模二除法,看余數是否為0,如為0則正確,如不為0,則出錯,計算余數為1,則出錯。如下圖:

 


二、海明碼
1.求海明碼,如:求1011海明碼。

步驟一:求校驗碼位數r,公式為:2^r ≥r+k+1的最小r。題目中為2^3≥3+4+1,所以取r=3,即校驗碼為3位。

步驟二:畫圖,並把原碼的位編號寫成2的指數求和的方式,其中位編號長度為原碼和校驗碼個數之和,從1開始。校驗碼插在2的階碼次方的位編號下,且階小於r。如下:

海明碼和CRC編碼


原碼的位編號寫成2的指數求和:
7=2^2+2^1+2^0;
6=2^2+2^1;
5=2^2+2^0;
3=2^1+2^0;

 

步驟三:求校驗位,即每個校驗位的值為步驟二中“原碼的位編號寫成2的指數求和”式子中相應2的階出現的位編號下原碼的值異或。即:
r0=I4異或I2異或I1=1;   (2^0次出現在7,5,3位,其對應的值為I4,I2,I1)
r1=I4異或I3異或I1=0;   (2^1次出現在7,6,3位,其對應的值為I4,I3,I1)
r2=I4異或I3異或I2=0;   (2^0次出現在7,6,5位,其對應的值為I4,I3,I2)
把r0,r1,r2帶入海明碼,得所求的海明碼為:1010101

2.已知海明碼,求原碼或判斷是否出錯並改正錯位,如:信息位8位的海明碼,接收110010100000時,判斷是否出錯,並求出發送端信息位。

步驟一:求校驗碼位數r,公式為:2^r ≥r+k+1的最小r。題目中為2^4≥4+8+1,所以取k=4,即校驗碼為4位。

步驟二:根據作圖,求得信息位編碼和發過來的校驗碼記為r,並由原編碼從新計算出新的校驗碼與發來的校驗碼r進行異或運算,具體如下:

 

2011年05月16日 - kelly - 天使的翅膀

 
得到,原碼11000100,發送來的校驗碼r為1000

再根據求R,把原碼的位編號寫成2的指數求和:
12=2^3+2^2;
11=2^3+2^1+2^0;
10=2^3+2^0;
9=2^3+2^0;
7=2^2+2^1+2^0;
6=2^2+2^1;
5=2^2+2^0;
3=2^1+2^0;

求得:
S3=r3異或(I8異或I7異或I6異或I5)
S2=r2異或(I8異或I4異或I3異或I2)
S1=r1異或(I7異或I6異或I4異或I3異或I1)
S0=r0異或(I7異或I5異或I4異或I2異或I1)

S3S2S1S0,其十進制為0,表示沒出錯,如果不為零,則其十進制數即為出錯的位。
本題S3S2S1S0=1001,十進制為9,即第九位出錯。改過來既為:11010100

 

注:不管用海明還是CRC編碼,如果不是有必要或學密碼學,不用想辦法搞清原理,就拿它當像勾股定理一樣使用就ok,否則,對一般來講,的確有點痛苦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM