0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CRC校驗(yàn)快速算法的原理及實(shí)現(xiàn)改進(jìn)設(shè)計(jì)

電子設(shè)計(jì) ? 來源:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)應(yīng)用 ? 作者:劉小匯 , 王飛雪 ? 2020-09-14 17:42 ? 次閱讀

CRC(循環(huán)冗余校驗(yàn)碼)編碼是數(shù)字信號(hào)傳輸中用得較普遍的一種差錯(cuò)控制編碼。它不但可以用于糾正獨(dú)立的隨機(jī)錯(cuò)誤,也可以用于糾正突發(fā)錯(cuò)誤。CRC校驗(yàn)通常是靠專用硬件電路來實(shí)現(xiàn)的,但很多系統(tǒng)為了降低成本,常常利用單片機(jī)微處理器編程來完成這一功能。因此,在器件處理能力有限的情況下,如何提高CRC 校驗(yàn)軟件計(jì)算的速度,是開發(fā)者最為關(guān)心的問題。

1 整字節(jié)序列的CRC校驗(yàn)快速算法

文獻(xiàn)[1]提出了一種針對(duì)整字節(jié)的CRC快速算法。它的基本思想是預(yù)先生成一個(gè)余式表,通過查表,利用遞推原理進(jìn)行快速計(jì)算?,F(xiàn)以 CCITT(國(guó)際電話電報(bào)咨詢委員會(huì))建議的,用于基本型數(shù)據(jù)傳輸規(guī)程的生成多項(xiàng)式為例,簡(jiǎn)要介紹此先驗(yàn)算法的基本原理。

設(shè)M為由i個(gè)字節(jié)組成的8×i位二進(jìn)制序列,用字節(jié)形式表示為

截取Mi的前個(gè)字節(jié)構(gòu)成一個(gè)序列,即

這兩個(gè)序列之間的關(guān)系可以表示為

其中是字節(jié)的二進(jìn)制多項(xiàng)式表示形式,是將序列左移一個(gè)字節(jié)。

對(duì)于序列來說,有

其中,是商多項(xiàng)式,為一整數(shù)項(xiàng);為最高次冪小于15的余數(shù)項(xiàng)。而對(duì)于Mi序列,

其中為整數(shù)項(xiàng),因此對(duì)多項(xiàng)式取余即等效于對(duì)多項(xiàng)式取余,記做

這樣就形成了遞推關(guān)系。對(duì)于序列,已知就可知,已知就可知,最后就變成了求三字節(jié)序列的余式項(xiàng)的問題。

不失一般性,設(shè)三字節(jié)序列 ,那么

我們可以預(yù)先做好一個(gè)16×16的[a00]形式的余式表,通過查余式表可以很快知道,而是小于等于16位的二字節(jié)序列,除以的余式即為本身。(4)式中的加法運(yùn)算為模2加(異或運(yùn)算)。運(yùn)用此算法就可很快求出整字節(jié)的CRC校驗(yàn)碼。

2 任意長(zhǎng)度序列的CRC校驗(yàn)快速算法

上述算法,只適用于信息長(zhǎng)度為整字節(jié)的情形;但在實(shí)際應(yīng)用中,往往會(huì)遇到計(jì)算非整字節(jié)的CRC校驗(yàn)碼。一種解決方法是,在信息數(shù)據(jù)前補(bǔ)零,即將信息數(shù)據(jù)右移,使之成為整字節(jié)來計(jì)算,這對(duì)于信息數(shù)據(jù)序列不長(zhǎng)的情況還是奏效的;但遇到長(zhǎng)數(shù)據(jù)序列,若對(duì)每一個(gè)字節(jié)均進(jìn)行移位操作,則計(jì)算量明顯增加,這一缺點(diǎn)對(duì)于實(shí)時(shí)性要求高的系統(tǒng)來說尤其明顯。下面以生成多項(xiàng)式為例,提出一種改進(jìn)算法,可實(shí)現(xiàn)任意長(zhǎng)度序列快速CRC校驗(yàn)運(yùn)算。

設(shè)D為任意長(zhǎng)度的二進(jìn)制序列,記長(zhǎng)度為k位,則k總可以表示成的形式。其中s≥0,且0≤p<8。這樣,就可以將序列D按降冪形式寫成 D(x)=xp[d1d2……ds-1ds]+m(x),dj(1≤j≤s)是位長(zhǎng)為8的字節(jié),m為序列D除掉整字節(jié)后余下的位,為非整字節(jié)。記序列 M(x)=[d1d2……ds-1ds],那么

M(x)為整字節(jié)序列,其余式RM(x)可用前面介紹的整字節(jié)CRC算法求出。因?yàn)樯啥囗?xiàng)式G(x)=x16+x12+x5+1的最高次冪為 16,所以序列D(x)的余式RD(x)為

其中 ,即形成兩個(gè)余式的模2加(異或運(yùn)算),m(x)的長(zhǎng)度小于1字節(jié),所以RM(x)是[a00]形式的余式,通過查余式表可以很快得到。

現(xiàn)在來討論xpRM(x)的計(jì)算。RM(x)可以按照上述整字節(jié)的快速算法算出結(jié)果。因?yàn)镽M(x)的位長(zhǎng)為16,xpRM(x)相當(dāng)于 RM(x)向左移p位,位長(zhǎng)為(16+p)。

因?yàn)?0≤p<8

所以 16≤(16+p)<24

xpRM(x)可以看成一個(gè)3字節(jié)序列,定義

其中是2字節(jié)序列,長(zhǎng)16位,小于生成多項(xiàng)式17位。它們除以生成多項(xiàng)式的余式即為本身,所以

是為樣式的余式,可以由余式表直接獲得,所以(1)式又可寫為

這就是改進(jìn)后的非整字節(jié)CRC校驗(yàn)快速算法。它不需要進(jìn)行大量的數(shù)據(jù)移位對(duì)齊,比起整字節(jié)的算法,只增加了兩次查表和兩次異或運(yùn)算,可見其運(yùn)算量并沒有顯著增加。

值得提出的是,在文獻(xiàn)[1]提出的整字節(jié)CRC校驗(yàn)快速算法中,推導(dǎo)遞推公式(3)時(shí),作者并沒有考慮到序列用于計(jì)算CRC校驗(yàn)碼時(shí)要先移16 位(生成多項(xiàng)式為時(shí))。若讀者按照此法,直接用序列來做運(yùn)算,顯然是不對(duì)的,必將導(dǎo)致錯(cuò)誤結(jié)果。

3 適用于單片機(jī)或微處理器的算法流程

為了編程方便,我們將需處理的信息序列做以下變形。重寫(4)式,在整字節(jié)部分的M(x)后補(bǔ)2字節(jié)的“0”,得到新數(shù)列

其中,用取代M(x)做編程計(jì)算,算法流程如圖1所示。

圖1 算法流程圖

結(jié)語

任意長(zhǎng)度非整字節(jié)的CRC快速算法適用的范圍很廣,只需預(yù)先在內(nèi)存中生成一個(gè)余式表,通過查余式表就可以快速計(jì)算。由于算法的每一步遞推都是以字節(jié)為單位的,這樣就比傳統(tǒng)的以位為單位的算法要快上十幾倍。數(shù)據(jù)序列的長(zhǎng)度越長(zhǎng),其體現(xiàn)的優(yōu)越性就越高。而且算法不要求用于計(jì)算的序列為整字節(jié),任意位長(zhǎng)均適用,在實(shí)際應(yīng)用中效果顯著。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44455

    瀏覽量

    630893
  • 微處理器
    +關(guān)注

    關(guān)注

    11

    文章

    2231

    瀏覽量

    82204
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CRC校驗(yàn)算法的研究與實(shí)現(xiàn)

    CRC校驗(yàn)算法的研究與實(shí)現(xiàn)
    發(fā)表于 08-06 11:09

    如何提高CRC校驗(yàn)軟件計(jì)算的速度?

    整字節(jié)序列的CRC校驗(yàn)快速算法是什么?任意長(zhǎng)度序列的CRC校驗(yàn)快速算法是什么?適用于單片機(jī)或微處
    發(fā)表于 04-27 06:50

    簡(jiǎn)單實(shí)用的單片機(jī)CRC快速算法

    摘要:提供兩個(gè)實(shí)用的、能夠在單片機(jī)上通過軟件來實(shí)現(xiàn)CRC快速算法,其中一個(gè)適用于51系列等單片機(jī),另一個(gè)適用于PIC單片機(jī),這兩種算法十分簡(jiǎn)單快捷。
    發(fā)表于 09-09 17:52 ?33次下載

    C51實(shí)現(xiàn)單片機(jī)CRC快速算法

    摘要:本文介紹了CRC的基本原理和計(jì)算方法,給出了利用C51實(shí)現(xiàn)單片機(jī)CRC快速算法關(guān)鍵字:CRC;C51;單片機(jī);
    發(fā)表于 09-10 11:14 ?50次下載

    LTE系統(tǒng)的CRC校驗(yàn)算法及DSP實(shí)現(xiàn)

    通過對(duì)兩種常用CRC校驗(yàn)算法的研究分析,為TD-LTE測(cè)試儀表系統(tǒng)選擇了一種最優(yōu)的CRC校驗(yàn)算法,并在TMS320C64xDSP中實(shí)現(xiàn)。將
    發(fā)表于 02-23 14:58 ?30次下載

    CRC校驗(yàn)算法的研究與實(shí)現(xiàn)

    為了提高實(shí)際通信中檢查信號(hào)傳輸錯(cuò)誤的能力,提高和推廣CRC校驗(yàn)技術(shù),本論文用邏輯代數(shù)知識(shí)、按模運(yùn)算、代數(shù)知識(shí)和C語言編程工具設(shè)計(jì)了幾種具體實(shí)用的CRC校驗(yàn)碼的計(jì)算方法,這些
    發(fā)表于 05-28 15:41 ?0次下載

    簡(jiǎn)單實(shí)用的單片機(jī)CRC快速算法

    本文提供兩個(gè)實(shí)用的、能夠在單片機(jī)上通過軟件來實(shí)現(xiàn)CRC快速算法。
    發(fā)表于 03-22 16:40 ?3次下載

    16位CRC校驗(yàn)原理與算法分析

    16位CRC校驗(yàn)原理與算法分析,感興趣的小伙伴們可以看看。
    發(fā)表于 10-10 14:55 ?11次下載

    一種改進(jìn)的增維型雙邊濾波的快速算法

    一種改進(jìn)的增維型雙邊濾波的快速算法_李俊峰
    發(fā)表于 01-07 16:00 ?0次下載

    基于查表的無乘法DCT快速算法 Jpeg壓縮算法中的DCT快速算法

    基于查表的無乘法DCT快速算法 Jpeg壓縮算法中的DCT快速算法
    發(fā)表于 09-18 09:47 ?14次下載
    基于查表的無乘法DCT<b class='flag-5'>快速算法</b> Jpeg壓縮<b class='flag-5'>算法</b>中的DCT<b class='flag-5'>快速算法</b>

    DM6446的車牌定位快速算法實(shí)現(xiàn)與優(yōu)化

    DM6446的車牌定位快速算法實(shí)現(xiàn)與優(yōu)化
    發(fā)表于 10-26 15:27 ?1次下載
    DM6446的車牌定位<b class='flag-5'>快速算法</b><b class='flag-5'>實(shí)現(xiàn)</b>與優(yōu)化

    如何使用SMART編寫CRC校驗(yàn)算法程序

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用SMART編寫CRC校驗(yàn)算法程序。
    發(fā)表于 10-24 08:00 ?4次下載
    如何使用SMART編寫<b class='flag-5'>CRC</b>的<b class='flag-5'>校驗(yàn)算法</b>程序

    面向硬件實(shí)現(xiàn)的HEVC幀內(nèi)編碼快速算法

    面向硬件實(shí)現(xiàn)的HEVC幀內(nèi)編碼快速算法
    發(fā)表于 06-21 16:30 ?10次下載

    CRC校驗(yàn)算法原理及c語言實(shí)現(xiàn)

    CRC校驗(yàn)算法原理及c語言實(shí)現(xiàn)
    發(fā)表于 11-30 10:04 ?9次下載

    CRC校驗(yàn)原理及實(shí)現(xiàn)

    作者:王超首發(fā):電子電路開發(fā)學(xué)習(xí)目錄前言CRC算法簡(jiǎn)介CRC計(jì)算CRC校驗(yàn)CRC計(jì)算的C語言
    發(fā)表于 01-26 17:37 ?30次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)</b>原理及<b class='flag-5'>實(shí)現(xiàn)</b>