複製鏈接
請複製以下鏈接發送給好友

CRC

(程序設計術語)

鎖定
CRC(Cyclic Redundancy Check),即循環冗餘校驗,是一種根據網絡數據包或電腦文件等數據產生簡短固定位數校核碼的快速算法,主要用來檢測或校核數據傳輸或者保存後可能出現的錯誤。CRC利用除法及餘數的原理,實現錯誤偵測的功能,具有原理清晰、實現簡單等優點。
中文名
循環冗餘校核
外文名
Cyclic Redundancy Check
別    名
循環冗餘校驗
本    質
校驗算法
用    途
校驗信息傳輸中的錯誤
所屬範圍
信息科學

CRC基本介紹

CRC也就是循環冗餘校驗碼,是計算機網絡通信領域常用的校驗碼。循環冗餘校驗碼包括一系列移位、相除等數據編碼規則,其算法原理、算法程序的設計與分析,都可以通過相應的軟件編碼進行解決。循環冗餘校驗碼是利用軟件進行校驗的算法,因此其檢驗速度很快,校驗的誤碼率也較低,整個計算機網絡通信的信息傳輸速度很高。CRC差錯糾正控制法能夠有效減少通信線路的誤碼率,得到的通信數據傳輸信息更準確。
在數據的傳輸過程中由於空間電磁環境複雜等原因,可能會產生誤碼,即某幾位數據0變為1,或1變為0,導致接收端得到錯誤的數據。為了降低誤碼率,通常對數據進行特定編碼,在收發端進行額外的驗證,使接收端能發現某些錯誤,進而實現糾錯功能,常用的編碼方法有CRC-32校驗碼、CRC-16校驗碼、漢明碼、奇偶校驗法等。其中32位循環冗餘校驗簡稱CRC-32校驗在性能和資源消耗兩方面都有較大的優勢,因而,在無線電通信、SATA硬盤數據傳輸等系統中,CRC-32校驗是最常用的檢錯手段之一。

CRCCRC的原理

CRC屬於差錯糾正控制法的一種,循環冗餘校驗算法存在較低的漏檢比率和漏檢概率。循環冗餘校驗算法中的二元碼,是通信中常用的通信編碼。但在通信過程中,時長會發生碼元由0變為1、或者由1變為0的現象。循環冗餘校驗算法中最重要的組成部分為參數表,參數表包含已定義的數據類型和一個變量標識符,其總共有512個字節。在循環冗餘校驗算法施行之前,應該對儲存位置的存儲字節數進行測算,以確保能夠容納龐大的參數表數據。
計算機網絡通信中的算法實現,包括硬件、軟件實現兩部分內容,其中軟件為互聯網通信網絡技術,其數據信息傳輸的速度更快,實現的效果也更好。循環冗餘校驗算法以發送相應的數據包,來控制通信數據的功能性傳輸。循環冗餘校驗算法的數據包包括:段開銷、數據序號、序列的校驗碼等多方面內容。其中段開銷為同步數字體系的下屬結構,段開銷又包含再生段開銷(RSOH)、複用段開銷(MSOH)兩部分內容,共同構成了數據傳輸的初始數據。段開銷將數據從起始地傳輸至目的地,並且有着極高的數據傳輸安全性,傳輸的誤碼率則較低。
數據序號主要承擔編組數據的任務,例如:將10個數據編為一組,則50個數據應該有三組,數據序號顯示為50。在計算機網絡通信數據傳輸過程中,每個數據包都有着不同的字節長度,因此會有專業的長度測算儀器對其進行計算。數據與序列校驗碼排在數據包字節的末尾,主要承擔數據編碼差錯糾正的任務。數據傳輸過程中,出現差錯在所難免,如何降低差錯出現的幾率,是有關人員研究的重點。通信模塊會不定時的發送數據包校驗碼,來檢查數據傳輸中中的編碼或信息差錯,最大限度控制誤碼率的發生。其中計算機網絡通信的誤碼率,可以用PC來表示,表達形式如下:PC=接收到的錯誤碼數/接收的總碼數。

CRCCRC算法校驗規則

循環冗餘校驗算法將是否除盡,作為數據信息的校驗規則。對於能被多項式除盡的數據而言,其數據代碼的誤碼率就較低;對於那些不能被多項式除盡的數據,需要對數據出錯的地方進行分析,並將產生的餘數進行減去。,如果讓被校驗數據減去餘數,勢必能為生成多項式所除盡,但網絡通信中減法操作存在複雜的數學計算,無法使用拼裝的方式進行數據編碼。基於此種情況,網絡通信中引入模2運算的計算方式,模2運算包括:模2加、模2減、模2乘、模2除等四種二進制運算。模2運算不考慮進位和借位,即模2加法是不帶進位的二進制加法運算,模2減法是不帶借位的二進制減法運算。兩個序列模二相加,即兩個序列中對應位,相加不進位,相同為0不同為1。在兩個二進制位相運算時,這兩個位的值能確定最終的運算結果,而不受前一次運算的影響,因此模2運算的加減乘除屬於異或運算。
通信網絡中的校驗數據常常以代碼的形式出現,常見的代碼形式有字符編碼、數字代碼等。校驗數據傳輸的內容大多為二進制(0,1)代碼,模2運算中的代碼形式為數字代碼,通常以多項式進行數據信息的表述。多項式數字代碼為循環冗餘校驗的除數,而校驗數據為循環冗餘校驗的被除數。其中循環冗餘校驗的多項式,在發聲誤碼率等錯誤時,其餘數應該不為0。而在循環冗餘校驗的多項式中的餘數,應該呈現規律性的循環特徵,也就是餘數為循環小數。由於位數不同的數據,所產生的餘數誤碼率也不同,所以對於雙字節16位循環冗餘校驗代碼而言,其多項式的表達方式為:G(x)=X16+X12+X5+1(X=20)。
奇偶校驗是循環冗餘校驗的錯誤檢測機制,能夠根據所用奇校驗與偶校驗的不同,檢查奇數或者偶數的錯誤。其最大能檢測所有低於16位的校驗錯誤,且突發性錯誤檢測的精度高。信息通訊的接收端在收到循環校驗碼之後,將會使用多項式數字代碼除以校驗數據,若得出的餘數為0,則數據傳輸的誤碼率也為0,否則存在誤碼的現象。位數不同的數據,所產生的餘數代碼、出錯位序列也不同,其存在一一對應的關係。

CRCCRC算法校驗步驟

CRC算法流程 CRC算法流程
CRC校驗算法即循環冗餘校驗算法,是由線性分組碼的分支而來。首先它根據模2除法的原理計算出校驗碼,再把得到的校驗碼附在要發送的數據後面組成一幀新的數據,發送給接收端後,接收端根據生成的校驗碼的規則重新計算校驗碼,若相同則説明正確的數據被接收,若不同則説明接收到的數據有錯誤。
其步驟如下:
步驟一:CRC校驗採用多項式的編碼方法,設要發送的數據碼有k位,則該數據碼對應的多項式F(x)有k項,k的取值只能為0或1;
步驟二:G(x)為發送端和接收端預先約好的生成多項式。G(x)的選取對校驗效果起着關鍵的作用,使用較多的生成多項式G(x)有CRC-16、CRC-CCITT、CRC-32等;
步驟三:R(x)為生成的r階冗餘碼多項式,R(x)的項數比G(x)要少一項。R(x)的計算方法為:以F(x)作為被除數,先將F(x)乘x′即左移r位,再以G(x)作為除數作模2運算。
步驟四:CRC校驗算法中,一幀數據有n=k+r位,前k位為數據碼,後r位為冗餘碼。由步驟三計算出R(x)後,把R(x)附在F(x)後面形成要傳送的CRC數據,其格式為[F(x),R(x)]。
步驟五:接收端接收到的數據F′(x)根據模2除法對G(x)進行檢驗。
步驟六:若F′(x)modG(x)結果為0,表明數據在傳送過程中無差錯,接收端就接收該數據;若F′(x)modG(x)結果不為0,則表明數據傳送有錯誤,接收端丟棄該數據。
注意,CRC校驗只能對數據進行檢錯,而不能對其糾錯。因此,在CAN總線上的每個節點一旦發現數據有錯,CAN控制器會根據總線仲裁原則和受損報文優先發送原則對已損壞的報文進行自動重傳。

CRCCRC與網絡通信

CRC數據傳輸與校驗

循環冗餘校驗算法通過相應的數據傳輸渠道,實現通信網絡中計算機設備間的信息溝通。其中校驗算法的校驗碼,通常被安排在數據包字節的末尾,來完成數據的差錯檢測工作。循環冗餘校驗算法、傳輸數據在計算機設備中的傳輸過程,是將數據從起始位置傳送到目的位置的過程。通信網絡目的位置再接收到傳輸的數據代碼後,會將文字譯成一組組數碼,或者將一系列信號譯成文字。這種“譯碼”是編碼的逆過程,是對校驗數據的解碼過程。
若解碼的結果等同於起始位置傳送結果,則表明數據傳輸的誤碼率為0,數據傳輸的過程中沒有出現差錯。若解碼的結果與起始位置傳送結果不同,則説明數據傳輸存在差錯。在數據傳輸出現差錯的情況下,目的位置會對變異的數據進行反覆解碼,直到得到結果與起始位置的傳送結果相同為止。計算機網絡通信中循環冗餘算法的應用,其中段開銷數據包括多個數據編碼組,並以二進制字符作為主要的傳輸模式。
對於計算機網絡通信校驗碼檢驗環節,則仍舊以二進制字符數據包作為主要的數據形式。校驗數據與多項式相除後,若結果不含餘數或者餘數為0,則可得出計算機網絡通信的誤碼率為0,反之則要檢驗傳輸過程中的錯誤原因。而模2運算法在校驗碼檢驗中的精確度高,能夠較為真實反映計算機網絡的通信狀況。

CRC校驗碼的生成

計算機網絡通信中循環冗餘算法的主要流程之一,為數據校驗碼的生成過程。校驗碼的生成過程包括以下幾個步驟:首先要對所有的編碼數據進行初始化,並對循環體內與循環次數同步變化的變量進行設置;然後將數據信息傳送到存在餘數的數據空間內,而原有的餘數單元則要發生相應移動。之後將餘數單元的最高位數據與1進行對比,只存在0或1兩種數據形式。若餘數單元的最高位數據為1,則需驗證多項式數字代碼、校驗數據相處的結果是否為0,同時還需查看校驗碼的數據是否循環8次,最後在進行256次反覆的編碼校驗後,將得出的餘數存儲在計算機中。若校驗碼的數據並沒有循環8次,則需要重新蒐集數據信息,並再次將其傳送到存在餘數的數據空間內,這樣反覆的進行運算,直到完成最終的數據糾正任務。校驗碼生成法能夠有效糾正網絡通信中的錯誤信息,最大程度提升網絡通信質量,降低通信誤碼率。

CRCCRC算法分析

循環冗餘算法的數據參數表中,包含已定義的數據類型和一個變量標識符,任何字節的參數值都可以從512個字節中查到。在計算機網絡通信循環冗餘算法的設計過程中,要將512個字節變量分別存放循環冗餘算法校驗碼,以及循環冗餘算法的中間結果。然後將數據包中數據字節,以0或1的參數值進行數據分類。
若本字節、上一字節的異或數值不相同,則異或結果為1,反之則為0。按照這一規律對所有的字節進行分析,將異或結果為0的校驗碼低8位,將異或結果為1的校驗碼高8位。將校驗過的本字節數據,再於下一字節進行異或,得出的高8位值為結果2,再將結果為2的校驗碼低8位。再將上一字節校驗過的低八位數據,與參數表中的參數值進行對應。最後將結果1、結果2、對應過的參數值再進行異或,將最後的結果作為這一數據組的校驗碼。按照這樣的方式繼續校驗下一組數據,直到所有的數據都被校驗完畢,最終得到所有數據的循環冗餘校驗碼
循環冗餘算法以for循環作為編程的循環語句,只從所有數據包中抽取具有代表的單一字節,並對其進行數據分析計算,這大大節約了計算時間,提升校驗速度。雖然循環冗餘算法的空間佔用較大,但大內存能夠存貯更多的字節,產生的效率也較高。

CRCCRC的糾錯條件

計算機網絡通信中的循環冗餘校驗,可通過以下幾點判定其通信的安全性:奇數錯誤糾正、偶數錯誤糾正、單個錯誤糾正。三種錯誤都按照循環冗餘校驗算法進行糾錯,糾錯的結果能夠較為準確的顯示通信的安全性與快速性。循環冗餘校驗算法引入計算機網絡通信糾錯,能夠有效減少誤碼率的產生,提高計算機網絡通信的準確度。

CRCCRC的注意事項

循環冗餘校驗算法中最重要的部分為多項式選擇,文字、數字等其它對象的編碼。在文字、數字等其它對象編碼的過程中,數據包傳送主要為二進制的表現形式,運用多項式數字代碼除以校驗數據。若兩者的結果餘數為0,則計算機網絡通信的誤碼率為0,否則要對傳輸過程中的錯誤進行檢驗,這是計算機網絡通信錯誤判斷的常用方式。在通信糾錯的處理過程中,多項式數字代碼的選擇影響着計算結果,也會對網絡通信錯誤的糾錯造成影響。由於循環冗餘校驗算法中的多項式數字代碼可以自動生成,而且生成多樣式存在一定的規律特徵,因此要慎重處理多項式的選擇問題。在計算機網絡通信的誤碼率檢測以及糾錯的過程中,能夠對多項式數字代碼最終結果造成一定影響,主要會對多項式的安全性產生影響。因此在誤碼率檢測過程中,應保證數字代碼中各個位數的錯誤較小,且錯誤的餘數不為0。除此以外,對於處於不同位置的錯誤,應該根據所有的錯誤位置,對其餘數進行一一確定與對應,且錯誤的位置要與餘數循環的規律相符合。只有符合上述多個條件的基本要求,才能使計算機網絡通信多項式的準確率更高。

CRCCRC的實際應用

CRC智能變電站

智能變電站配置文件在存儲和數據傳輸過程中,由於各類噪聲影響,容易出現配置文件的比特差錯問題。為了保障配置文件數據的正確率,配置文件對數據進行差錯檢測,當且僅當檢測的結果為正確時,説明該智能變電站配置文件沒有數據差錯的問題,配置文件才可以做進一步的應用。信息領域中差錯檢測的方式有多種,而CRC是應用最廣泛的一種差錯檢測方法。
CRC校核同其他差錯檢測方式一樣,需要完成形成校核位和檢驗校核位的過程。首先將待檢驗的數據採用CRC算法,生成比特冗餘位(又稱幀檢驗序列,Frame CheckS equence,FCS),並將FCS添加到原數據後面,實現校核碼的生成過程。校核是採用相同的CRC算法,計算原數據的FCS,並與附加在原數據後面的FCS作一致性比較。兩者完全相同時,可以確認原數據的完好性。

CRC輔助譯碼

在中短碼長下,不帶循環冗餘校驗(CRC)輔助的極化碼已經不具有競爭力,為了增強極化碼譯碼性能,一般採用CRC輔助譯碼。針對傳統的集中式CRC輔助方案只能在譯碼結束後選擇路徑而無法在譯碼中做剪枝操作,一種通過交織器在極化碼信息比特間離散分配CRC比特的輔助譯碼方案,此方案允許CRC比特能夠輔助串行抵消列表(SCL)譯碼期間倖存路徑的選擇以改善差錯性能。仿真結果表明,與集中式CRC輔助譯碼方案相比,該算法在碼率為0.125、誤塊率在以10-1下、CRC長度為8時提供0.5dB增益;CRC長度為16時提供1.3dB增益。

CRCFPGA

在數字通信中,往往會因噪聲或者瞬時終端干擾,使接收的信息出現概率性的錯碼。為了減少通信信道的傳輸錯誤和提高信息傳輸的質量,人們在設計差錯控制時提出了兩種策略:一種是讓傳輸的報文分組帶上足夠的冗餘信息,以便在接收端能夠發現並且自動糾正傳輸錯誤,這種方案叫做糾錯碼方案;另一種是讓報文分組僅帶上足以使接收端發現差錯的冗餘信息,這種方案叫做檢錯碼方案。糾錯碼方法雖有優越之處,但是由於實現比較複雜,成本較高,實現週期長,一般的通信場合很少採用,而檢錯碼方案因為原理簡單,實現容易,並且編碼與解碼速度快,在實際通信中廣泛應用。常用的檢錯碼分為兩類:奇偶校驗碼循環冗餘編碼(CRC)。由於循環冗餘編碼檢錯能力強,抗干擾性能優越,且信息字段和校驗字段可以任意選定,所以在數據通信領域中比較常用。在信息傳輸中,CRC校驗大部分使用軟件實現,而在一些場合需要使用硬件實現。經典的硬件實現採用線性反饋移位寄存器來設計。