曾 鵬,張志宇,鄧建暉
(1深圳大學,廣東深圳518000;2深圳市力合微電子股份有限公司,廣東深圳518000)
電力線通信(Power Line Communication,PLC)技術是以電力線為傳輸媒介,通過載波方式將數(shù)字或模擬信號進行數(shù)據(jù)的傳輸。為保證數(shù)據(jù)傳輸?shù)姆€(wěn)定可靠,歐洲的PRIME聯(lián)盟在窄帶G3-PLC協(xié)議和寬帶 PLC 協(xié)議中增加了 RS(255,239)全碼[1]。 本文研究了RS(255,239)的編解碼原理,用Verilog語言研發(fā)設計,利用Modelsim10.1進行仿真并給出功能仿真結果,結果表明該編解碼器符合預期功能。
RS碼是具有很強糾錯能力的多進制BCH碼,能夠糾正多個隨機錯誤[2]。RS碼用生成多項式g(x)的根描述,參與編碼的全部元素都在伽羅華域GF(28) 上。
RS(255,239)的本原多項式P(x)=x8+x4+x3+x2+1,生成多項式:g(x)=x16+118x15+52x14+103x13+31x12+104x11+126x10+187x9+232x8+17x7+56x6+183x5+49x4+100x3+81x2+44x+79。
RS(255,239)編碼算法分 3 步,具體如下:
(1) 將消息多項式u(X) 乘X16得m(x)=m238x254+m237x253+…+m0x16。
(2)用m(x)除以g(x)得到余式r(x)=r15x15+r14x14+…+r1x1+r0。
(3)生成碼字C(x)=m(x)+r(x)=c254x254+c253x253+…+c1x1+c0。
圖1中,clk表示時鐘,data拉高表示信息有效,enable拉高表示編碼有效,x表示參與編碼的信息,y表示編碼后的信息,參與編碼的數(shù)據(jù)為 1,2,..238,239,編碼后信息位保持不變,校驗位為 37,133,..79,148。
圖1 RS(255,239)編碼器仿真結果Fig.1 Simulation result of RS(255,239) encoder
RS解碼器系統(tǒng)結構如圖2所示,可以分為5步,具體如下:
(1)由接收到的數(shù)據(jù)計算伴隨式S(x)。
(2)由伴隨式S(x)計算錯誤位置多項式σ(x)和錯誤求值多項式ω(x)。
(3)由錯誤位置多項式找出錯誤位置xi。
(4)由錯誤位置多項式σ(x)和錯誤求值多項式ω(x)計算各個錯誤位置xi的錯誤值Yi。
(5)得到錯誤位置xi和該位置的錯誤值Yi后,與接收的數(shù)據(jù)進行異或得到正確的數(shù)據(jù)信息,將校驗碼去除后發(fā)送到下級模塊。
圖2 RS解碼器系統(tǒng)結構圖Fig.2 System architecture of RS decoder
伴隨式S(x) 的系數(shù)si計算公式為[3]:
由式(1)可知計算每個伴隨式系數(shù)si只需要一個域乘法器、一個域加法器和一個寄存器,關鍵路徑延時由一個域乘法器和一個域加法器組成。
求解錯誤位置多項式σ(x)和錯誤求值多項式ω(x)采用Berlekamp Massey算法,算法流程詳見如下[4]。
(1)初始化:
(2)下面的步驟依次進行循環(huán)迭代,直到k=16。研究可得對應的數(shù)學公式表述如下:
設接收碼字R(x)=rn-1xn-1+rn-2xn-2+…+r1x+r0,要判斷rn-l是否有錯,只要檢驗σ1αl+σ2(αl)2+…+σv(αl)v=-1(v≤8) 是否成立即可,結果為-1 說明rn-l有錯,否則無錯[5]。
錯誤值Yi的計算公式為[6]:
其中,為錯誤位置多項式σ(x)的根,σodd()為錯誤位置多項式奇數(shù)項之和,因此該項可以在錢搜索求解錯誤位置的同時一并得出。
圖3是求解伴隨式仿真結果,編碼完成后,在接收的第 1、2、3、10、11、12、13、14 個信息處添加噪聲noise,信息添加噪聲信號后,解碼器收到的碼字為11、22、29、4、5、…、9、99、79、148,y0~y15存儲s1~s16的值,最終在enable信號拉低的時候計算出了伴隨式 105、19、4、..、100、98、129。
圖3 求解伴隨式仿真結果Fig.3 Simulation result of calculate syndrome
Berlekamp Massey算法仿真結果如圖4所示。將伴隨式s1、s2、…、s15、s16輸入 Berlekamp Massey 算法模塊,開始迭代時count為0,每次phase0產生一個脈沖,進行一次數(shù)據(jù)更新,最終在count為15且phase0為1的時候計算出了錯誤位置多項式σ(x)和錯誤求值多項式ω(x),可將其分別寫作如下數(shù)學形式:
此外,算法最后還給出了σ(x)的最高次冪exp_max,為檢錯做準備。
圖4 Berlekamp Massey算法仿真結果Fig.4 Simulation result of Berlekamp Massey algorithm
利用錢搜索對錯誤位置多項式σ(x)進行驗根,結果見圖5。chien_search拉高表示開始驗根,拉低表示結束驗根,當求解出σ(x)的根時,拉高val_err,可以觀察到錢搜索成功地確定了錯誤值的位置為 1、2、3、10、11、12、13、14,在錢搜索的同時計算出了式(6)的分母σodd()并確定了錯誤個數(shù)cnt_val,將cnt_val的值和Berlekamp Massey的輸出值exp_max做比較,若兩者相等就說明錯誤數(shù)在糾錯能力范圍內,則解碼器進行糾錯;若兩者不相等,則錯誤數(shù)超過糾錯能力范圍,不進行糾錯并給出提示。
圖5 錢搜索仿真結果Fig.5 Simulation result of Chien search
當chien_search信號拉高,也就是開始錢搜索時,激活碼字緩存器的讀使能信號rdreq,將碼字q從緩存器中讀出,同時將錯誤值err與其做異或運算,得到解碼后的輸出rs_out,其仿真結果如圖6所示。可以觀察到,經過解碼后,被噪聲干擾的數(shù)據(jù)已經恢復,當解碼結束后,即產生chien_end脈沖。
圖6 求解錯誤值和糾錯仿真結果Fig.6 Simulation result of error value solution and error correction
本文闡述了RS(255,239)編解碼器的算法原理并用Verilog運行實現(xiàn),利用Modelsim10.1進行編解碼器的功能仿真,結果表明該編解碼器設計正確,最大糾錯能力為8。