CRC冗余校验举例和原理
生活随笔
收集整理的這篇文章主要介紹了
CRC冗余校验举例和原理
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
什么是CRC校驗? CRC即循環(huán)冗余校驗碼:是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯功能,對數(shù)據(jù)進(jìn)行多項式計算,并將得到的結(jié)果附在幀的后面,接收設(shè)備也執(zhí)行類似的算法,以保證數(shù)據(jù)傳輸?shù)恼_性和完整性。
CRC校驗原理: 其根本思想就是先在要發(fā)送的幀后面附加一個數(shù)(這個就是用來校驗的校驗碼,但要注意,這里的數(shù)也是二進(jìn)制序列的,下同),生成一個新幀發(fā)送給接收端。當(dāng)然,這個附加的數(shù)不是隨意的,它要使所生成的新幀能與發(fā)送端和接收端共同選定的某個特定數(shù)整除(注意,這里不是直接采用二進(jìn)制除法,而是采用一種稱之為“模2除法”)。到達(dá)接收端后,再把接收到的新幀除以(同樣采用“模2除法”)這個選定的除數(shù)。因為在發(fā)送端發(fā)送數(shù)據(jù)幀之前就已通過附加一個數(shù),做了“去余”處理(也就已經(jīng)能整除了),所以結(jié)果應(yīng)該是沒有余數(shù)。如果有余數(shù),則表明該幀在傳輸過程中出現(xiàn)了差錯。 模2除法: 模2除法與算術(shù)除法類似,但每一位除的結(jié)果不影響其它位,即不向上一位借位,所以實際上就是異或。在循環(huán)冗余校驗碼(CRC)的計算中有應(yīng)用到模2除法。 例: CRC校驗步驟: CRC校驗中有兩個關(guān)鍵點,一是預(yù)先確定一個發(fā)送送端和接收端都用來作為除數(shù)的二進(jìn)制比特串(或多項式),可以隨機(jī)選擇,也可以使用國際標(biāo)準(zhǔn),但是最高位和最低位必須為1;二是把原始幀與上面計算出的除數(shù)進(jìn)行模2除法運算,計算出CRC碼。
具體步驟: 1. 選擇合適的除數(shù) 2. 看選定除數(shù)的二進(jìn)制位數(shù),然后再要發(fā)送的數(shù)據(jù)幀上面加上這個位數(shù)-1位的0,然后用新生成的幀以模2除法的方式除上面的除數(shù),得到的余數(shù)就是該幀的CRC校驗碼。注意,余數(shù)的位數(shù)一定只比除數(shù)位數(shù)少一位,也就是CRC校驗碼位數(shù)比除數(shù)位數(shù)少一位,如果前面位是0也不能省略。 3. 將計算出來的CRC校驗碼附加在原數(shù)據(jù)幀后面,構(gòu)建成一個新的數(shù)據(jù)幀進(jìn)行發(fā)送;最后接收端在以模2除法方式除以前面選擇的除數(shù),如果沒有余數(shù),則說明數(shù)據(jù)幀在傳輸?shù)倪^程中沒有出錯。
CRC校驗碼計算示例: 現(xiàn)假設(shè)選擇的CRC生成多項式為G(X) = X4?+ X3?+ 1,要求出二進(jìn)制序列10110011的CRC校驗碼。下面是具體的計算過程: ①將多項式轉(zhuǎn)化為二進(jìn)制序列,由G(X) = X4?+ X3?+ 1可知二進(jìn)制一種有五位,第4位、第三位和第零位分別為1,則序列為11001 ②多項式的位數(shù)位5,則在數(shù)據(jù)幀的后面加上5-1位0,數(shù)據(jù)幀變?yōu)?strong>101100110000,然后使用模2除法除以除數(shù)11001,得到余數(shù)。 ③將計算出來的CRC校驗碼添加在原始幀的后面,真正的數(shù)據(jù)幀為101100110100,再把這個數(shù)據(jù)幀發(fā)送到接收端。 ④接收端收到數(shù)據(jù)幀后,用上面選定的除數(shù),用模2除法除去,驗證余數(shù)是否為0,如果為0,則說明數(shù)據(jù)幀沒有出錯。
CRC校驗原理: 其根本思想就是先在要發(fā)送的幀后面附加一個數(shù)(這個就是用來校驗的校驗碼,但要注意,這里的數(shù)也是二進(jìn)制序列的,下同),生成一個新幀發(fā)送給接收端。當(dāng)然,這個附加的數(shù)不是隨意的,它要使所生成的新幀能與發(fā)送端和接收端共同選定的某個特定數(shù)整除(注意,這里不是直接采用二進(jìn)制除法,而是采用一種稱之為“模2除法”)。到達(dá)接收端后,再把接收到的新幀除以(同樣采用“模2除法”)這個選定的除數(shù)。因為在發(fā)送端發(fā)送數(shù)據(jù)幀之前就已通過附加一個數(shù),做了“去余”處理(也就已經(jīng)能整除了),所以結(jié)果應(yīng)該是沒有余數(shù)。如果有余數(shù),則表明該幀在傳輸過程中出現(xiàn)了差錯。 模2除法: 模2除法與算術(shù)除法類似,但每一位除的結(jié)果不影響其它位,即不向上一位借位,所以實際上就是異或。在循環(huán)冗余校驗碼(CRC)的計算中有應(yīng)用到模2除法。 例: CRC校驗步驟: CRC校驗中有兩個關(guān)鍵點,一是預(yù)先確定一個發(fā)送送端和接收端都用來作為除數(shù)的二進(jìn)制比特串(或多項式),可以隨機(jī)選擇,也可以使用國際標(biāo)準(zhǔn),但是最高位和最低位必須為1;二是把原始幀與上面計算出的除數(shù)進(jìn)行模2除法運算,計算出CRC碼。
具體步驟: 1. 選擇合適的除數(shù) 2. 看選定除數(shù)的二進(jìn)制位數(shù),然后再要發(fā)送的數(shù)據(jù)幀上面加上這個位數(shù)-1位的0,然后用新生成的幀以模2除法的方式除上面的除數(shù),得到的余數(shù)就是該幀的CRC校驗碼。注意,余數(shù)的位數(shù)一定只比除數(shù)位數(shù)少一位,也就是CRC校驗碼位數(shù)比除數(shù)位數(shù)少一位,如果前面位是0也不能省略。 3. 將計算出來的CRC校驗碼附加在原數(shù)據(jù)幀后面,構(gòu)建成一個新的數(shù)據(jù)幀進(jìn)行發(fā)送;最后接收端在以模2除法方式除以前面選擇的除數(shù),如果沒有余數(shù),則說明數(shù)據(jù)幀在傳輸?shù)倪^程中沒有出錯。
CRC校驗碼計算示例: 現(xiàn)假設(shè)選擇的CRC生成多項式為G(X) = X4?+ X3?+ 1,要求出二進(jìn)制序列10110011的CRC校驗碼。下面是具體的計算過程: ①將多項式轉(zhuǎn)化為二進(jìn)制序列,由G(X) = X4?+ X3?+ 1可知二進(jìn)制一種有五位,第4位、第三位和第零位分別為1,則序列為11001 ②多項式的位數(shù)位5,則在數(shù)據(jù)幀的后面加上5-1位0,數(shù)據(jù)幀變?yōu)?strong>101100110000,然后使用模2除法除以除數(shù)11001,得到余數(shù)。 ③將計算出來的CRC校驗碼添加在原始幀的后面,真正的數(shù)據(jù)幀為101100110100,再把這個數(shù)據(jù)幀發(fā)送到接收端。 ④接收端收到數(shù)據(jù)幀后,用上面選定的除數(shù),用模2除法除去,驗證余數(shù)是否為0,如果為0,則說明數(shù)據(jù)幀沒有出錯。
https://blog.csdn.net/d_leo/article/details/73572373
總結(jié)
以上是生活随笔為你收集整理的CRC冗余校验举例和原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多态面试题集锦
- 下一篇: 成都大熊猫繁育研究基地周一开吗