基于BM算法的BCH碼的譯碼硬件實現(xiàn)
摘要:BCH碼是一種理論上比較成熟的代數(shù)碼型,在電力通信系統(tǒng),GSM標準的語音和數(shù)據(jù)業(yè)務,以及衛(wèi)星通信和數(shù)字廣播通信(DVB-S2)等多個領域均有著廣泛的應用?;趦绱芜\算,在線性反饋移位寄存器(LFSR)下實現(xiàn)了基于Berlekamp—Massey(BM)時域迭代譯碼算法的整個譯碼器構架,以及BM簡化算法的硬件設計。通過計算機模擬仿真表明,兩種算法的譯碼速率分別可達到32 Mbps,37Mbps。
關鍵詞:BM迭代簡化算法;FPGA;譯碼器構架
O 引言
BCH碼是1959年由Hocquenghem,1960年由Bose和Chandhari分別獨立提出的一種能糾正多個隨機錯誤的循環(huán)碼,該碼有嚴格的代數(shù)結構,具有糾錯能力可控,在中短碼長情況下性能接近理論最佳值等優(yōu)點,并且構造方便,編碼簡單,是實際使用最廣泛的碼型之一。
1960年Peterson從理論上解決了二進制BCH碼的譯碼算法,奠定了BCH碼譯瑪?shù)睦碚摶A。隨后,Gorensten和Zierler把它推廣到高階有限域中。1966年Berlekamp提出了迭代譯碼算法,Maxsey從線性反饋寄存器的角度對該算法進行描述,不僅使算法硬件實現(xiàn)成為可能,也大大提高了譯碼速度,從實際上解決了BCH碼的譯碼問題。鑒于FP—GA具有較大塊RAM,本文以(15,5)BCH碼為例說明如何將BM迭代算法,以及后面的chien搜索都建立在有限域上進行運算,用域元素的冪次運算代替原來的乘和除操作,從而節(jié)約了邏輯單元(slice)資源。文獻已經(jīng)給出了普通BM譯碼算法的流程圖,本文根據(jù)二元BCH碼的特點給出了簡化的BM算法流程圖。
1 BM算法介紹
1.1 有限域知識介紹
BCH碼是在有限域中進行運算的,詳細的有限域知識參考文獻。
以本文設計的BCH碼為例,p(x)=x4+x1+1是GF(2)上的本原多項式。令α為本原多項式的根,m=4,則由{l,α,α2,α3}中元素的線性組合可表示GF(24)上的所有非零元素{α0,α1,α2,…,α14},這些非零元素構成一個循環(huán)群如表l所示。最后一行是為了運算的需要,人為加上去的,表示“無”這種狀態(tài)。
1.2 經(jīng)典BM算法
普通的譯碼算法都可分為如下三步:
(1)由接收碼字R(x)計算伴隨式S(x).(用除法電路)
(2)由伴隨式S(x)求差錯圖樣E(x).(用各種譯碼方式)
(3)由差錯圖樣E(x)求得譯出碼字C(x).(用關系式C(x)=R(x)一E(x))
上面的(1)(3)步是固定關系式的運算,相對容易,最關鍵的是第(2)步。1966年,Berlekamp針對關鍵方程式S(x)D(x)≡ω(x)(mod x2t+1)的求解(這里的D(x)為錯誤位置多項式),提出一種復雜度隨糾錯數(shù)目線性增加的迭代算法,而Massey對Berlekamp算法作為設計自回歸濾波器的過程進行了重新的推導,采用反饋移位寄存器來完成關鍵方程的計算。自此以后這種譯碼算法被稱為BM迭代譯碼算法,其算法流程圖參考文獻。
2 二元域下的簡化算法
經(jīng)典的BM算法流程適合任何有限域的BCH碼,對于GF(2),我們可以證明當r為偶數(shù)時,△r為0[2],此時迭代可以省略。通過對經(jīng)典BM算法流程圖的改進,得到下圖l,即GF(2)上的簡化BM算法流程圖。
其中,Sn為伴隨式,D(x)為錯誤位置多項式,B(x)為多項式修正項,△代表差值即下一個伴隨式與由當前錯誤位置多項式表示的移位寄存器所產(chǎn)生的值之間的差值,L為移位寄存器的當前長度。
3 硬件設計與實現(xiàn)
3.1 基于冪次的運算方式
對表1進行簡化,得到表2和表3:
將運算步驟都建立在域元素冪次運算的基礎上,流程圖中的“*”,“/”,“+”運算方式都會改變。例如:(1110)*(1111)mod(10011,這個為本原多項式)=1011010mod(10011)=0101,轉化成冪次后(1110)*(1111)→a12*a11=α23=α8,原來二進制乘除法電路變?yōu)楹唵蝺绱蔚闹笖?shù)加法電路。“+”由原來的模二加運算變成兩次查表和一次模二加運算,例如,α12+α11→查表二(1l11)+(1110)=000l→查表三0001對應α0,所以得到α12+αll=α0。在硬件實現(xiàn)中,表2,表3的第二列作為內容存在FPGA的ROM中,第一列作為他們的地址。
3.2 整體譯碼結構設計
以上是BCH譯碼器的整體結構模塊圖,分四個模塊,下面介紹這四個模塊的功能:
(1)S_produce:根據(jù)接收碼字R(r0 r1 r2…r14),產(chǎn)生伴隨式S(s1,s2,s3,s4,s5,s6);
(2)dr:根據(jù)伴隨式S(s1,s2,s3,s4,s5,s6),產(chǎn)生位置差錯式D(dl,d2,d3);
(3)chien:以錢搜索的方式,根據(jù)位置差錯式D(d1,d2,d3),產(chǎn)生錯誤圖樣E(e0,el,e2…e14);
(4)shift_register:同步時鐘的功能,滿足chien產(chǎn)生e14時,r14恰好輸出:c14=r14+e14。
整個結構中,dr這個模塊最為復雜,對應整個BM算法。圖3是dr模塊圖。計算的功能,并將計算得到的△r值和前一狀態(tài)的D(dl,d2,d3)傳給T_updata,和B_updata這兩個模塊;B_updata完成B(x)更新的功能(B(x)<一xB(x)或B(x)<一△-1nd(x)),將值傳給T_updata;T_updata完成T(x)更新的功能(T(x)=d(x)一△rxB(x)),并將計算結果反饋給top_dr,作為當前狀態(tài)的D(dl,d2,d3);control模塊完成控制整個模塊的時鐘同步。
4 仿真結果
我們選用了Xilinx公司的xc4v1x60,仿真環(huán)境是xilinxISE6.0,moddsim SE 5.5e,在布線后的時序報告中得到的系統(tǒng)可以在70MHz的時鐘上對信號進行實時的處理。在時序仿真中我們選用了50MHz的時鐘,連續(xù)輸入兩幀數(shù)據(jù)(每幀數(shù)據(jù)15bit),一幀是正確的碼字(100010100110l1),一幀是錯誤的碼字(10001010001111),普通算法在延遲23個時鐘周期后輸出結果,簡化算法在延遲20個周期后輸出結果。根據(jù)譯碼速度計算公式:譯碼速率=(幀長*系統(tǒng)頻率)僻碼一幀所需要的時鐘周期數(shù),則兩種算法的譯碼速率分別為32Mbps,37Mbps。
5 結論
在本文中我們利用FPGA實現(xiàn)了基于BM迭代譯碼算法的BCH碼譯碼器,并根據(jù)FPGA塊ROM資源充足的的優(yōu)勢,采用基于冪次的運算方式,合理地對.BM流程算法進行模塊劃分,同時實現(xiàn)了簡化的BM算法,縮短了譯碼延遲,提高了整個譯碼器的譯碼速度。計算機仿真結果表明,本設計所實現(xiàn)的BCH譯碼性能基本滿足傳輸要求,為后續(xù)長BCH碼的硬件實現(xiàn)作了較好的鋪墊。