問題已開啟
(普通問題)
CRC是什么
• LTEPDSCH采用16bit的CRC校驗(yàn)碼,且CRS校驗(yàn)位與基站發(fā)射天線數(shù)相關(guān) 2017-07-12
• 傳輸信道可采用哪幾種編碼方式()。 卷積碼 Turbo碼 CRC 無編碼 霍夫曼編碼 2017-01-04
• LTEPDSCH采用16bit的CRC校驗(yàn)碼,且CRS校驗(yàn)位與基站發(fā)射天線數(shù)相關(guān)。 2015-08-20
• CRC信道編碼是怎么回事 2015-01-11
• 小區(qū)搜索中天線數(shù)目是怎么隱含在CRC里的? 2014-08-04
• 請(qǐng)問LTE中CRC8用于什么地方? 2012-12-16
• 經(jīng)常說CRC校驗(yàn),到底是什么意思,是個(gè)什么原理呢 2012-08-08
• 新人求助:物理信道CRC校驗(yàn)碼的實(shí)現(xiàn) 2012-08-01
• 傳輸信道可采用哪幾種編碼方式()。 卷積碼 Turbo碼 CRC 無編碼 霍夫曼編碼 2017-01-04
• LTEPDSCH采用16bit的CRC校驗(yàn)碼,且CRS校驗(yàn)位與基站發(fā)射天線數(shù)相關(guān)。 2015-08-20
• CRC信道編碼是怎么回事 2015-01-11
• 小區(qū)搜索中天線數(shù)目是怎么隱含在CRC里的? 2014-08-04
• 請(qǐng)問LTE中CRC8用于什么地方? 2012-12-16
• 經(jīng)常說CRC校驗(yàn),到底是什么意思,是個(gè)什么原理呢 2012-08-08
• 新人求助:物理信道CRC校驗(yàn)碼的實(shí)現(xiàn) 2012-08-01
問題答案
( 5 )
循環(huán)冗余校驗(yàn)
糾錯(cuò)編碼中的一種方式
糾錯(cuò)編碼中的一種方式
回答者:
壞壞狗
回答時(shí)間:2009-06-02 10:16


循環(huán)冗余碼校驗(yàn)英文名稱為Cyclical Redundancy Check,簡(jiǎn)稱CRC。它是利用除法及余數(shù)的原理來作錯(cuò)誤偵測(cè)(Error Detecting)的。實(shí)際應(yīng)用時(shí),發(fā)送裝置計(jì)算出CRC值并隨數(shù)據(jù)一同發(fā)送給接收裝置,接收裝置對(duì)收到的數(shù)據(jù)重新計(jì)算CRC并與收到的CRC相比較,若兩個(gè)CRC值不同,則說明數(shù)據(jù)通訊出現(xiàn)錯(cuò)誤。
回答者:
leey242
回答時(shí)間:2009-06-02 10:36


循環(huán)冗余校驗(yàn),可以分析傳輸CRC錯(cuò)誤次數(shù)
回答者:
haboct
回答時(shí)間:2009-06-02 12:56


答:在數(shù)字?jǐn)?shù)據(jù)通信中,由發(fā)送器發(fā)送的數(shù)據(jù)信號(hào)禎(Frame)在經(jīng)由網(wǎng)絡(luò)傳到接收器后,由于多種原因可能導(dǎo)致錯(cuò)誤位(bit errors)的出現(xiàn),因此必須由接收器采取一定的措施探測(cè)出所有的錯(cuò)誤位,并進(jìn)而采取一定的措施予以修正。
實(shí)際采用的錯(cuò)誤檢測(cè)方法主要有兩類:奇偶校驗(yàn)(Parity)和CRC循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check)。
Cyclic Redundancy Check循環(huán)冗余檢驗(yàn),是基于數(shù)據(jù)計(jì)算一組效驗(yàn)碼,用于核對(duì)數(shù)據(jù)傳輸過程中是否被更改或傳輸錯(cuò)誤。
實(shí)際應(yīng)用時(shí),發(fā)送裝置計(jì)算出CRC值并隨數(shù)據(jù)一同發(fā)送給接收裝置,接收裝置對(duì)收到的數(shù)據(jù)重新計(jì)算CRC并與收到的CRC相比較,若兩個(gè)CRC值不同,則說明數(shù)據(jù)通訊出現(xiàn)錯(cuò)誤。
根據(jù)應(yīng)用環(huán)境與習(xí)慣的不同,CRC又可分為以下幾種標(biāo)準(zhǔn):
1、CRC-12碼;
2、CRC-16碼;
3、CRC-CCITT碼;
4、CRC-32碼。
CRC-12碼通常用來傳送6-bit字符串。CRC-16及CRC-CCITT碼則用是來傳送8-bit字符,其中CRC-16為美國(guó)采用,而CRC-CCITT為歐洲國(guó)家所采用。CRC-32碼大都被采用在一種稱為Point-to-Point的同步傳輸中。
下面以最常用的CRC-16為例來說明其生成過程。
CRC-16碼由兩個(gè)字節(jié)構(gòu)成,在開始時(shí)CRC寄存器的每一位都預(yù)置為1,然后把CRC寄存器與8-bit的數(shù)據(jù)進(jìn)行異或,之后對(duì)CRC寄存器從高到低進(jìn)行移位,在最高位(MSB)的位置補(bǔ)零,而最低位(LSB,移位后已經(jīng)被移出CRC寄存器)如果為1,則把寄存器與預(yù)定義的多項(xiàng)式碼進(jìn)行異或,否則如果LSB為零,則無需進(jìn)行異或。重復(fù)上述的由高至低的移位8次,第一個(gè)8-bit數(shù)據(jù)處理完畢,用此時(shí)CRC寄存器的值與下一個(gè)8-bit數(shù)據(jù)異或并進(jìn)行如前一個(gè)數(shù)據(jù)似的8次移位。所有的字符處理完成后CRC寄存器內(nèi)的值即為最終的CRC值。
算法原理
假設(shè)數(shù)據(jù)傳輸過程中需要發(fā)送15位的二進(jìn)制信息g=101001110100001,這串二進(jìn)制碼可表示為代數(shù)多項(xiàng)式g(x) = x^14 + x^12 + x^9 + x^8 + x^7 + x^5 + 1,其中g(shù)中第k位的值,對(duì)應(yīng)g(x)中x^k的系數(shù)。將g(x)乘以x^m,既將g后加m個(gè)0,然后除以m階多項(xiàng)式h(x),得到的(m-1)階余項(xiàng)r(x)對(duì)應(yīng)的二進(jìn)制碼r就是CRC編碼。
h(x)可以自由選擇或者使用國(guó)際通行標(biāo)準(zhǔn),一般按照h(x)的階數(shù)m,將CRC算法稱為CRC-m,比如CRC-32、CRC-64等。國(guó)際通行標(biāo)準(zhǔn)可以參看http://en.wikipedia.org/wiki/Cyclic_redundancy_check
g(x)和h(x)的除運(yùn)算,可以通過g和h做xor(異或)運(yùn)算。比如將11001與10101做xor運(yùn)算:
明白了xor運(yùn)算法則后,舉一個(gè)例子使用CRC-8算法求101001110100001的效驗(yàn)碼。CRC-8標(biāo)準(zhǔn)的h(x) = x^8 + x^7 + x^6 + x^4 + x^2 + 1,既h是9位的二進(jìn)制串111010101。

經(jīng)過迭代運(yùn)算后,最終得到的r是10001100,這就是CRC效驗(yàn)碼。
通過示例,可以發(fā)現(xiàn)一些規(guī)律,依據(jù)這些規(guī)律調(diào)整算法:
1. 每次迭代,根據(jù)gk的首位決定b,b是與gk進(jìn)行運(yùn)算的二進(jìn)制碼。若gk的首位是1,則b=h;若gk的首位是0,則b=0,或者跳過此次迭代,上面的例子中就是碰到0后直接跳到后面的非零位。

2. 每次迭代,gk的首位將會(huì)被移出,所以只需考慮第2位后計(jì)算即可。這樣就可以舍棄h的首位,將b取h的后m位。比如CRC-8的h是111010101,b只需是11010101。

3. 每次迭代,受到影響的是gk的前m位,所以構(gòu)建一個(gè)m位的寄存器S,此寄存器儲(chǔ)存gk的前m位。每次迭代計(jì)算前先將S的首位拋棄,將寄存器左移一位,同時(shí)將g的后一位加入寄存器。若使用此種方法,計(jì)算步驟如下:

※藍(lán)色表示寄存器S的首位,是需要移出的,b根據(jù)S的首位選擇0或者h(yuǎn)。黃色是需要移入寄存器的位。S'是經(jīng)過位移后的S。

下面的表展示了4次迭代計(jì)算步驟,灰色背景的位是保存在寄存器中的。

經(jīng)4次迭代,B1被移出寄存器。被移出的部分,不我們關(guān)心的,我們關(guān)心的是這4次迭代對(duì)B2和B3產(chǎn)生了什么影響。注意表中紅色的部分,先作如下定義:
B23 = 00111010
b1 = 00000000
b2 = 01010100
b3 = 10101010
b4 = 11010101
b' = b1 xor b2 xor b3 xor b4
4次迭代對(duì)B2和B3來說,實(shí)際上就是讓它們與b1,b2,b3,b4做了xor計(jì)算,既:
B23 xor b1 xor b2 xor b3 xor b4
可以證明xor運(yùn)算滿足交換律和結(jié)合律,于是:
B23 xor b1 xor b2 xor b3 xor b4 = B23 xor (b1 xor b2 xor b3 xor b4) = B23 xor b'
b1是由B1的第1位決定的,b2是由B1迭代1次后的第2位決定(既是由B1的第1和第2位決定),同理,b3和b4都是由B1決定。通過B1就可以計(jì)算出b'。另外,B1由4位組成,其一共2^4有種可能值。于是我們就可以想到一種更快捷的算法,事先將b'所有可能的值,16個(gè)值可以看成一個(gè)表;這樣就可以不必進(jìn)行那4次迭代,而是用B1查表得到b'值,將B1移出,B3移入,與b'計(jì)算,然后是下一次迭代。

可看到每次迭代,寄存器中的數(shù)據(jù)以4位為單位移入和移出,關(guān)鍵是通過寄存器前4位查表獲得,這樣的算法可以大大提高運(yùn)算速度。
上面的方法是半字節(jié)查表法,另外還有單字節(jié)和雙字節(jié)查表法,原理都是一樣的——事先計(jì)算出2^8或2^16個(gè)b'的可能值,迭代中使用寄存器前8位或16位查表獲得b'。
反向算法
之前討論的算法可以稱為正向CRC算法,意思是將g左邊的位看作是高位,右邊的位看作低位。G的右邊加m個(gè)0,然后迭代計(jì)算是從高位開始,逐步將低位加入到寄存器中。在實(shí)際的數(shù)據(jù)傳送過程中,是一邊接收數(shù)據(jù),一邊計(jì)算CRC碼,正向算法將新接收的數(shù)據(jù)看作低位。
逆向算法顧名思義就是將左邊的數(shù)據(jù)看作低位,右邊的數(shù)據(jù)看作高位。這樣的話需要在g的左邊加m個(gè)0,h也要逆向,例如正向CRC-16算法h=0x4c11db8,逆向CRC-16算法h=0xedb88320。b的選擇0還是h,由寄存器中右邊第1位決定,而不是左邊第1位。寄存器仍舊是向左位移,就是說迭代變成從低位到高位。

實(shí)際采用的錯(cuò)誤檢測(cè)方法主要有兩類:奇偶校驗(yàn)(Parity)和CRC循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check)。
Cyclic Redundancy Check循環(huán)冗余檢驗(yàn),是基于數(shù)據(jù)計(jì)算一組效驗(yàn)碼,用于核對(duì)數(shù)據(jù)傳輸過程中是否被更改或傳輸錯(cuò)誤。
實(shí)際應(yīng)用時(shí),發(fā)送裝置計(jì)算出CRC值并隨數(shù)據(jù)一同發(fā)送給接收裝置,接收裝置對(duì)收到的數(shù)據(jù)重新計(jì)算CRC并與收到的CRC相比較,若兩個(gè)CRC值不同,則說明數(shù)據(jù)通訊出現(xiàn)錯(cuò)誤。
根據(jù)應(yīng)用環(huán)境與習(xí)慣的不同,CRC又可分為以下幾種標(biāo)準(zhǔn):
1、CRC-12碼;
2、CRC-16碼;
3、CRC-CCITT碼;
4、CRC-32碼。
CRC-12碼通常用來傳送6-bit字符串。CRC-16及CRC-CCITT碼則用是來傳送8-bit字符,其中CRC-16為美國(guó)采用,而CRC-CCITT為歐洲國(guó)家所采用。CRC-32碼大都被采用在一種稱為Point-to-Point的同步傳輸中。
下面以最常用的CRC-16為例來說明其生成過程。
CRC-16碼由兩個(gè)字節(jié)構(gòu)成,在開始時(shí)CRC寄存器的每一位都預(yù)置為1,然后把CRC寄存器與8-bit的數(shù)據(jù)進(jìn)行異或,之后對(duì)CRC寄存器從高到低進(jìn)行移位,在最高位(MSB)的位置補(bǔ)零,而最低位(LSB,移位后已經(jīng)被移出CRC寄存器)如果為1,則把寄存器與預(yù)定義的多項(xiàng)式碼進(jìn)行異或,否則如果LSB為零,則無需進(jìn)行異或。重復(fù)上述的由高至低的移位8次,第一個(gè)8-bit數(shù)據(jù)處理完畢,用此時(shí)CRC寄存器的值與下一個(gè)8-bit數(shù)據(jù)異或并進(jìn)行如前一個(gè)數(shù)據(jù)似的8次移位。所有的字符處理完成后CRC寄存器內(nèi)的值即為最終的CRC值。
算法原理
假設(shè)數(shù)據(jù)傳輸過程中需要發(fā)送15位的二進(jìn)制信息g=101001110100001,這串二進(jìn)制碼可表示為代數(shù)多項(xiàng)式g(x) = x^14 + x^12 + x^9 + x^8 + x^7 + x^5 + 1,其中g(shù)中第k位的值,對(duì)應(yīng)g(x)中x^k的系數(shù)。將g(x)乘以x^m,既將g后加m個(gè)0,然后除以m階多項(xiàng)式h(x),得到的(m-1)階余項(xiàng)r(x)對(duì)應(yīng)的二進(jìn)制碼r就是CRC編碼。
h(x)可以自由選擇或者使用國(guó)際通行標(biāo)準(zhǔn),一般按照h(x)的階數(shù)m,將CRC算法稱為CRC-m,比如CRC-32、CRC-64等。國(guó)際通行標(biāo)準(zhǔn)可以參看http://en.wikipedia.org/wiki/Cyclic_redundancy_check
g(x)和h(x)的除運(yùn)算,可以通過g和h做xor(異或)運(yùn)算。比如將11001與10101做xor運(yùn)算:

明白了xor運(yùn)算法則后,舉一個(gè)例子使用CRC-8算法求101001110100001的效驗(yàn)碼。CRC-8標(biāo)準(zhǔn)的h(x) = x^8 + x^7 + x^6 + x^4 + x^2 + 1,既h是9位的二進(jìn)制串111010101。

經(jīng)過迭代運(yùn)算后,最終得到的r是10001100,這就是CRC效驗(yàn)碼。
通過示例,可以發(fā)現(xiàn)一些規(guī)律,依據(jù)這些規(guī)律調(diào)整算法:
1. 每次迭代,根據(jù)gk的首位決定b,b是與gk進(jìn)行運(yùn)算的二進(jìn)制碼。若gk的首位是1,則b=h;若gk的首位是0,則b=0,或者跳過此次迭代,上面的例子中就是碰到0后直接跳到后面的非零位。

2. 每次迭代,gk的首位將會(huì)被移出,所以只需考慮第2位后計(jì)算即可。這樣就可以舍棄h的首位,將b取h的后m位。比如CRC-8的h是111010101,b只需是11010101。

3. 每次迭代,受到影響的是gk的前m位,所以構(gòu)建一個(gè)m位的寄存器S,此寄存器儲(chǔ)存gk的前m位。每次迭代計(jì)算前先將S的首位拋棄,將寄存器左移一位,同時(shí)將g的后一位加入寄存器。若使用此種方法,計(jì)算步驟如下:

※藍(lán)色表示寄存器S的首位,是需要移出的,b根據(jù)S的首位選擇0或者h(yuǎn)。黃色是需要移入寄存器的位。S'是經(jīng)過位移后的S。
查表法
同樣是上面的那個(gè)例子,將數(shù)據(jù)按每4位組成1個(gè)block,這樣g就被分成6個(gè)block。
下面的表展示了4次迭代計(jì)算步驟,灰色背景的位是保存在寄存器中的。

經(jīng)4次迭代,B1被移出寄存器。被移出的部分,不我們關(guān)心的,我們關(guān)心的是這4次迭代對(duì)B2和B3產(chǎn)生了什么影響。注意表中紅色的部分,先作如下定義:
B23 = 00111010
b1 = 00000000
b2 = 01010100
b3 = 10101010
b4 = 11010101
b' = b1 xor b2 xor b3 xor b4
4次迭代對(duì)B2和B3來說,實(shí)際上就是讓它們與b1,b2,b3,b4做了xor計(jì)算,既:
B23 xor b1 xor b2 xor b3 xor b4
可以證明xor運(yùn)算滿足交換律和結(jié)合律,于是:
B23 xor b1 xor b2 xor b3 xor b4 = B23 xor (b1 xor b2 xor b3 xor b4) = B23 xor b'
b1是由B1的第1位決定的,b2是由B1迭代1次后的第2位決定(既是由B1的第1和第2位決定),同理,b3和b4都是由B1決定。通過B1就可以計(jì)算出b'。另外,B1由4位組成,其一共2^4有種可能值。于是我們就可以想到一種更快捷的算法,事先將b'所有可能的值,16個(gè)值可以看成一個(gè)表;這樣就可以不必進(jìn)行那4次迭代,而是用B1查表得到b'值,將B1移出,B3移入,與b'計(jì)算,然后是下一次迭代。

可看到每次迭代,寄存器中的數(shù)據(jù)以4位為單位移入和移出,關(guān)鍵是通過寄存器前4位查表獲得,這樣的算法可以大大提高運(yùn)算速度。
上面的方法是半字節(jié)查表法,另外還有單字節(jié)和雙字節(jié)查表法,原理都是一樣的——事先計(jì)算出2^8或2^16個(gè)b'的可能值,迭代中使用寄存器前8位或16位查表獲得b'。
反向算法
之前討論的算法可以稱為正向CRC算法,意思是將g左邊的位看作是高位,右邊的位看作低位。G的右邊加m個(gè)0,然后迭代計(jì)算是從高位開始,逐步將低位加入到寄存器中。在實(shí)際的數(shù)據(jù)傳送過程中,是一邊接收數(shù)據(jù),一邊計(jì)算CRC碼,正向算法將新接收的數(shù)據(jù)看作低位。逆向算法顧名思義就是將左邊的數(shù)據(jù)看作低位,右邊的數(shù)據(jù)看作高位。這樣的話需要在g的左邊加m個(gè)0,h也要逆向,例如正向CRC-16算法h=0x4c11db8,逆向CRC-16算法h=0xedb88320。b的選擇0還是h,由寄存器中右邊第1位決定,而不是左邊第1位。寄存器仍舊是向左位移,就是說迭代變成從低位到高位。

回答者:
wangyuan072
回答時(shí)間:2009-06-02 14:05


CRC為循環(huán)冗余校驗(yàn)碼,開站時(shí)交換與基站要使用同樣的設(shè)置,否則會(huì)出問題
回答者:
mansfield
回答時(shí)間:2009-06-09 12:51


• 嘉環(huán)科技股份有限公司
聘:核心網(wǎng)工程師-IMC青海
需求人數(shù):2 人 地點(diǎn):西寧市
• 福州弘宇信合通信技術(shù)有限公司 聘:信息安全崗位工程師
需求人數(shù):2 人 地點(diǎn):昆明市
• 南京華蘇科技有限公司 聘:中興有線/無線工程師
需求人數(shù):3 人 地點(diǎn):大連市,本溪市,撫順市
• 杭州東信網(wǎng)絡(luò)技術(shù)有限公司 聘:中興網(wǎng)優(yōu)工程師-遼寧大連移動(dòng)
需求人數(shù):10 人 地點(diǎn):大連市
• 重慶信科通信工程有限公司 聘:上饒電信中興原廠高級(jí)
需求人數(shù):2 人 地點(diǎn):上饒市
• 北京宜通華瑞科技有限公司 聘:高速高鐵優(yōu)化中級(jí)(江西上饒)
需求人數(shù):1 人 地點(diǎn):上饒市
• 上海德專信息技術(shù)有限公司 聘:【急聘】昆明諾基亞后臺(tái)
需求人數(shù):3 人 地點(diǎn):云南省
• 廣州銘輝網(wǎng)絡(luò)科技有限公司 聘:傳輸PTN&OTN工程師
需求人數(shù):2 人 地點(diǎn):海口市,三亞市
• 北京電旗通訊技術(shù)股份有限公司 聘:OTN/XPON/軟交換吉林項(xiàng)目
需求人數(shù):3 人 地點(diǎn):長(zhǎng)春市,遼源市,四平市
• 西安長(zhǎng)河通訊有限責(zé)任公司 聘:中興OTN工程師(高級(jí))
需求人數(shù):1 人 地點(diǎn):紅河州
需求人數(shù):2 人 地點(diǎn):西寧市
• 福州弘宇信合通信技術(shù)有限公司 聘:信息安全崗位工程師
需求人數(shù):2 人 地點(diǎn):昆明市
• 南京華蘇科技有限公司 聘:中興有線/無線工程師
需求人數(shù):3 人 地點(diǎn):大連市,本溪市,撫順市
• 杭州東信網(wǎng)絡(luò)技術(shù)有限公司 聘:中興網(wǎng)優(yōu)工程師-遼寧大連移動(dòng)
需求人數(shù):10 人 地點(diǎn):大連市
• 重慶信科通信工程有限公司 聘:上饒電信中興原廠高級(jí)
需求人數(shù):2 人 地點(diǎn):上饒市
• 北京宜通華瑞科技有限公司 聘:高速高鐵優(yōu)化中級(jí)(江西上饒)
需求人數(shù):1 人 地點(diǎn):上饒市
• 上海德專信息技術(shù)有限公司 聘:【急聘】昆明諾基亞后臺(tái)
需求人數(shù):3 人 地點(diǎn):云南省
• 廣州銘輝網(wǎng)絡(luò)科技有限公司 聘:傳輸PTN&OTN工程師
需求人數(shù):2 人 地點(diǎn):海口市,三亞市
• 北京電旗通訊技術(shù)股份有限公司 聘:OTN/XPON/軟交換吉林項(xiàng)目
需求人數(shù):3 人 地點(diǎn):長(zhǎng)春市,遼源市,四平市
• 西安長(zhǎng)河通訊有限責(zé)任公司 聘:中興OTN工程師(高級(jí))
需求人數(shù):1 人 地點(diǎn):紅河州
熱點(diǎn)問題
更多精彩
聯(lián)系我們 - 問通信專家 | Powered by MSCBSC 移動(dòng)通信網(wǎng) © 2006 - |