姜 智,閆智強(qiáng),馬 駿,董詩(shī)萌
(西安現(xiàn)代控制技術(shù)研究所, 西安 710065)
隨著導(dǎo)彈武器系統(tǒng)向著智能化方向發(fā)展,傳統(tǒng)的光纖數(shù)據(jù)鏈系統(tǒng)已經(jīng)不能滿足遠(yuǎn)距離,協(xié)同化的需求,因此,基于無(wú)線傳輸?shù)膶?dǎo)彈數(shù)據(jù)鏈系統(tǒng)得到了越來(lái)越廣泛的應(yīng)用。為了改善導(dǎo)彈數(shù)據(jù)鏈系統(tǒng)的性能,提升可靠性,文中對(duì)導(dǎo)彈數(shù)據(jù)鏈系統(tǒng)的信道編碼方式進(jìn)行了研究,設(shè)計(jì)了一種由RS碼、交織技術(shù)和卷積碼組成的級(jí)聯(lián)編碼,并在FPGA芯片上實(shí)現(xiàn),該級(jí)聯(lián)編碼能夠有效地提升系統(tǒng)的可靠性,保證較低的誤碼率。
級(jí)聯(lián)編碼的總體設(shè)計(jì)主要包括級(jí)聯(lián)編碼的編碼器與譯碼器設(shè)計(jì)。本設(shè)計(jì)中的級(jí)聯(lián)編碼采用RS(255,239)碼、交織(17×15)與卷積碼(2,1,7)級(jí)聯(lián)的編碼方式。級(jí)聯(lián)編碼結(jié)構(gòu)圖如圖1所示。
圖1 級(jí)聯(lián)編碼結(jié)構(gòu)圖
其中,RS碼為非二進(jìn)制的外碼,卷積碼為二進(jìn)制的內(nèi)碼,內(nèi)碼譯碼與外碼譯碼分別采用軟判決譯碼方法與代數(shù)譯碼方法,外碼譯碼可以將內(nèi)碼譯碼不能糾正的單比特錯(cuò)誤與突發(fā)錯(cuò)誤轉(zhuǎn)化為外碼的單個(gè)或多個(gè)符號(hào)錯(cuò)誤,并在外碼譯碼的過(guò)程中被進(jìn)一步糾正,大大的提高了抗誤碼性能[1]。
RS(255,239)碼對(duì)信道突發(fā)錯(cuò)誤有很好的糾錯(cuò)性能,有239個(gè)碼元,16個(gè)監(jiān)督碼元,可檢測(cè)16個(gè)碼元錯(cuò)誤,糾正8個(gè)碼元錯(cuò)誤。
RS(255,239)碼的編碼采用循環(huán)碼常用的多項(xiàng)式觸發(fā)電路完成。校驗(yàn)多項(xiàng)式為r(x),信息多項(xiàng)式為m(x)時(shí),與生成多項(xiàng)式g(x),三者之間的關(guān)系可以表述為:
r(x)=m(x)xn-kmodg(x)
(1)
本設(shè)計(jì)的RS碼的生成多項(xiàng)式采用系數(shù)非對(duì)稱方式,如式(2)所示,可以簡(jiǎn)化RS譯碼器的設(shè)計(jì)。
(2)
本設(shè)計(jì)中的RS(255,239)碼生成的多項(xiàng)式展開(kāi)對(duì)應(yīng)的系數(shù)為:g16=1,g15=59,g14=13,g13=104,g12=189,g11=68,g10=209,g9=30,g8=8,g7=163,g6=65,g5=41,g4=229,g3=98,g2=50,g1=36,g0=59。
RS(255,239)碼編碼器結(jié)構(gòu)如圖2所示,其工作過(guò)程如下:首先,將移位寄存器b0至b16的值設(shè)為0,門(mén)1打開(kāi),門(mén)2關(guān)閉,m(x)每個(gè)時(shí)鐘輸入一個(gè)字節(jié)到
除法電路,同時(shí)在輸出端輸出,作為RS碼的信息位;239個(gè)時(shí)鐘周期后,m(x)輸出并全部進(jìn)入除法電路,此時(shí)移位寄存器中保留了r(x)的系數(shù),作為RS碼的校驗(yàn)位,然后關(guān)閉門(mén)1,打開(kāi)門(mén)2;在第240至第255時(shí)鐘周期之間,b0至b16中的值按照時(shí)鐘周期依次向右移動(dòng),經(jīng)過(guò)16個(gè)時(shí)鐘周期后,16個(gè)校驗(yàn)符號(hào)在239個(gè)信息位之后輸出完畢,完成一個(gè)RS碼的編碼工作。
圖2 RS編碼器結(jié)構(gòu)
以0~238作為RS碼的輸入,經(jīng)過(guò)RS編碼產(chǎn)生16個(gè)校驗(yàn)位,為58,236,152,44,88,31,20,168,121,60,32,10,191,166,4,101。仿真結(jié)果如圖3所示,rs_in為RS編碼器的輸入,rs_out作為RS編碼器輸出端輸出數(shù)據(jù)。
圖3 RS編碼輸出16位校驗(yàn)位仿真
為了糾正實(shí)際信道中產(chǎn)生的較長(zhǎng)的突發(fā)錯(cuò)誤和多個(gè)突發(fā)錯(cuò)誤,常采用交織技術(shù)。采用交織能夠?qū)⑦B續(xù)多個(gè)突發(fā)錯(cuò)誤分散到RS碼碼字中,使錯(cuò)誤相互獨(dú)立,從而改善RS碼對(duì)連續(xù)多個(gè)符號(hào)錯(cuò)誤的糾錯(cuò)能力[2]。
交織器的工作原理:輸入端數(shù)據(jù)按順序分別進(jìn)入B條支路延遲器,第一條支路無(wú)延遲,第B條支路有(B-1)乘以M個(gè)周期數(shù)據(jù)延遲。交織器的輸出對(duì)應(yīng)各支路經(jīng)過(guò)延遲的數(shù)據(jù)。卷積交織的每條支路數(shù)據(jù)的延遲如式(3)所示。
di=(i-1)M×B,(i=1,2,...,B)
(3)
M與B的取值與RS碼的碼長(zhǎng)有關(guān),本設(shè)計(jì)中,取M×B=255,B=15,M=17。即交織深度為15,可抵抗240個(gè)符號(hào)周期的突發(fā)性差錯(cuò)。本設(shè)計(jì)采用FPGA的雙口RAM來(lái)實(shí)現(xiàn)卷積交織器。其結(jié)構(gòu)如圖4所示。
圖4 交織器結(jié)構(gòu)
(4)
雙口RAM的讀寫(xiě)地址如上式(4)所示。
交織器的輸入按照0,1,2, …,254順序地址存入雙口RAM,輸出按照地址發(fā)生器計(jì)算的讀地址將數(shù)據(jù)從雙口RAM中讀出。
RS編碼器的輸出rs_out,同時(shí)也是交織器的輸入,經(jīng)過(guò)交織器后,數(shù)據(jù)已被打亂,交織仿真結(jié)果如圖5所示。jz_out的讀地址輸出數(shù)據(jù)為0,16,32,…,193,209。
圖5 交織器仿真結(jié)果
卷積碼是一種比較常用的前向糾錯(cuò)編碼,(n,k,m)卷積碼是n位編碼輸出,k位信息輸入,輸出不僅與當(dāng)前時(shí)刻有關(guān),還與之前的(m-1)個(gè)分組有關(guān)。本設(shè)計(jì)采用(2,1,7)卷積碼作為級(jí)聯(lián)碼的內(nèi)碼,卷積碼多項(xiàng)式表示如式5。
(5)
卷積碼編碼器結(jié)構(gòu)可以按照式(5)得到,如圖6所示。移位寄存器ui~ui-6存儲(chǔ)的是從當(dāng)前輸入值到回溯6個(gè)時(shí)刻輸入值。當(dāng)下一時(shí)刻產(chǎn)生新的輸入時(shí),移位寄存器向右移動(dòng)1位,對(duì)應(yīng)寄存器中的數(shù)據(jù)經(jīng)異或計(jì)算后按照x1與x2的順序輸出。
交織器輸出的數(shù)據(jù)為255個(gè)字節(jié),而卷積編碼器則是按位輸入,仿真采用并串轉(zhuǎn)換方式,并串轉(zhuǎn)換后作為卷積碼輸入,輸入為ps_out,共2 040個(gè)字符,卷積編碼的輸出jj_out,輸出2 046個(gè)字符,每字符為2Bits的二進(jìn)制數(shù)據(jù)。仿真結(jié)果如圖7所示。
圖6 (2,1,7)卷積碼編碼器結(jié)構(gòu)
圖7 卷積編碼仿真結(jié)果
卷積碼譯碼器為采用8電平量化、回溯深度為40的軟判決卷積碼全并行譯碼的維特比譯碼器[3]。維特比譯碼器整體結(jié)構(gòu)框圖如圖8所示。由5個(gè)譯碼功能模塊組成。
圖8 卷積譯碼結(jié)構(gòu)
各模塊功能如下:
1)分支度量模塊:將級(jí)聯(lián)編碼器輸出分別計(jì)算和“00”、“01”、“10”、“11”的歐式距離,本設(shè)計(jì)中為軟判決,故輸出各分支度量值位寬為2。
2)加比選模塊:每次狀態(tài)更新時(shí),每個(gè)狀態(tài)都可以選擇兩條候選路徑,所以每個(gè)狀態(tài)的路徑度量值更新要分別計(jì)算兩個(gè)分支度量和對(duì)應(yīng)路徑度量之和,在設(shè)計(jì)中每次狀態(tài)更新總共有128條路徑,從中選擇64條路徑更新相應(yīng)的路徑度量值[4]。
3)最小路徑度量選擇模塊:從輸入的64個(gè)路徑度量值寄存器中查找當(dāng)中的最小值,并記錄相應(yīng)的寄存器位置,并輸出到幸存路徑管理存儲(chǔ)模塊。
4)路徑回溯模塊:加比選模塊產(chǎn)生的64個(gè)幸存路徑寄存器,在當(dāng)前時(shí)刻,由最小路徑度量值查找模塊得到的路徑度量值最小對(duì)應(yīng)的幸存路徑寄存器值作為路徑回溯模塊的輸出。
5)控制處理模塊:在加比選模塊中的路徑度量值經(jīng)過(guò)不斷累加會(huì)產(chǎn)生溢出,控制處理模塊為防止出現(xiàn)這種情況。輸入為64個(gè)路徑度量寄存器,輸出為修正后的64個(gè)路徑度量寄存器。
維特比譯碼器的輸入為jj_in,2 046個(gè)字符的二進(jìn)制碼流經(jīng)過(guò)維特比譯碼后產(chǎn)生2 040 bit輸出數(shù)據(jù)jj_out,如圖9所示。
圖9 維特比譯碼器仿真輸出
解交織器是交織器的逆過(guò)程,結(jié)構(gòu)和交織器相同,但雙口RAM的讀寫(xiě)地址與交織器正好相反,如式(6)所示。
將維特比譯碼器的輸出經(jīng)過(guò)串并轉(zhuǎn)換后作為解交織輸入,仿真結(jié)果如圖10所示。
(6)
輸出數(shù)據(jù)為jz_out,發(fā)送端交織器的輸入數(shù)據(jù)的255個(gè)二進(jìn)制數(shù)經(jīng)過(guò)解交織器后數(shù)據(jù)被正確還原。
圖10 解交織器仿真輸出
RS碼譯碼就是從接收多項(xiàng)式中找出錯(cuò)誤碼元的位置和錯(cuò)誤值,減去錯(cuò)誤圖樣后得到正確碼字[5]。RS譯碼器整體如圖11所示。
圖11 RS譯碼器結(jié)構(gòu)
工作流程為:首先接收多項(xiàng)式r(x)進(jìn)入伴隨多項(xiàng)式模塊計(jì)算伴隨值,構(gòu)造多項(xiàng)式如式(7)所示(其中t為最大糾正錯(cuò)誤字節(jié)數(shù),本設(shè)計(jì)中t=8):
s(x)=s0+s1x+s2x2+…+s(2t-1)x(2t-1)
(7)
解關(guān)鍵方程利用BM迭代算法,依據(jù)伴隨多項(xiàng)式計(jì)算模塊的輸出,迭代計(jì)算得出錯(cuò)誤位置多項(xiàng)式σ(x)與錯(cuò)誤值多項(xiàng)式ω(x);利用錯(cuò)誤位置多項(xiàng)式σ(x),Chien搜索模塊找到接收碼字多項(xiàng)式的錯(cuò)誤位置并在Forney算法模塊中計(jì)算圖樣,從而完成對(duì)接收碼字多項(xiàng)式的糾錯(cuò),輸出正確碼字。
解交織器輸出的數(shù)據(jù)jz_out送至RS譯碼器進(jìn)行譯碼,可正確還原出239個(gè)信息位和16個(gè)校驗(yàn)位,RS碼譯碼輸出如圖12所示,rs_out為譯碼器輸出。
圖12 RS譯碼器仿真輸出
級(jí)聯(lián)碼編碼器輸入rs_in的仿真波形,驗(yàn)證時(shí)輸入的是一組從0到238共239個(gè)8位二進(jìn)制數(shù)據(jù),為驗(yàn)證級(jí)聯(lián)編碼最大糾錯(cuò)位數(shù),譯碼器輸入一組為2 046個(gè)2位二進(jìn)制數(shù)據(jù),改變前140 bit作為信道傳輸后引起的數(shù)據(jù)錯(cuò)誤,譯碼器輸出的仿真波形如圖13所示。
圖13 改變前140 bit后譯碼器輸出
可以看出輸出的數(shù)據(jù)rs_out和編碼器的輸入一致,錯(cuò)誤的數(shù)據(jù)位能夠被糾正。圖14為改變前142 bit后的譯碼器輸出,可以看出輸出的數(shù)據(jù)rs_out的數(shù)據(jù)波形和編碼器輸入不一致,即當(dāng)信道傳輸導(dǎo)致數(shù)據(jù)錯(cuò)誤的位數(shù)超過(guò)140個(gè),級(jí)聯(lián)碼不能完全糾正錯(cuò)誤。
圖14 改變前142 bit后譯碼器輸出
由以上仿真結(jié)果可以看出,級(jí)聯(lián)編碼具有良好的糾錯(cuò)能力,能夠糾正140 bit的錯(cuò)誤,在導(dǎo)彈數(shù)據(jù)鏈系統(tǒng)中對(duì)信道編碼采用級(jí)聯(lián)編碼的方式可以大大降低誤碼率,提高數(shù)據(jù)傳輸?shù)目煽啃浴?/p>