亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        CRC查表法的推廣及其在iLOCK聯(lián)鎖系統(tǒng)中的應(yīng)用

        2015-06-28 15:41:30董高云孫軍峰
        關(guān)鍵詞:校驗(yàn)碼原始數(shù)據(jù)字節(jié)

        董高云,孫軍峰

        (卡斯柯信號有限公司,上海 200071)

        CRC查表法的推廣及其在iLOCK聯(lián)鎖系統(tǒng)中的應(yīng)用

        董高云,孫軍峰

        (卡斯柯信號有限公司,上海 200071)

        通過整數(shù)字節(jié)的CRC查表算法,改進(jìn)了CRC編碼校驗(yàn)算法的效率;同時經(jīng)過推導(dǎo)證明,可以將傳統(tǒng)的16 bit或32 bit的整數(shù)字節(jié)CRC查表法,推廣至小于16 bit或32 bit的任意位數(shù)信息位的非整數(shù)字節(jié)。隨后將這兩種CRC查表法,應(yīng)用到iLOCK計(jì)算機(jī)聯(lián)鎖系統(tǒng)中的冗余編碼運(yùn)算中,提高了冗余編碼計(jì)算的運(yùn)算效率及iLOCK系統(tǒng)的整體性能。

        CRC;查表法;計(jì)算機(jī)聯(lián)鎖;冗余編碼

        循 環(huán) 冗 余 編 碼 檢 驗(yàn) 技 術(shù)(CRC,Cyclic Redundancy Check)被廣泛應(yīng)用于通信傳輸領(lǐng)域。由于其實(shí)現(xiàn)簡單,檢錯能力強(qiáng),被廣泛使用在各種數(shù)據(jù)校驗(yàn)應(yīng)用中。它占用系統(tǒng)資源少,用軟硬件均能實(shí)現(xiàn),是進(jìn)行數(shù)據(jù)傳輸差錯檢測的一種很好的手段[1~5]??ㄋ箍滦盘栍邢薰?iLOCK 聯(lián)鎖系統(tǒng)[3~4]下位機(jī)的冗余編碼就采用了多種不同的CRC循環(huán)冗余編碼校驗(yàn)算法。

        由于采用硬件實(shí)現(xiàn) CRC循環(huán)冗余編碼需要專用的移位寄存器電路,且硬件電路的調(diào)整不夠靈活,因此在 iLOCK 聯(lián)鎖系統(tǒng)中采用軟件來實(shí)現(xiàn) CRC 冗余編碼。由軟件完成 CRC 計(jì)算,即 CRC 的算法問題[5],許多相關(guān)的文獻(xiàn)中對此均有描述,軟件CRC算法普遍存在相對于硬件 CRC 算法耗時長的缺陷。

        聯(lián)鎖下位機(jī)系統(tǒng)作為高實(shí)時的嵌入式系統(tǒng),為了適應(yīng)大站場時的大規(guī)模聯(lián)鎖邏輯運(yùn)算的需求,對于計(jì)算效率的要求比較高。為了提高效率,需要盡量減少CRC計(jì)算的耗時,以改進(jìn)軟件CRC算法耗時長的缺陷,為此,編程人員提出了眾多的解決方法,CRC 查表法是最常用的一種縮短計(jì)算耗時的方法。

        本文闡述單字節(jié)的CRC算法原理,通過建立單字節(jié)CRC表格,實(shí)現(xiàn)雙字節(jié)迭代CRC查表法,并將其應(yīng)用于 iLOCK 聯(lián)鎖系統(tǒng)中。通過證明和推導(dǎo),將整數(shù)字節(jié)的數(shù)據(jù)位的CRC查表法推廣至任意位數(shù)據(jù)位的非整數(shù)字節(jié)。隨后也將其應(yīng)用于 iLOCK 聯(lián)鎖系統(tǒng)中,大幅度提高了冗余編碼計(jì)算效率,從而提高了 iLOCK 系統(tǒng)的整體性能。

        1 單字節(jié)CRC算法及CRC查表法簡介

        CRC 的計(jì)算原理說明如下 :

        下面為一個二進(jìn)制除法計(jì)算過程,假設(shè)待計(jì)算CRC 的原始數(shù)據(jù)為一個字節(jié) 0xd8(11011000),CRC生 成 多 項(xiàng) 式 取 為 0x17d3b(10111110100111011),則以 0xd8 為被除數(shù),以生成多項(xiàng)式為除數(shù),進(jìn)行二進(jìn)制除法運(yùn)算。計(jì)算原理見文獻(xiàn) [1]。由于生成多項(xiàng)式為2個字節(jié),進(jìn)行除法運(yùn)算時,被除數(shù)需要在其后 補(bǔ) 齊 2 個 字 節(jié) 的 0, 變 為 :0xd80000(11011000 00000000 00000000)。

        上面計(jì)算 的余數(shù)為 0xdaab(1101101010101011),即為原始數(shù)據(jù) 0xd8 的 CRC 校驗(yàn)碼值。這就是單字節(jié) CRC 計(jì)算原理。

        對于所有的單字節(jié)原始數(shù)據(jù)(信息碼)(取值范圍為 :0x00~0xff)采用上述的多項(xiàng)式除法,都唯一對應(yīng)一個雙字節(jié)的余數(shù)(CRC 校驗(yàn)碼),全部的單字節(jié)數(shù)據(jù)及其對應(yīng)的雙字節(jié)余數(shù)(CRC校驗(yàn)碼)即可組成一張表,于是可編寫程序代碼按上式的計(jì)算方法生成一張信息碼—校驗(yàn)碼對照表,求取單字節(jié)的信息碼所對應(yīng)的校驗(yàn)碼的過程就簡化為了查表過程,縮短了多項(xiàng)式除法的計(jì)算時間,這就是通用的單字節(jié)查表法。

        構(gòu)造上述 16 bitCRC 表的 C 語言程序如下 :

        說明如下 :aPoly 為除數(shù)(生成多項(xiàng)式)但注意要去掉最高位,只保留低 16 bit雙字節(jié)。nData 即為0~255 的單字節(jié)原始信息位數(shù)據(jù),Table_CRC[i]即為生成的校驗(yàn)碼表,共有 256 個值,對應(yīng) 0~255 的信息位 nData。nAccum 為中間余數(shù),初值為 nData。當(dāng)中間余數(shù)最高位為1時,下一次的除法運(yùn)算的中間余數(shù)就是本次中間余數(shù)移位后和 aPoly 異或的結(jié)果,否則只需將本次中間余數(shù)移位即可[3]。

        2 多字節(jié)CRC迭代查表算法及其在iLOCK聯(lián)鎖系統(tǒng)中的應(yīng)用

        上述單字節(jié)查表法僅解決了單字節(jié)信息位數(shù)據(jù)的校驗(yàn)碼求取問題,對于2個字節(jié)的數(shù)據(jù),作如下分析:

        為與單字節(jié)的情況作比較,將兩字節(jié)拆開計(jì)算,先看高字節(jié)數(shù)據(jù)D1的計(jì)算:

        上述運(yùn)算中將每移位一個字節(jié)的單字節(jié)除法運(yùn)算作為一個階段,稱為1次,則2個字節(jié)共有2次余數(shù)。

        比較雙字節(jié)運(yùn)算和高字節(jié)運(yùn)算的第1次余數(shù)A’和 HA’。先看低字節(jié)余數(shù) A0’和 HA0’:注意到兩種運(yùn)算被除數(shù)的第 2 個字節(jié)均為 0x00,而第 1 次的余數(shù)的低字節(jié)數(shù)據(jù)只與被除數(shù)的第2個字節(jié)和除數(shù)的移位有關(guān),根據(jù)前述的單字節(jié)查表法原理知,除數(shù)的移位操作只與被除數(shù)的最高字節(jié)D1有關(guān),由于兩種運(yùn)算的D1值相同,因此除數(shù)的移位也完全相同,故有 :A0’=HA0’。

        再 看 高 字節(jié)余 數(shù) A1’和 HA1’。 雙 字 節(jié)運(yùn)算的 A1’=D0^p1^p2^…^p8,p1~p8 為逐 位 移 位運(yùn)過程中與高字節(jié)被除數(shù)的第 3 個字節(jié) 0x00 相對齊的除數(shù)(生成多項(xiàng)式)的一個字節(jié)的部分碼位。而高字節(jié)運(yùn)算 HA1’=0x00^p1^p2^…^p8,同樣根據(jù)前述的單字節(jié)查表法原理知,由于兩種運(yùn)算的被除數(shù)最高位 D1 值相同,故除數(shù)移位也完全相同,即 p1~p8與 高 字 節(jié) 運(yùn) 算 的 p1~p8 也 相 同, 再 根 據(jù) 邏 輯 代 數(shù)的相關(guān)運(yùn)算定律,邏輯代數(shù)運(yùn)算滿足結(jié)合律,且有 data=0x00^data, 故 A1’=D0^(p1^p2^..p8)= D0^(0x00^p1^p2^…p8)=D0^HA1’。

        由上面的分析可知,可直接根據(jù)高字節(jié)運(yùn)算的第 1 次余數(shù)值 HA0’,HA1’和低字節(jié)數(shù)值 D0 來計(jì)算出 A0’,A1’,而高字節(jié)的第1次余數(shù)實(shí)際上就是單字節(jié)CRC運(yùn)算,可直接由前述的單字節(jié)查表法程序查表算得。

        設(shè)查表法計(jì)算的函數(shù)為 PA=f(D),D 為單字節(jié)數(shù)據(jù),PA 為余數(shù)值,則 A1’=HA1’^D0=(HA’>>8)^D0=f(D1)>>8^D0。A0’=f(D1) && 0x00FF。

        接下來的第2次余數(shù)值計(jì)算與第1次結(jié)構(gòu)完全相同,僅將 D1,D0換成了A1’,A0’,對于 N 個字節(jié)的數(shù)據(jù),則有n次結(jié)構(gòu)相同的迭代運(yùn)算,設(shè)單字節(jié)第 n 次的查表法計(jì)算所得余數(shù)為 PA(n),則第n次的余數(shù)為:

        式(1)解釋如下:d 為第 n-1 次的余數(shù)的高 8 bit值,d=(PA(n-1)>>8)^D(n)

        第 n-1 次余數(shù)的高 8 bit在由單字節(jié)查表算出后,還需與雙字節(jié)原始數(shù)據(jù)的低字節(jié) D(n)異或。

        第 n 次余數(shù)值先由第 n-1 次余數(shù)的高 8 bit值 d查表算出 f(d),然后需將 f(d)的高 8 bit與第 n-1次 余 數(shù) 的 低 8 bit PA(n-1) 異 或( 類 比 前 述 A1’=D0^HA1’),異或前先將 PA(n-1)左移 8 bit以便與 f(d)高 8 bit對齊。

        于是總的迭代公式可表示為:

        式(2) 中 的 函 數(shù) f(d) 的 實(shí) 現(xiàn) 由 前 述 的 16 bit CRC 查表程序完成。

        據(jù)此編寫的計(jì)算多字節(jié)數(shù)據(jù)的 16 bit CRC 值的C語言程序如下:

        上面的 程 序 中,0x7d3b 為 16 bit生成多項(xiàng)式,首先調(diào)用 BuildTable16 函數(shù)建立信息碼 -校驗(yàn)碼的對照表 CRCTable1,然后在 CRC_16 函數(shù)中可迭代查表。*aData 為指向一個單字節(jié)數(shù)據(jù)的指針,aSize 則為總共的字節(jié)個數(shù)。

        利用上述的多字節(jié)迭代查表算法,可以求出整數(shù)個字節(jié)的數(shù)據(jù)的CRC校驗(yàn)碼,當(dāng)除數(shù)(生成多項(xiàng)式)為 16 bit時,相應(yīng)的余數(shù)(CRC 校驗(yàn)碼)也為雙字節(jié) 16 bit數(shù)。這樣,對于 0x0000~0xFFFF 范圍內(nèi)的每一個數(shù)據(jù),都有唯一對應(yīng)的CRC校驗(yàn)碼,組合起來可以構(gòu)成冗余編碼值用于冗余編碼運(yùn)算。

        在 iLOCK 聯(lián)鎖系統(tǒng)中采用了雙字節(jié)的數(shù)據(jù)及其CRC 校驗(yàn)碼共同組成冗余碼字,進(jìn)行 NISAL 碼字運(yùn)算。為了提高運(yùn)算效率,將上述的多字節(jié)迭代CRC查表算法引入到 iLOCK 聯(lián)鎖系統(tǒng)的冗余碼字校驗(yàn)中。方法說明如下:

        假 設(shè) 一 個 4 字 節(jié) 的 冗 余 碼 字 為 D(DH,DL),其中 DL為原始數(shù)據(jù)位,DH 為其 CRC校驗(yàn)碼,則可采用上述的多字節(jié)迭代CRC查表算法檢驗(yàn)DH是否為DL所對應(yīng)的正確的CRC值,以下程序中aData[0],aData[1] 分別為 DL 雙字節(jié)數(shù)據(jù)位的高、低字節(jié),通過雙字節(jié)的迭代CRC查表法,算出CRC值 DH,左移 16 bit后,再與 DL 組合為最終的結(jié)果值 result,判斷 result如果與 D 相同,則通過校驗(yàn),否則不通過。

        3 CRC查表法的推廣——非整數(shù)字節(jié)的任意信息位編碼的查表及其在iLOCK聯(lián)鎖系統(tǒng)中的應(yīng)用

        以上敘述了通用的CRC算法及查表法,以及基于該表格的多字節(jié)的迭代 CRC查表運(yùn)算。更多字節(jié)(如 32 bit)的 CRC 查表法可依此類推。該算法已成功被應(yīng)用到 iLOCK 聯(lián)鎖系統(tǒng)的冗余編碼運(yùn)算中,極大地改善了采用傳統(tǒng)移位算法進(jìn)行CRC運(yùn)算的計(jì)算效率。

        除了上述CRC應(yīng)用外,在編碼領(lǐng)域,大量的場合還需要用到非整數(shù)個字節(jié)的數(shù)據(jù)的CRC冗余編碼,例如 :7 bit原始數(shù)據(jù)位,15 bit數(shù)據(jù)位等。本文將要證明在非規(guī)則的多項(xiàng)式除法運(yùn)算的情況下,非整數(shù)個字節(jié)的數(shù)據(jù)位編碼也可采用類似上面的規(guī)則多項(xiàng)式除法和整數(shù)個字節(jié)的方法實(shí)現(xiàn)查表法求取校驗(yàn)碼字,并給出相關(guān)的實(shí)現(xiàn)程序。隨后,同樣將這類非整數(shù)個字節(jié)的 CRC 編碼運(yùn)算應(yīng)用到 iLOCK 系統(tǒng)的冗余編碼運(yùn)算中。

        圖1 為非規(guī)則的 7 bit移位 CRC 算法,一個 4 字節(jié)的 32 bit原始數(shù)據(jù)左移 7 bit(在其后添加 7 個 0)后再與 32 bit生成多項(xiàng)式 aPoly 進(jìn)行多項(xiàng)式除法運(yùn)算,最終的 7 步除法后的余數(shù)(32 bit)即為此非規(guī)則的CRC校驗(yàn)碼值。

        圖1 非規(guī)則的7位移位CRC算法

        這種非整數(shù)字節(jié)的移位CRC算法參照前述的CRC算法,可用以下的代碼實(shí)現(xiàn) :

        以下將證明,上述的按位移位的CRC算法仍然可以采用查表法來實(shí)現(xiàn),說明如下:

        將原始數(shù)據(jù)D分拆為高低兩部分?jǐn)?shù)據(jù),高位數(shù)據(jù) DH 為 7 bit(hhhhhhh),低位數(shù)據(jù) DL 為 25 bit(lllll llllllllllllllllllll),則僅僅高位數(shù)據(jù)的多項(xiàng)式除法運(yùn)算可表示為:

        根據(jù)函數(shù)中定義的邏輯運(yùn)算規(guī)則知,每一步運(yùn)算中P是直接移位還是要進(jìn)行異或運(yùn)算,取決于每步移位操作中的最高位,實(shí)際上就是高位數(shù)據(jù)DH的各位狀態(tài),故上面的實(shí)際數(shù)據(jù)D的運(yùn)算和高位數(shù)據(jù)H 的運(yùn)算過程中,由于高 7 bit均為 H,故總共 7 步除法的移位/異或操作過程相同。將上兩個運(yùn)算的余數(shù) A,A’分別拆為 A1、A0 和 A1’、A0’,A1,A1’為余數(shù)的高 25 bit,A0、A0’為余數(shù)的低 7 bit,則由于 A0,A0’所對應(yīng)的原始數(shù)據(jù)都為補(bǔ)齊的 7 個 0,故 A0=A0’,而 A1 和 A1’所對應(yīng)的原始數(shù)據(jù)分別為 DL(25 bit低位數(shù)據(jù))和 0,且有 :

        A1=DL^p1^p2…^p7,A1’=0^p1^p2…^p7。由于兩種運(yùn)算中高 7 bit數(shù)據(jù) DH 相同,故 7 步除法中的移位 /異或操作過程相同,從而 7步運(yùn)算的異或值p1~p7 在兩種運(yùn)算中相同,又 data=data^0。故有 :

        A1=DL^0^p1^p2 … ^p7=D L^(0^p1^p2 …^p7)=DL^A1’。

        即 :原始數(shù)據(jù)的余數(shù)的高 25 bit值等于原始數(shù)據(jù)的高 7 bit數(shù)據(jù)的余數(shù)與其低 25 bit數(shù)據(jù)相異或,而原始數(shù)據(jù)的余數(shù)的低 7 bit值就是原始數(shù)據(jù)高 7 bit數(shù)據(jù)的余數(shù)值的低 7 bit值。

        DH的余數(shù)A’在生成多項(xiàng)式確定的情況下,只隨著DH的改變而改變,于是可以遵循上面的運(yùn)算規(guī)則生成一張 DH 與其余數(shù) A1’相對應(yīng)表格。采用查表法計(jì)算上述冗余編碼的程序可表示為:

        計(jì)算最終的原始數(shù)據(jù)的余數(shù)時,再將上述查表結(jié)果 A’^(DL<<7), 即可求出 A。其低 7 bit就是A’的低 7 bit,高 25 bitA’需要與原始信息位的低25 bit異或(需左移 7 bit以對齊),最終高低位拼起來就組成了A。利用生成的表格進(jìn)行查表運(yùn)算和后續(xù)處理的函數(shù)為:

        以上非規(guī)則的移位 CRC 算法同樣被用于 iLOCK聯(lián)鎖系統(tǒng)中的冗余編碼運(yùn)算中,從而大幅度提高了運(yùn)算效率,使得整體的冗余編碼運(yùn)算速度大幅度加快,從而提高了 iLOCK 系統(tǒng)的整體性能。

        4 結(jié)束語

        循環(huán)冗余編碼CRC校驗(yàn)算法被廣泛應(yīng)用于各種數(shù)據(jù)校驗(yàn)中。用軟件實(shí)現(xiàn)的CRC算法效率較低,在實(shí)際應(yīng)用中需要通過查表法來提高運(yùn)算效率。本文基于單字節(jié)信息位的 16 bit CRC 冗余碼,建立了 16 bit的CRC表,并且推導(dǎo)了基于該CRC表進(jìn)行多字節(jié)查表的算法,將其應(yīng)用于 iLOCK 聯(lián)鎖系統(tǒng)的下位機(jī)冗余編碼運(yùn)算中,經(jīng)過理論推導(dǎo),進(jìn)一步將整數(shù)字節(jié)的查表法推廣至任意位數(shù)信息位的查表算法,相關(guān)的算法也應(yīng)用到了 iLOCK 聯(lián)鎖系統(tǒng)的冗余編碼運(yùn)算中。經(jīng)測試,查表算法的應(yīng)用能大幅度提高冗余編碼計(jì)算效率,提高 iLOCK 系統(tǒng)的整體性能。

        [1] 沙 依(美).數(shù)據(jù)通信與網(wǎng)絡(luò)教程 [M].高傳善 ,譯 .北京:機(jī)械工業(yè)出版社,2000.

        [2] 楊萃南 .數(shù)字電子技術(shù)與邏輯設(shè)計(jì)教程 [M].北京 :電子工業(yè)出版社,2003(4).

        [3] 姜堅(jiān)華 .iLOCK 的安全模型和安全性分析 [J]. 鐵道通信信號,2010(7).

        [4] 呂永昌,林瑜筠 . 計(jì)算機(jī)聯(lián)鎖 [M]. 北京 :中國鐵道出版社,2007(4).

        [5] 馮翔宇 .循環(huán)冗余校驗(yàn)碼 CRC 算法分析與實(shí)現(xiàn) [J].中國 科技信息,2010(21).

        責(zé)任編輯 方 圓

        CRC table look-up method’s extension and its application in iLOCK Interlocking System

        DONG Gaoyun, SUN Junfeng
        ( Casco Signal LTD., Shanghai 200071, China )

        The ef ciency of CRC Code Veri cation Algorithm was improved by CRC Table Lookup Algorithm of integer byte. The derivation showed that the traditional CRC Table Lookup Algorithm for 16 bit or 32 bit of integer byte could be extended to less than 16 bit or 32 bit of non integer byte of arbitrary. Two kinds of CRC Table Lookup Algorithm were successfully applied to the redundant coding calculation in iLOCK Interlocking System, greatly improved the ef ciency of the redundant coding calculation. So the total performance of iLOCK System was improved.

        CRC; Table Lookup Algorithm; computer interlocking; redundant coding

        U284.3∶TP39

        :A

        1005-8451(2015)01-0040-06

        2014-01-23

        董高云,高級工程師;孫軍峰,高級工程師。

        猜你喜歡
        校驗(yàn)碼原始數(shù)據(jù)字節(jié)
        GOLDEN OPPORTUNITY FOR CHINA-INDONESIA COOPERATION
        No.8 字節(jié)跳動將推出獨(dú)立出口電商APP
        受特定變化趨勢限制的傳感器數(shù)據(jù)處理方法研究
        No.10 “字節(jié)跳動手機(jī)”要來了?
        簡談MC7字節(jié)碼
        全新Mentor DRS360 平臺借助集中式原始數(shù)據(jù)融合及直接實(shí)時傳感技術(shù)實(shí)現(xiàn)5 級自動駕駛
        汽車零部件(2017年4期)2017-07-12 17:05:53
        基于Excel實(shí)現(xiàn)書號校驗(yàn)碼的驗(yàn)證
        基于FPGA的循環(huán)冗余校驗(yàn)碼設(shè)計(jì)
        電子世界(2015年14期)2015-11-07 05:32:29
        身份證號碼中的數(shù)學(xué)
        世界經(jīng)濟(jì)趨勢
        久久亚洲AV成人一二三区| 97人伦色伦成人免费视频| 久久aⅴ人妻少妇嫩草影院| 99福利网| 亚洲国产精品二区三区| 日本一区二区在线免费视频| 国语对白嫖老妇胖老太| 精品十八禁免费观看| 国产在线观看不卡网址| 美妇炮灰被狂躁爽到高潮h| 女人张开腿让男桶喷水高潮 | 国产精品久久久爽爽爽麻豆色哟哟 | 国产主播一区二区三区在线观看| 国产做床爱无遮挡免费视频| av新型国产在线资源| 欧美成人精品a∨在线观看| 小12萝8禁在线喷水观看| 久久AⅤ无码精品色午麻豆| 日本亚洲系列中文字幕| 久久久精品一区aaa片| 日本色噜噜| 国产一区二区免费在线观看视频| 一本一道久久精品综合| 日韩激情无码免费毛片| 亚洲成成品网站源码中国有限公司| 青青草99久久精品国产综合| 亚洲精品岛国av一区二区| 亚洲国产天堂久久综合网| 99久久综合精品五月天| 求网址日韩精品在线你懂的| 揄拍成人国产精品视频| 国内老熟妇对白xxxxhd| 国产精品亚洲A∨无码遮挡| 国产精品一区av在线| 99久久免费国产精品| 午夜a福利| 国产精品美女主播一区二区| 日本肥老妇色xxxxx日本老妇| 98bb国产精品视频| 中文字幕一区二区三区精品在线| 国产乱子伦精品无码专区 |