本發(fā)明涉及通信
技術(shù)領(lǐng)域:
,具體涉及一種基于并行CRC的單比特糾錯方法。
背景技術(shù):
::當今世界是一個信息化的世界,各行各業(yè)的信息交互、交流都少不了通信。CRC校驗作為一種軟、硬件都便于實現(xiàn)的數(shù)據(jù)包型校驗策略已經(jīng)被廣泛應(yīng)用于各類數(shù)據(jù)交互中,然而,CRC算法大多數(shù)被用于數(shù)據(jù)的校驗。采用數(shù)據(jù)自動糾錯功能取代數(shù)據(jù)重傳或者丟包,可以有效的提高數(shù)據(jù)傳輸網(wǎng)絡(luò)的能量消耗和數(shù)據(jù)傳輸效率。而在環(huán)境相對較好的情況下,單比特糾錯在軟、硬件的實現(xiàn)及糾錯的可靠性方面都有著自己的天然優(yōu)勢。假設(shè)傳輸過程使用二進制編碼方式且誤碼率為p,一包數(shù)的數(shù)據(jù)量為nbits,則傳輸過程中整包數(shù)據(jù)正確的概率為(1-p)n,那么數(shù)據(jù)傳輸錯誤的概率為Pe=1-(1-p)n。而傳輸過程中出現(xiàn)錯誤為單比特錯誤的概率為Pe1=Cn1p(1-p)n-1。從而可以得到單比特錯誤占總錯誤的比例為R=Pe1/Pe=np(1-p)n/(1-(1-p)n)。根據(jù)相應(yīng)計算,可以得到在誤碼率下降的情況下,單比特錯誤占整包數(shù)錯誤的比例迅速升高,尤其當誤碼率低于10-4時,單比特錯誤占整包數(shù)錯誤的比例已經(jīng)高于了90%,而當誤碼率低于10-6時,單比特錯誤占整包數(shù)錯誤的比例已經(jīng)高于99.95%(這里的計算是根據(jù)包長度為1024bits計算得到的)。因此,可以看出當信息傳輸過程中的誤碼率較低時,單比特錯誤占整包錯誤中的比例迅速增高,計算表明,在誤碼率低于10-6時,通過單比特糾錯技術(shù)可以有效的降低誤包率3個數(shù)量級以上。為了提高數(shù)據(jù)的傳輸能力和處理能力,并行CRC算法、單比特糾錯功能的引入有效的利用了有限的資源提高了數(shù)據(jù)的可靠性和安全性。技術(shù)實現(xiàn)要素::本發(fā)明的目的是為了解決串行數(shù)據(jù)傳輸過程中傳輸速度受限于一條數(shù)據(jù)線造成的速度慢、基于串行傳輸?shù)拇蠧RC算法的運算慢及基于丟包、重傳的數(shù)據(jù)傳輸效率低下的問題。本發(fā)明為一種具有單比特糾錯功能的并行CRC糾錯方法,包括以下步驟:步驟一:選擇合適的CRC校驗多項式、計算相應(yīng)的并行算法;根據(jù)數(shù)據(jù)傳輸要求和數(shù)據(jù)包長度要求,選擇合適的CRC校驗多項式 CRC16.X25=X16+X12+X5+1,式中Xi是碼元位置的標記,它表示由其系數(shù)所決定的碼元取值所處的對應(yīng)位置。根據(jù)相應(yīng)的CRC校驗多項式,經(jīng)過迭代運算得到16位CRC并行運算式R[0]=D[12]^D[11]^D[8]^D[4]^D[0]^R[0]^R[4]^R[8]^R[11]^R[12]R[1]=D[13]^D[12]^D[9]^D[5]^D[1]^R[1]^R[5]^R[9]^R[12]^R[13]R[2]=D[14]^D[13]^D[10]^D[6]^D[2]^R[2]^R[6]^R[10]^R[13]^R[14]R[3]=D[15]^D[14]^D[11]^D[7]^D[3]^R[3]^R[7]^R[11]^R[14]^R[15]R[4]=D[15]^D[12]^D[8]^D[4]^R[4]^R[8]^R[12]^R[15]R[5]=D[13]^D[12]^D[11]^D[9]^D[8]^D[5]^D[4]^D[0]^R[0]^R[4]^R[5]^R[8]^R[9]^R[11]^R[12]^R[13]R[6]=D[14]^D[13]^D[12]^D[10]^D[9]^D[6]^D[5]^D[1]^R[1]^R[5]^R[6]^R[9]^R[10]^R[12]^R[13]^R[14]R[7]=D[15]^D[14]^D[13]^D[11]^D[10]^D[7]^D[6]^D[2]^R[2]^R[6]^R[7]^R[10]^R[11]^R[13]^R[14]^R[15]R[8]=D[15]^D[14]^D[12]^D[11]^D[8]^D[7]^D[3]^R[3]^R[7]^R[8]^R[11]^R[12]^R[14]^R[15]R[9]=D[15]^D[13]^D[12]^D[9]^D[8]^D[4]^R[4]^R[8]^R[9]^R[12]^R[13]^R[15]R[10]=D[14]^D[13]^D[10]^D[9]^D[5]^R[5]^R[9]^R[10]^R[13]^R[14]R[11]=D[15]^D[14]^D[11]^D[10]^D[6]^R[6]^R[10]^R[11]^R[14]^R[15]R[12]=D[15]^D[8]^D[7]^D[4]^D[0]^R[0]^R[4]^R[7]^R[8]^R[15]R[13]=D[9]^D[8]^D[5]^D[1]^R[1]^R[5]^R[8]^R[9]R[14]=D[10]^D[9]^D[6]^D[2]^R[2]^R[6]^R[9]^R[10]R[15]=D[11]^D[10]^D[7]^D[3]^R[3]^R[7]^R[10]^R[11]其中,R代表相應(yīng)寄存器中的數(shù)值,D代表相應(yīng)輸入數(shù)據(jù)的數(shù)值,^表示異或運算。步驟二:建立查找表;設(shè)G(X)為CRC的校驗多項式,k為傳輸數(shù)據(jù)的長度,n為發(fā)送數(shù)據(jù)的長度,則校驗位的長度為n-k。此時,設(shè)發(fā)送數(shù)據(jù)的多項式為v(x),傳輸錯誤數(shù)據(jù)多項式為e(x)及接收數(shù)據(jù)多項式為r(x),他們之間存在如下關(guān)系r(x)=v(x)+e(x)令CRC校驗和計算表示如下CRCG(x){v(x)},在G(x)、v(x)、n與k一定的情況下,計算結(jié)果應(yīng)該為一個0。在接收端,用相同的CRC校驗多項式進行計算,可以得到以下結(jié)論CRCG(x){r(x)}=CRCG(x){v(x)+e(x)}=CRCG(x){e(x)}這說明如果存在一個合適的CRC多項校驗式使不同錯誤類型錯誤得到的CRC校驗結(jié)果兩兩不相同,那么數(shù)據(jù)中發(fā)生錯誤的位置可以由生成的CRC校驗結(jié)果得到。根據(jù)包長度和相應(yīng)的并行CRC運算式,計算該長度各位產(chǎn)生錯誤時的CRC值,并且將該值存放至相應(yīng)的存儲空間待用。步驟三:數(shù)據(jù)糾錯;通過上述方式在傳輸數(shù)據(jù)中加入相應(yīng)的CRC,在接收方利用相同的CRC對數(shù)據(jù)進行CRC的解算,如果數(shù)據(jù)在傳輸過程中沒有發(fā)生誤碼,則解算出的CRC應(yīng)為0;如果解算出的CRC值不為零,則將該值與之前儲存好的查找表進行比較,若產(chǎn)生匹配,則將查找表中的對應(yīng)位與數(shù)據(jù)的對應(yīng)位進行異或運算,解算后可以獲得正確的數(shù)據(jù);若沒有產(chǎn)生匹配,則說明數(shù)據(jù)發(fā)生了未知位數(shù)的數(shù)據(jù)傳輸錯誤,應(yīng)該丟棄。本發(fā)明的優(yōu)點在于:(1)本發(fā)明采用16位并行傳輸方式和16位并行CRC校驗運算,在工作頻率保持不變的情況下,可以有效的將傳輸速度和運算能力提升為原來的16倍。在僅僅提升部分邏輯資源的情況下有效的提高整體的數(shù)據(jù)傳輸、處理能力;(2)本發(fā)明采用數(shù)據(jù)的糾錯取代數(shù)據(jù)丟包、重傳,可以有效的提高數(shù)據(jù)的傳輸效率和可靠性,這樣可以有效的提高整個系統(tǒng)的數(shù)據(jù)吞吐能力;(3)本發(fā)明采用單比特糾錯功能,這樣做可以有效的降低良好環(huán)境下的誤包率,同時可以有效的減少查找表所需的儲存空間,減少硬件開銷。附圖說明圖1為本發(fā)明的步驟示意圖。圖2為本發(fā)明的并行CRC算法示意圖。附表說明表1為本發(fā)明的單比特錯誤查找示意表。具體實施方式下面將結(jié)合附圖及附表對本發(fā)明作進一步的詳細說明。本發(fā)明是一種具有單比特糾錯功能的并行CRC糾錯方法,下面結(jié)合附圖,對本發(fā)明技術(shù)方案進行詳細描述。圖1給出了本發(fā)明中的各步驟的具體示意圖,其具體分為選擇合適的CRC多項式、并行CRC算法運算、建立單比特錯誤查找表及數(shù)據(jù)糾錯幾個步驟。從國際標準組織找尋所需并行CRC位數(shù)的相應(yīng)CRC校驗多項式,由于國際標準組織所給的CRC多項式覆蓋的錯誤率高于隨意寫出的多項式,要結(jié)合自己的具體設(shè)計來選取,這里我們選取的CRC校驗多項式CRC16.X25=X16+X12+X5+1。如圖2所示,根據(jù)相應(yīng)的CRC校驗多項式運用并行算法,先計算串行算法中第一個時鐘周期的理論每個寄存器中的數(shù)據(jù);再計算第二個時鐘周期的理論每個寄存器中的數(shù)據(jù);以此類推,算出第16個周期的理論每個寄存器中的數(shù)據(jù),這個數(shù)據(jù)也是最后的并行輸出數(shù)據(jù),算法也應(yīng)該是最終的并行組合邏輯算法:R[0]=D[12]^D[11]^D[8]^D[4]^D[3]^R[0]^R[4]^R[8]^R[11]^R[12]R[1]=D[13]^D[12]^D[9]^D[5]^D[1]^R[1]^R[5]^R[9]^R[12]^R[13]R[2]=D[14]^D[13]^D[10]^D[6]^D[2]^R[2]^R[6]^R[10]^R[13]^R[14]R[3]=D[15]^D[14]^D[11]^D[7]^D[3]^R[3]^R[7]^R[11]^R[14]^R[15]R[14]=D[15]^D[12]^D[8]^D[4]^R[4]^R[8]^R[12]^R[15]R[5]=D[13]^D[12]^D[11]^D[9]^D[8]^D[5]^D[4]^D[0]^R[0]^R[4]^R45]^R[8]^R[9]^R[11]^R[12]^R[13]R[6]=D[14]^D[13]^D[12]^D[10]^D[9]^D[6]^D[5]^D[1]^R[1]^R[5]^R[6]^R[9]^R[10]^R[12]^R[13]^R[14]R[7]=D[15]^D[14]^D[13]^D[11]^D[10]^D[7]^D[6]^D[2]^R[2]^R[6]^R[7]^R[10]^R[11]^R[13]^R[14]^R[15]R[8]=D[15]^D[14]^D[12]^D[11]^D[8]^D[7]^D[3]^R[3]^R[7]^R[8]^R[11]^R[12]^R[14]^R[15]R[9]=D[15]^D[13]^D[12]^D[9]^D[8]^D[4]^R[4]^R[8]^R[9]^R[12]^R[13]^R[15]R[10]=D[14]^D[13]^D[10]^D[9]^D[5]^R[5]^R[9]^R[10]^R[13]^R[14]R[11]=D[15]^D[14]^D[11]^D[10]^D[6]^R[6]^R[10]^R[11]^R[14]^R[15]R[12]=D[15]^D[8]^D[7]^D[4]^D[0]^R[0]^R[4]^R[7]^R[8]^R[15]R[13]=D[9]^D[8]^D[5]^D[1]^R[1]^R[5]^R[8]^R[9]R[14]=D[10]^D[9]^D[6]^D[2]^R[2]^R[6]^R[9]^R[10]R[15]=D[11]^D[10]^D[7]^D[3]^R[3]^R[7]^R[10]^R[11]分別將數(shù)據(jù)的每一位錯誤分別羅列出來,并且進行相應(yīng)的并行CRC運算,將相應(yīng)的運算建立如表1的查找表,并且在硬件中開辟相應(yīng)的資源將相應(yīng)的數(shù)據(jù)存到開辟的儲存空間,將數(shù)據(jù)按照升序或者降序進行排序并且在該數(shù)據(jù)區(qū)標明單比特錯誤位置。接收數(shù)據(jù)并且進行相應(yīng)的并行CRC校驗運算,最后得到的CRC值不為0時則將該值與數(shù)據(jù)區(qū)的儲存數(shù)據(jù)進行比較,由于采用升序或者降序排列,那么查詢所需的次數(shù)為不小于log2(M)的整數(shù)次,M為數(shù)據(jù)長度。如果查詢結(jié)果錯誤,那么進行丟包或者重傳(由于單比特占包錯誤的百分比通過之前的計算很高,且進行多比特糾錯時需要的儲存空間很大)。z116’hf0baz216’hf049z316’hf034z416’h781az516’h3c0dz616’h9616z716’h4b0bz816’had95......……z103716’h8108z103816’h4084z103916’h2042z104016’h1021表1例1首先建立一個查詢表,將一包數(shù)據(jù)中的某個比特位設(shè)置為‘1’,其他比特位全部設(shè)置為‘0’,分別計算不同比特位為‘1’的情況下CRC的數(shù)值并將它們放置在相應(yīng)的查詢表位置用于之后的解算后的查詢。這里設(shè)zi為數(shù)據(jù)包中的第i個比特位為‘1’的情況,T[CRCG(zi)]為第i個比特位為‘1’的情況下計算出的CRC數(shù)值。這里使用一個簡單的例子來說明查找表是如何產(chǎn)生的,設(shè)CRC校驗多項式為G=x3+x+1,可以表示為1011,傳輸?shù)臄?shù)據(jù)為4位,這里我們需要3位CRC作為數(shù)據(jù)的校驗位,則z1=1000000,此時我們有CRCG(z1)=5,同理我們可以得到CRCG(z2)=7,CRCG(z3)=6,CRCG(z4)=3,CRCG(z5)=4,CRCG(z6)=2及CRCG(z7)=1。如果任意兩個CRC的運算結(jié)果不相同,那么我們可以認為CRCG 對于zi具有單映射性,即得到相應(yīng)的CRC結(jié)果可以得到相對應(yīng)的比特位錯誤信息。根據(jù)上面的運算結(jié)果我們可以得到糾錯表T={5,7,6,3,4,2,1},在接收方,可以根據(jù)最終計算出的CRC對照糾錯表中的值確定單比特發(fā)生錯誤的位置并進行相應(yīng)錯誤比特位的糾錯。對于長度為n的CRC校驗位,最長可以具有的數(shù)據(jù)位長度為L=2n-n-1。以下通過一個具體的例子來證明上面的表述,假設(shè)所需要傳輸?shù)臄?shù)據(jù)為M=1101,計算得出CRC,即CRCG(1101)=001,那么傳輸?shù)臄?shù)據(jù)應(yīng)該為M’=1101001,假設(shè)在傳輸過程中第二比特位發(fā)生錯誤,那么接收到的數(shù)據(jù)應(yīng)該為M”=1001001,通過CRC校驗計算,可以得到CRCG(M”)=7,通過查表可以看出T[2]=7,那么說明接收到的數(shù)據(jù)的第二個比特位發(fā)生了錯誤,經(jīng)過糾正該位錯誤得到正確的接收數(shù)據(jù)1101001。當前第1頁1 2 3