郭 勇, 楊 歡
(南京北方信息產(chǎn)業(yè)集團(tuán)有限公司產(chǎn)品研發(fā)中心,江蘇 南京 211153)
在無線通信中,由于信道的噪聲和畸變,必然會對其中傳輸?shù)男畔⒁胧д婧托盘柵袥Q錯誤,因此需要使用糾錯編碼來降低誤碼率。卷積碼的糾錯性能優(yōu)于分組碼。在譯碼算法中,Viterbi譯碼算法性能最優(yōu)[1]。其中(2,1,7)卷積碼應(yīng)用非常廣泛?,F(xiàn)采用Xilinx的FPGA設(shè)計(jì)(2,1,7)卷積碼和Viterbi譯碼器,并對設(shè)計(jì)的譯碼器進(jìn)行糾錯能力測試,測試結(jié)果表明,該譯碼器糾錯性能良好。
(2,1,7)卷積碼編碼器的 k0=1, n0=2, N =7。碼生成多項(xiàng)式為: G0= ( 171)8, G1=(133)8。
設(shè)輸入為1 1 0 1 0 0 1 0 0 1 0 0 0,編碼后的輸出為11 01 01 11 01 10 10 01 10 11 10 10 00 00 01 11 00。用Verilog語言設(shè)計(jì)編碼器模塊,并編寫仿真測試文件,在ModelSimSE6.4a中得到編碼器的仿真波形,如圖1所示[2]。
圖1 (2,1,7)卷積碼編碼器的仿真波形
Viterbi譯碼算法是1967年由維特比提出的基于最大似然概率的譯碼算法。相比于序列譯碼和門限譯碼,Viterbi譯碼算法有更好的糾錯性能。
分支度量單元是計(jì)算譯碼輸入與各狀態(tài)分支間的距離度量值,并作為加-比-選(ACS)模塊的輸入。對BMU模塊進(jìn)行設(shè)計(jì),仿真結(jié)果如圖2所示[3]。
圖2 BMU模塊仿真波形
ACS模塊的功能是在每個狀態(tài)節(jié)點(diǎn)上分別對兩個前一狀態(tài)輸入支路的路徑度量值和相應(yīng)分支度量值相加并進(jìn)行比較,并將其中較小的值作為該節(jié)點(diǎn)新的路徑度量值。如果相加以后的值相同,則任意選擇一條路徑。這里采用全并行結(jié)構(gòu),因此需要64個ACS單元[4]。在每個時(shí)鐘的上升沿對64個狀態(tài)并行地進(jìn)行一次加-比-選運(yùn)算。對ACS模塊進(jìn)行設(shè)計(jì),仿真結(jié)果如圖3所示。
圖3 ACS模塊仿真波形
對譯碼器來說,每送入2位譯碼輸入,64個ACS模塊并行地進(jìn)行一次加-比-選運(yùn)算,并儲存運(yùn)算的結(jié)果。這里需要計(jì)算 42次,即回溯的譯碼深度?;厮萆疃纫笫羌s束長度的5~10倍。這里選擇6倍。為防止累加的過程中發(fā)生溢出,在編程中設(shè)定,如果經(jīng)過ACS模塊計(jì)算后,S0~S63的64個狀態(tài)的路徑度量值都大于4,則所有的值都減去4,實(shí)際的糾錯性能滿足要求。EN00~EN63是每個狀態(tài)比較的結(jié)果,需要并行的輸出,作為回溯模塊找到正確路徑的判據(jù)[5]。
在經(jīng)過 42次計(jì)算后,所有可能的路徑匯聚到一起,形成唯一一條最大似然路徑,這條路徑回溯后得到的輸出序列為正確的譯碼序列,仿真結(jié)果如圖4所示。
圖4 路徑量度迭代更新模塊仿真波形
當(dāng)?shù)\(yùn)算進(jìn)行完 42步以后,唯一的一條幸存路徑已經(jīng)生成,回溯操作的目的就是找到這條幸存路徑。
當(dāng)所有的狀態(tài)回溯完成后,下一步送到譯碼輸出模塊輸出正確的譯碼序列,結(jié)果如圖5所示。
圖5 狀態(tài)回溯模塊仿真波形
把回溯的狀態(tài)轉(zhuǎn)移路徑輸入到譯碼輸出模塊,得到正確的譯碼輸出結(jié)果[6]。
輸入編碼器的比特為1 1 0 1 0 0 1 0 0 1 0 0 0,送入譯碼器的是有誤碼的編碼序列11 01 01 11 01 11 10 01 10 11 10 10 11 00 01 11 00,加粗為誤碼,譯碼器輸出的是正確的1 1 0 1 0 0 1 0 0 1 0 0 0 。譯碼器實(shí)現(xiàn)了預(yù)先的糾錯功能,圖6的仿真結(jié)果表明該譯碼器實(shí)現(xiàn)了預(yù)期的糾錯功能。
圖6 譯碼輸出模塊的仿真波形
設(shè)進(jìn)入編碼器的比特序列為:11011 00111 01101 00111。(偽隨機(jī)序列用Matlab中的randint函數(shù)產(chǎn)生)。
正確的編碼輸出為:11 01 01 11 10 00 10 11 00 00 01 11 11 11 01 10 10 10 10 11 01 00 10 10 10 11 00 00 00 00,仿真波形如圖7所示。
送入譯碼器的有誤碼的編碼為:11 01 01 00 10 00 10 11 01 00 01 11 11 11 00 10 11 10 10 11 01 00 10 10 10 11 01 00 00 00 00 00 00 00。加粗表示誤碼。
經(jīng)過譯碼器糾錯,輸出正確的未編碼序列。仿真波形如圖8所示。
圖7 編碼輸入仿真波形
圖8 譯碼輸出仿真波形
給出了(2,1,7)卷積碼編碼器和采用Viterbi算法的譯碼器各功能模塊的設(shè)計(jì)方法,并對譯碼器糾錯性能進(jìn)行了測試,測試結(jié)果表明該譯碼器有良好的糾錯性能。該譯碼器適用于對運(yùn)算速度要求高、對資源占用較敏感的高速數(shù)字通信系統(tǒng)中。
[1] 王新梅,肖國鎮(zhèn). 糾錯碼—原理與方法[M]. 西安:西安電子科技大學(xué)出版社,2001:74-80.
[2] 西瑞克斯.無線通信的Matlab和FPGA實(shí)現(xiàn)[M].北京:人民郵電出版社,2009:46-52.
[3] 安樂,李實(shí)秋. Viterbi譯碼器的應(yīng)用及其硬件設(shè)計(jì)與實(shí)現(xiàn)[J]. 通信技術(shù),2008,41(05):26-28.
[4] 傅民倉,馮立杰,李立波,等. 基于FPGA的高速Viterbi譯碼器的優(yōu)化設(shè)計(jì)和實(shí)現(xiàn)[J]. 現(xiàn)代電子技術(shù),2006,29(07):52-54.
[5] 周沖,胡劍浩,張忠培,等. CDMA系統(tǒng)通用高速Viterbi譯碼器的設(shè)計(jì)與實(shí)現(xiàn)[J]. 通信技術(shù),2009,42(12):10-13.
[6] 張傳達(dá),李小文. 卷積碼編碼及其Viterbi譯碼的實(shí)現(xiàn)[J]. 無線電工程,2006,36(07):45-48.