CRC(Cyclic Redundancy Check)循環冗余校驗碼是數據通信領域中常用的一種差錯校驗碼,在早期的通信中運用廣泛,因為早期的通信技術不夠可靠(不可靠性的是通信技術決定的,比如電磁波通信時受雷電等因素的影響),不可靠的通信就會帶來‘確認信息’的困惑,書上提到紅軍和藍軍通信聯合進攻山下的敵軍的例子,天紅軍發了條信息要藍軍第二天一起進攻,藍軍收到之后,發一條確認信息,但是藍軍擔心的是‘確認信息’如果也不可靠而沒有成功到達紅軍那里,那自己不是很危險?于是紅軍再發一條‘對確認的確認信息’,但同樣的問題還是不能解決,紅軍仍然不敢貿然行動。對通信的可靠性檢查就需要‘校驗’,校驗是從數據本身進行檢查,它依靠某種數學上約定的形式進行檢查,校驗的結果是可靠或不可靠,如果可靠就對數據進行處理,如果不可靠,就丟棄重發或者進行修復。其特征是信息字段和校驗字段的長度可以任意選定。
為了完成信號傳輸過程中誤碼檢測,獲得正確無誤的傳輸數據,LTE(Long Term Evolution)系統針對不同的數據傳輸采用了多種格式的循環冗余碼,以適應系統高速率高性能的需求。
LTE系統中的循環冗余碼
LTE作為準4G技術,以正交頻分復用OFDM(Orthogonal Frequency Division Multiplexing)和多輸入多輸出MIMO(Multiple-Input Multiple-Out-put)技術為基礎,下行采用正交頻分(OFDM)多址技術,上行采用單載波頻分(SC-FDMA)多址技術,在20 MHz頻譜帶寬下能夠提供下行100 Mb/s與上行50 Mb/s的峰值速率。
LTE TDD(亦稱TD-LTE)系統采用了4種格式[2]的CRC:CRC24A、CRC24B、CRC16、CRC8。其生成多項式如下:
其中長度為24的CRC24A和CRC24B主要用于共享信道數據傳輸[3],長度為16的CRC16主要用于下行控制信道和廣播信道數據傳輸,長度為8的CRC8主要用于CQI(Control quality information)信息的傳輸。
循環冗余校驗碼(CRC)的基本原理
循環冗余校驗碼(CRC)的基本原理是:在K位信息碼后再拼接R位的校驗碼,整個編碼長度為N位,因此,這種編碼又叫(N,K)碼。對于一個給定的(N,K)碼,可以證明存在一個次冪為N-K=R的多項式G(x)。根據G(x)可以生成K位信息的校驗碼,而G(x)叫做這個CRC碼的生成多項式。
校驗碼的具體生成過程為:假設發送信息用信息多項式C(X)表示,將C(x)左移R位,則可表示成C(x)*2R,這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。通過C(x)*2R除以生成多項式G(x)得到的余數就是校驗碼。
CRC算法分析及選擇
CRC的校驗原理非常簡單,它要求發送方和接收方采用同一個生成多項式g(x),且g(x)的首位和末位的系數必須為l。編碼時將待發送的數據t(x)除以g(x),得到的余數作為CRC校驗碼添加到t(x)的后面;譯碼時將接收到的數據r(x)除以g(x),如果余數為0,則說明校驗正確,否則校驗失敗,從而判斷數據幀是否出錯。在工程應用中,常用的CRC校驗算法主要有兩種:查表生成法和塊異或長除法。
這種算法的優點是運算量小、速度快、效率高;缺點是可移植性較差,且要事先計算出余式表,而不同長度的生成多項式的余式表不同,因此余式表會占用系統較大的存儲空間,增大系統資源開銷。
1.塊異或長除法
塊異或長除法是依據CRC校驗碼的產生原理實現的。算法描述如下:
(1)初始化,將寄存器初始化為0。
(2)在信息比特后添加CRC長度個0,終作為CRC添加的空間。
(3)讀取一個數據塊(塊的大小由處理器的字的單位長度決定)。
(4)判斷塊的位是否為‘1’,若為‘1’則數據塊與生成多項式做異或操作。
(5)將數據左移一位,如果當前塊的剩余比特等于CRC生成多項式的長度,則轉入步驟(3);否則轉入步驟(4)。
(6)如果所有數據都已經操作完畢,則計算結束,寄存器中的值為終求得的CRC。
這種算法的優點是算法簡單、容易實現、修改靈活、可移植性好,對任意長度的生成多項式都適用;但因為它只能處理一位數據,因此計算效率低,運算量大。
如前所述,在TD-LTE系統中采用了4種格式的CRC,如果采用查表算法,則需要建立4張查找表,會占用系統較大的存儲空間,且程序移植性差;如果采用塊異或長除法,則又會出現計算效率低,運算量大的問題。
綜上分析,結合項目需求及系統硬件配置,考慮到系統所采用的高效DSP處理器——TMS320C64x(主頻可達到1.2 GHz)可以彌補塊異或長除法的低效性,系統終采用塊異或長除法來實現。
CRC編碼規則
CRC碼是由兩部分組成,前部分是信息碼,就是需要校驗的信息,后部分是校驗碼,如果CRC碼共長n個bit,信息碼長k個bit,就稱為(n,k)碼。 它的編碼規則是:
1.移位
將原信息碼(kbit)左移r位(k+r=n)
2.相除
運用一個生成多項式g(x)(也可看成二進制數)用模2除上面的式子,得到的余數就是校驗碼。
非常簡單,要說明的:模2除就是在除的過程中用模2加,模2加實際上就是我們熟悉的異或運算,就是加法不考慮進位,公式是:
0+0=1+1=0,1+0=0+1=1
即‘異’則真,‘非異’則假。
由此得到定理:a+b+b=a 也就是‘模2減’和‘模2加’直值表完全相同。
有了加減法就可以用來定義模2除法,于是就可以用生成多項式g(x)生成CRC校驗碼。
生成多項式應滿足以下原則
a、生成多項式的位和位必須為1。
b、當被傳送信息(CRC碼)任何一位發生錯誤時,被生成多項式做模2除后應該使余數不為0。
c、不同位發生錯誤時,應該使余數不同。
d、對余數繼續做模2除,應使余數循環。
例子
例如:
g(x)=x4+x3+x2+1,(7,3)碼,信息碼110產生的CRC碼就是:
對于g(x)=x4+x3+x2+1的解釋:(都是從右往左數)x4就是第五位是1,因為沒有x1所以第2位就是0。
11101 | 110,0000(設a=11101 ,b=1100000)
取b的前5位11000跟a異或得到101
101加上b沒有取到的00得到10100
然后跟a異或得到01001
也就是余數1001
余數是1001,所以CRC碼是1001, 傳輸碼為:110,1001
標準的CRC碼是,CRC-CCITT和CRC-16,它們的生成多項式是:
CRC-CCITT=x^16+x^12+x^5+1 CRC-16=x^16+x^15+x^2+1
CRC算法的DSP實現
1.硬件簡介
TMS320C6000系列DSP是TI公司1997年2月推向市場的高性能DSP,綜合了目前DSP性價比高、功耗低等優點。TMS320C64x系列在TMS320C6000 DSP芯片中處于水平,它不但提高了時鐘頻率,而且在體系結構上采用了VelociTI甚長指令集VLIW(Very Long Instruction Word)結構[5],片內有8個獨立功能單元的內核,每個周期可以并行執行8條32 bit指令,峰值速度4 800 MIPS,2組共64個32 bit 通用寄存器,32 bit 尋址范圍,支持8/16/32/40位的數據訪問,片內集成大容量SRAM,可達8 Mbit。由于其出色的運算能力、高效的指令集、大范圍的尋址能力,使其特別適用于無線基站、測試儀表等對運算能力和存儲量有高要求的應用場合。
2. CRC校驗的DSP實現
因為系統采用了4種格式的CRC,如果對每種格式進行單獨實現,不僅任務繁瑣,而且增加了系統的代碼量,更給代碼測試和維護增加了難度。因此本實現采用統一實現,即同一個程序,支持系統中的所有CRC格式,僅需在程序頭部增添一點格式判斷的代碼即可。
雖然TMS320C64x DSP處理器的字長為32 bit,但是為了兼容4種格式的CRC,終決定數據的分塊長度為半字,即16 bit,這樣做的目的就是為了支持CRC24,因為TMS320C64x DSP的寄存器在用作邏輯移位寄存器使用時,其有效長度為40 bit。
根據LTE協議,輸入數據按大端模式輸入。為了處理方便,每次讀入半字都將其倒序,采用低端對齊的方式進行CRC除法,因此,CRC多項式也必須經過倒序。生成的CRC也是倒序的,需要再次倒序,然后進行加擾[2](如果必要的話),添加到輸入數據后面。倒序可使用指令“BITR”,簡單易行。
輸出數據仍為大端模式。由前面所述可知:CRC8的生成多項式倒序值為0x1b3;CRC16的生成多項式倒序值為0x10811;CRC24A的生成多項式倒序值為0x1be64c3;CRC24B的生成多項式倒序值為0x18c0003。
值得注意的是:輸入數據后面應該多寫入一個字的0,因為每次取半字處理,當剩余比特為15 bit且CRC為長24 bit時,組合起來也不會超過40 bit,避免特殊性的出現,以便統一處理。同時完成CRC計算過后,可以直接將CRC添加到原數據之后,而不擔心其會覆蓋系統中的其他數據,引起不必要的錯誤。
圖1為CRC計算及添加的程序實現流程。當CRC格式為CRC16、CRC24A、CRC24B時,讀取的個數據塊(半字)在次內循環中將只作16次的移位,而沒有異或操作,表面上看在這里應該加一個判斷,如果是這種情況則直接將數據右移16 bit,然后接著處理第二個數據塊。但這樣會對后續的數據塊造成麻煩,因為每個數據塊到達此處都需判斷,當數據量比較大時,會帶來更大的開銷,因此在程序流程中可以忽略此問題。
在接收端,CRC的校驗與發送端的計算基本相同,只是由于LTE系統的特殊性,如果在發送端CRC曾被加擾過,則在接收端校驗之前,應先從接收到的數據末尾截取出CRC進行解擾,然后再將解擾后的CRC添加回去,對整個接收數據進行CRC校驗。如果CRC校驗正確,則接收數據正確;否則接收數據錯誤,在此程序流程不再贅述。
性能分析
在DSP軟件實現中,通過指令并行,盡量優化程序循環體[6],減少或消除程序中的“NOP”指令。對于不同格式的CRC,根據它們所用的環境以及數據的大致長度,通過程序仿真運行,可以得到統計結果如表1。
表1的數據長度僅為個別舉例,但不失一般性。從表中可以看出,雖然塊異或長除法的運算量較大,但是當運用TMS320C64x芯片實現時,由于處理器的超高主頻,其計算速率也非常快,完全可以忽略它的計算量。因此,本實現采用塊異或長除法不僅簡化了程序實現方法,還減少了模塊程序代碼,節約了系統存儲空間。
關于LTF
LTE(Long Term Evolution,長期演進)項目是3G的演進,始于2004年3GPP的多倫多會議。LTE并非人們普遍誤解的4G技術,而是3G與4G技術之間的一個過渡,是3.9G的標準,它改進并增強了3G的空中接入技術,采用OFDM和MIMO作為其無線網絡演進的標準。在20MHz頻譜帶寬下能夠提供下行326Mbit/s與上行86Mbit/s的峰值速率。改善了小區邊緣用戶的性能,提高小區容量和降低系統延遲。
結束語
本文從理論分析出發,根據TD-LTE系統特性,選擇了一種的CRC校驗算法,并在TMS320C64x芯片上加以實現,詳細講述了塊異或長除法在DSP中的實現方法。程序運行結果表明,本實現能夠滿足LTE系統的需要,具有可行性和高效性。
評論
查看更多