孫志雄,謝海霞
(瓊州學(xué)院電子信息工程學(xué)院,海南 三亞 572022)
在數(shù)字信號傳輸過程中,由于受到干擾的影響,碼元波形將變壞,接收端有可能產(chǎn)生誤碼。而誤碼率是衡量數(shù)字通信系統(tǒng)的一個重要指標(biāo),它關(guān)系到通信系統(tǒng)的通信質(zhì)量。因此,如何降低誤碼率是通信系統(tǒng)設(shè)計所必須考慮的問題。通信過程中產(chǎn)生的誤碼原因主要是由于傳輸過程中信道的變化及噪聲加入的結(jié)果。因此可以在信號傳輸前進(jìn)行信道編碼,增加信號的冗余度。在接收端進(jìn)行糾錯檢錯減少噪聲的影響,從而盡可能的恢復(fù)原始信號,達(dá)到減少誤碼的目的。循環(huán)冗余校驗(yàn)碼(CRC)就是具有這種強(qiáng)檢錯功能的技術(shù),由于它的高效率、高性能,實(shí)現(xiàn)起來相對簡單,因此研究CRC 碼的實(shí)現(xiàn)具有實(shí)際意義[1-6]。
在線性分組碼中,有一種重要的碼稱為循環(huán)冗余校驗(yàn)(CRC)碼。它是在嚴(yán)密的代數(shù)學(xué)理論的基礎(chǔ)上建立起來的。CRC 碼除了具有線性分組碼的一般性質(zhì)外,還具有循環(huán)性。循環(huán)性是指任一碼組循環(huán)一位(即將最右端的一個碼元移至左端,或反之)以后,仍為該碼中的一個碼組。在下表1 中給出了一種(7,3)循環(huán)碼的全部碼組。
表1 一種(7,3)循環(huán)碼的全部碼組
在代數(shù)編碼理論中,一般把各碼組中的碼元當(dāng)作是一個多項式的系數(shù),這種多項式稱為碼多項式。在CRC 編碼時,首先要根據(jù)給定的(n,k)值選定生成多項式g(x),即從(xn+1)的因子中選一個(n-k)次多項式作為g(x)。由于所有碼多項式T(x)都可以被g(x)整除。根據(jù)這條原則,就可以對給定的信息位進(jìn)行編碼:設(shè)m(x)為信息碼多項式,其次數(shù)小于k。用xn-k乘m(x),得到的xn-km(x)的次數(shù)必定小于n。用g(x)除xn-km(x),得到余式r(x),r(x)的次數(shù)必定小于g(x)的次數(shù),即小于(n-k)。將此余式r(x)加于信息位之后作為監(jiān)督位,即將r(x)和xn-km(x)相加,得到的多項式必定是一個碼多項式。因?yàn)樗囟鼙籫(x)整除,且商的次數(shù)不大于(k-1)。因此,CRC 碼編碼步驟可以歸納為:
(1)用xn-k乘m(x)。這一運(yùn)算實(shí)際上是在信息碼后附加上(n-k)個“0”。
(2)用g(x)除xn-km(x),得到商Q(x)和余式r(x),即
(3)編出的碼組T(x)為
在CRC 編碼中,由于任意一個碼組多項式T(x)都應(yīng)該能被生成多項式g(x)整除,所以在接收端可以將接收碼組R(x)用原生成多項式g(x)去除。當(dāng)傳輸中未發(fā)生錯誤時,接收碼組與發(fā)送碼組相同,即R(x)=T(x),故接收碼組R(x)必定能被g(x)整除;若碼組在傳輸中發(fā)生錯誤,則R(x)≠T(x),R(x)被g(x)除時可能除不盡而有余項,因此,就以余項是否為零來判別接收碼組中有無錯碼[7]。
根據(jù)CRC 編碼方法,利用VHDL 語言編程實(shí)現(xiàn)一種(7,3)循環(huán)碼的編碼及仿真,實(shí)驗(yàn)采用并行方式輸入輸出,其生成多項式g(x)為:g(x)=x4+x2+x+1。
對應(yīng)上述編碼方法實(shí)現(xiàn)的CRC 編碼器的VHDL程序如下:
其CRC 編碼仿真波形如圖1所示,其中d為信息位,crc為CRC 編碼輸出,其結(jié)果和表1 的CRC編碼結(jié)果一致。與上述CRC 編碼方法相對應(yīng)的CRC 解碼器的VHDL 程序如下:
圖1 CRC 編碼仿真波形圖
其CRC 解碼仿真波形如圖2所示,其中crc為CRC 解碼輸入,d為CRC 解碼輸出,en為解碼使能端,高電平有效,其結(jié)果和表1 的CRC 編碼對應(yīng)的信息位(即解碼)一致。
圖2 CRC 解碼仿真波形圖
在運(yùn)行上述CRC 編解碼器的VHDL 程序并利用Quartus Ⅱ仿真平臺進(jìn)行編譯、仿真驗(yàn)證的基礎(chǔ)上,將CRC 編解碼器的配置程序下載到FPGA 芯片EP1K30QC208-2,并在EDA 實(shí)驗(yàn)開發(fā)板進(jìn)行測試,實(shí)驗(yàn)結(jié)果表明CRC 編解碼是正確的[8]。
利用VHDL 語言編程,并基于FPGA 實(shí)現(xiàn)了CRC編解碼器的設(shè)計,體現(xiàn)了軟件無線電設(shè)計通信系統(tǒng)的思想,是EDA 技術(shù)在通信系統(tǒng)設(shè)計中的應(yīng)用,體現(xiàn)了現(xiàn)代電子設(shè)計的優(yōu)越性。VHDL 語言具有良好的可移植性,可以在不同的設(shè)計環(huán)境和系統(tǒng)平臺中使用。另外由于使用FPGA 硬件實(shí)現(xiàn)CRC 編解碼算法,運(yùn)行速度比基于CPU 的軟件實(shí)現(xiàn)速度要快。在此算法的基礎(chǔ)上,只要改變生成多項式g(x),就可以實(shí)現(xiàn)其它位數(shù)的CRC 編解碼器,本文設(shè)計思想可以為其它線性分組碼的編解碼器設(shè)計提供借鑒。
[1]劉新寧,王超,胡晨,等.一種快速CRC 算法的硬件實(shí)現(xiàn)方法[J].電子器件,2003,26(1):88-91.
[2]金素梅,王家禮.基于FPGA 的CRC 編碼器的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2005(24):18-20.
[3]范綠蓉,栗廣云,吳淑君.基于VHDL 語言的CRC 信道編解碼電路設(shè)計與實(shí)現(xiàn)[J].通信技術(shù),2008,41(6):103-105.
[4]Xu Zhanqi,Yi Kechu,Liu Zengji.A Universal Algorithm for Parallel CRC Computation and Its Implementation[J].Journal of Electronics(chinese),2006(4):528-531.
[5]常天海,胡鑒.基于FPGA 的CRC 并行算法研究與實(shí)現(xiàn)[J].微處理機(jī),2010(2):45-48.
[6]郭瑛,俞宗佐.基于FPGA 的循環(huán)冗余校驗(yàn)?zāi)K設(shè)計[J].內(nèi)蒙古大學(xué)學(xué)報(自然科學(xué)版),2010,41(4):417-420.
[7]樊昌信,曹麗娜.通信原理[M].6 版.北京:國防工業(yè)出版社,2006.
[8]江國強(qiáng).EDA 技術(shù)與應(yīng)用[M].3 版.北京:電子工業(yè)出版社,2010.