高速Viterbi譯碼器的優(yōu)化和實(shí)現(xiàn)
摘要:大約束度卷積碼作為信道糾錯(cuò)編碼在通信中得到了廣泛的應(yīng)用,而其相應(yīng)的Viterbi譯碼器硬件復(fù)雜度大,限制了譯碼速度。分析了Viterbi譯碼器的結(jié)構(gòu),優(yōu)化了各模塊,合理地組織了存儲器結(jié)構(gòu),簡化了接口電路。用FPGA實(shí)現(xiàn)Viterbi譯碼器,提高了譯碼器速度。關(guān)鍵詞:卷積碼 Viterbi譯碼 ACS 路徑度量存儲 FPGA實(shí)現(xiàn)
Viterbi算法是一種基于最大后驗(yàn)概率的卷積譯碼算法,應(yīng)用廣泛。CDMA的IS-95標(biāo)準(zhǔn)和WCDMA 3 GPP標(biāo)準(zhǔn)將卷積碼作為高速實(shí)時(shí)數(shù)據(jù)傳輸?shù)男诺兰m錯(cuò)編碼,使Viterbi譯碼器成為移動通信系統(tǒng)的重要組成部分。
為保證糾錯(cuò)性能,卷積碼結(jié)束度一般選擇比較大的,在3 GPP中規(guī)定約束度K=9。出于實(shí)時(shí)性的考慮,移動通信系統(tǒng)中對譯碼時(shí)延的要求比較高,需要高速譯碼器的支持。可是Viterbi譯碼算法的復(fù)雜度、所需存儲器容量與結(jié)束長度成指數(shù)增長關(guān)系,成為限制譯碼器速度的瓶頸。Viterbi譯碼器每解碼一位信息位就需對2 k-1個(gè)寄存器的狀態(tài)進(jìn)行路徑度量,并對相應(yīng)的存儲單元進(jìn)行讀寫。這種情況下,可以采用狀態(tài)路徑存儲單元分塊的方法,以提高其譯碼性能,缺點(diǎn)是ACS單元與存儲器之間的接口電路十分復(fù)雜,不易實(shí)現(xiàn)。
本文分析和優(yōu)化了Viterbi譯碼器的結(jié)構(gòu),提出了一種FPGA實(shí)現(xiàn)方案,簡化了接口電路,提高了速度。用這種結(jié)構(gòu)實(shí)現(xiàn)的單片集成譯碼器譯碼速率達(dá)350kbps、時(shí)鐘頻率30MHz。以下先分析譯堿器總體結(jié)構(gòu),然后對各模塊設(shè)計(jì)和實(shí)現(xiàn)做詳細(xì)說明。
1 算法簡述及譯碼器結(jié)構(gòu)
本文采用3 GPP標(biāo)準(zhǔn)規(guī)定的K=9,碼率r=1/2的(753,561)卷積碼,卷積編碼器送出的碼序列C,經(jīng)過信道傳輸后送入譯碼器的序列為R。譯碼器根據(jù)接受序列R,按最大似然準(zhǔn)則力圖找出正確的原始碼序列。
Viterbi譯碼過程可用狀態(tài)圖表示,圖1表示2個(gè)狀態(tài)的狀態(tài)轉(zhuǎn)移圖。Sj,t和Sj+N/2,t表示t時(shí)刻的兩個(gè)狀態(tài)。在t+1時(shí)刻,這兩個(gè)狀態(tài)值根據(jù)路徑為0或者1,轉(zhuǎn)移到狀態(tài)S2j+1和S2j+1,t+1。每一種可能的狀態(tài)轉(zhuǎn)移都根據(jù)接收到的有噪聲的序列R計(jì)算路徑度量,然后選擇出各個(gè)狀態(tài)的最小度量路徑(幸存路徑)。Viterbi算法就是通過在狀態(tài)圖中尋找最小度量路徑向前回溯L步,最后得到的即為譯碼輸出。
本設(shè)計(jì)采用Xilinx Virtex600E FPGA芯片,在ALDEC公司的Active-HDL仿真環(huán)境下,用Verilog語言完成,并用Xilinx的ISE4綜合實(shí)現(xiàn)。Viterbi譯碼器系統(tǒng)框圖如圖2所示,主要由BMG(路徑計(jì)算模塊)、ACS(加比選模塊)、TB(路徑回溯模塊)、MMU(路徑存儲模塊)等部分組成。采用并行流水線結(jié)構(gòu),各個(gè)模塊在控制信號統(tǒng)一監(jiān)控下工作,減少了讀取數(shù)據(jù)所需時(shí)間,充分發(fā)揮了FPGA高速計(jì)算的特性,提高了整個(gè)系統(tǒng)的效率。
2 子模塊的優(yōu)化和實(shí)現(xiàn)
2.1 ACS模塊
由于采用的卷積碼約束度K=9,在譯碼過程中,每一時(shí)刻有2k-1=256個(gè)狀態(tài),512個(gè)度量路徑值,為了獲得高速率,需采用盡
[1] [2] [3]