卷積碼是深度空間通信系統(tǒng)和無(wú)線通信系統(tǒng)中常用的一種差錯(cuò)控制編碼。它克服了分組碼由于以碼塊為單位編譯碼而使分組間的相關(guān)信息丟失的缺點(diǎn)。(2,1,8)卷積碼在2G、3G通信系統(tǒng)中得到了廣泛的運(yùn)用。CDMA/IS-95系統(tǒng)的前向信道[3]、CDMA20001x的前反向鏈路都使用了生成多項(xiàng)式為(561,753)碼率為1/2的(2,1,8)卷積碼。針對(duì)目前卷積碼譯碼器占用資源較多,最高工作頻率較低的缺點(diǎn),本文設(shè)計(jì)了一種新的基于FPGA的(2,1,8)卷積碼譯碼器。該譯碼器工作頻率高,輸出時(shí)延小,占用資源少。
1? (2,1,8)卷積碼譯碼器的總體設(shè)計(jì)
本文所實(shí)現(xiàn)的(2,1,8)卷積碼譯碼器是基于維特比算法的硬判決譯碼器。整個(gè)系統(tǒng)分為啟動(dòng)單元、中間處理單元、譯碼輸出單元3個(gè)單元模塊。系統(tǒng)總體結(jié)構(gòu)圖如圖1所示。對(duì)(2,1,8)卷積碼譯碼器,啟動(dòng)單元處理的是前8個(gè)輸入的碼字,中間處理單元處理的是后續(xù)輸入的碼字。譯碼輸出單元實(shí)現(xiàn)對(duì)譯碼器譯出碼字的輸出。本設(shè)計(jì)中,各狀態(tài)節(jié)點(diǎn)的路徑度量和幸存路徑均采用FPGA片內(nèi)的寄存器作為存儲(chǔ)主體,即采用的是寄存器交換法。這樣譯碼輸出時(shí)不用回溯,能極大提高譯碼器的譯碼速率。
?
2? (2,1,8)卷積碼譯碼器各模塊設(shè)計(jì)
2.1 啟動(dòng)單元模塊
?。?,1,8)卷積碼譯碼器共有256個(gè)狀態(tài)節(jié)點(diǎn)。在處理前8個(gè)輸入碼字中的第i(i為大于0且小于9的整數(shù))個(gè)碼字時(shí),只需對(duì)其中的2i個(gè)狀態(tài)節(jié)點(diǎn)進(jìn)行處理,而且轉(zhuǎn)移至這2i個(gè)狀態(tài)節(jié)點(diǎn)的前一狀態(tài)節(jié)點(diǎn)都各僅有一個(gè),其狀態(tài)轉(zhuǎn)移圖如圖2所示。因此并不需執(zhí)行比較和選擇操作。該單元的關(guān)鍵在于確定處理第i個(gè)碼元時(shí),需對(duì)哪些狀態(tài)節(jié)點(diǎn)的幸存路徑和路徑度量值更新。經(jīng)分析可知:在第i個(gè)碼元處理結(jié)束后。當(dāng)且僅當(dāng)某節(jié)點(diǎn)對(duì)應(yīng)的狀態(tài)值的二進(jìn)制形式的低(8-k)位比特均為0,譯碼器才可能到達(dá)該狀態(tài)節(jié)點(diǎn)。據(jù)此本文設(shè)計(jì)了如下的一種巧妙方法確定某狀態(tài)節(jié)點(diǎn)是否能到達(dá)。設(shè)置一個(gè)8bit位寬的寄存器型變量sd0。其初始值置為0x7f,即將其最高位置為0,每處理完一個(gè)碼元,就將sd0右移一位,在判斷狀態(tài)值為i的節(jié)點(diǎn)是否需要處理時(shí),將sd0與i進(jìn)行按位與運(yùn)算,若其結(jié)果為0,則該狀態(tài)節(jié)點(diǎn)需被處理,否則,直接進(jìn)入對(duì)下一狀態(tài)節(jié)點(diǎn)的判斷處理。
?
在計(jì)算各狀態(tài)節(jié)點(diǎn)的路徑度量BM時(shí),本設(shè)計(jì)采取了如下方案。預(yù)先計(jì)算出(2,1,8)卷積碼的256個(gè)狀態(tài)在輸入為0時(shí)的編碼結(jié)果,并將其存儲(chǔ)在一個(gè)由256個(gè)位寬為2bit的寄存器組中。處理接收的卷積碼碼字時(shí),首先計(jì)算出該碼字與(2,1,8)卷積碼的4個(gè)可能碼字00,01,10,11的不同的比特的位數(shù)。并分別存儲(chǔ)在對(duì)應(yīng)的4個(gè)2bit位寬的路徑度量寄存器l0,l1,l2,l3中。將狀態(tài)節(jié)點(diǎn)i和(i+128)的兩個(gè)路徑度量值分別記為BM0和BM1,節(jié)點(diǎn)i的BM0和BM1分別為編碼器處于狀態(tài)(2×i)和(2×i+1)且輸入為0時(shí)的輸出碼字與當(dāng)前時(shí)刻輸入碼字不同的比特?cái)?shù)。節(jié)點(diǎn)(i+128)的BM0和BM1分別為編碼器處于狀態(tài)(2×i)和(2×i+1)且輸入為1時(shí)的輸出碼字與當(dāng)前時(shí)刻輸入碼字不同的比特?cái)?shù)。且任何狀態(tài)節(jié)點(diǎn)的兩個(gè)路徑度量值BM0和BM1之和為2,據(jù)此就可得出各個(gè)狀態(tài)節(jié)點(diǎn)的BM0和BM1的值。
2.2 中間處理單元
中間處理單元的主體是加比選操作模塊。(2,1,8)卷積碼譯碼器處理完開(kāi)始的8?jìng)€(gè)碼元之后,其狀態(tài)轉(zhuǎn)移圖如圖3所示。此時(shí),到達(dá)每個(gè)狀態(tài)節(jié)點(diǎn)的路徑有兩條,到達(dá)狀態(tài)節(jié)點(diǎn)i和i+128的兩條路徑分別來(lái)自節(jié)點(diǎn)2×i和2×i+1,其中i為小于128的自然數(shù)。對(duì)狀態(tài)i和i+128對(duì)應(yīng)節(jié)點(diǎn)的幸存路徑和路徑度量值的更新就是要比較節(jié)點(diǎn)2×i和2×i+1的在前一碼元處理結(jié)束后的路徑度量與它們轉(zhuǎn)移至狀態(tài)i和i+128時(shí)對(duì)應(yīng)的路徑度量之和,并取其中較小者。
?
該單元需解決的一個(gè)關(guān)鍵問(wèn)題就是路徑度量的溢出問(wèn)題。若不對(duì)該問(wèn)題進(jìn)行處理,隨著譯碼序列長(zhǎng)度的增加,將根據(jù)各狀態(tài)的路徑度量寄存器存儲(chǔ)值的大小判斷各狀態(tài)路徑度量的相對(duì)大小發(fā)生錯(cuò)誤,從而使得譯碼出錯(cuò)。經(jīng)過(guò)對(duì)(2,1,8)卷積碼譯碼器網(wǎng)格圖的研究發(fā)現(xiàn):硬判決時(shí),256個(gè)狀態(tài)的路徑度量的最大值與最小值之差不會(huì)超過(guò)15,若用5比特位寬的寄存器型變量存儲(chǔ)各狀態(tài)的路徑度量,當(dāng)最大路徑度量值達(dá)到31即將溢出時(shí),最小路徑度量值一定不小于16,此時(shí)將所有256個(gè)狀態(tài)節(jié)點(diǎn)的路徑度量值均減去16,這樣就解決了溢出問(wèn)題。根據(jù)各狀態(tài)的路徑度量值的最高比特位是0還是1就可判斷其值是否大于等于16。
2.3 譯碼輸出單元
本設(shè)計(jì)譯碼輸出單元采取截短譯碼算法。即譯碼到達(dá)一定深度時(shí),就開(kāi)始輸出譯碼結(jié)果。該譯碼深度一般應(yīng)不小于5倍卷積碼的約束長(zhǎng)度。本設(shè)計(jì)中譯碼深度取為45。譯碼輸出采用任意狀態(tài)判決準(zhǔn)則。每個(gè)時(shí)刻將全0狀態(tài)的幸存路徑的最高比特位移出作為譯碼器輸出。采用任意狀態(tài)判決準(zhǔn)則能降低硬件的復(fù)雜度。
3? 仿真結(jié)果及分析
采用EP1S20F484C5作為目標(biāo)器件,將譯碼器用Quartus2自帶的編譯器編譯綜合后的結(jié)果顯示:該譯碼器共占用了14226個(gè)邏輯單元LE,譯碼器的最高工作頻率可達(dá)102MHz,其輸出時(shí)延為47個(gè)時(shí)鐘周期。文獻(xiàn)[13]采用RAM作為幸存路徑的存儲(chǔ)主體實(shí)現(xiàn)的(2,1,8)卷積碼譯碼器,采用APEXEP20K200作為目標(biāo)芯片時(shí),共使用了2200個(gè)邏輯單元,和16塊RAM,譯碼器最高僅可支持40MHz的時(shí)鐘,完成一步約束長(zhǎng)度為9(256狀態(tài))的加、比、選操作需要132個(gè)時(shí)鐘周期。內(nèi)部的最高譯碼速度僅可達(dá)588kb/s。因此本設(shè)計(jì)僅用相對(duì)較少的硬件資源消耗換取了較大的譯碼速率的提高。
由糾錯(cuò)編碼的理論可知,當(dāng)線性分組碼的碼字間的最小距離為dmin時(shí),其最多能糾正[(dmin-1)/2]個(gè)比特的錯(cuò)誤,運(yùn)算符[]表示不超過(guò)該數(shù)的最大整數(shù)。卷積碼中用自由最小距離df代替,生成多項(xiàng)式為(561,753)的(2,1,8)卷積碼的自由最小距離為df=12,因此其能糾正最多為5個(gè)比特的突發(fā)錯(cuò)誤。
為驗(yàn)證所設(shè)計(jì)的卷積碼譯碼器的糾錯(cuò)性能,首先基于有限狀態(tài)機(jī)設(shè)計(jì)了一個(gè)編碼器,當(dāng)其輸入為111111111111111100000000時(shí),經(jīng)過(guò)一個(gè)時(shí)鐘周期的時(shí)延,編碼器輸出碼字為321201103333333301213223,將該序列的前5比特?cái)?shù)據(jù)取反后作為譯碼器的輸入,其仿真結(jié)果如圖4所示。
?
由圖4中的仿真波形可看出:經(jīng)過(guò)47個(gè)時(shí)鐘周期的延遲之后,譯碼器糾正了輸入碼元5個(gè)比特的錯(cuò)誤,正確譯出了信息碼字。從而說(shuō)明該譯碼器設(shè)計(jì)正確。
4? 結(jié)語(yǔ)
本文基于FPGA技術(shù)設(shè)計(jì)了一種(2,1,8)卷積碼的硬判決維特比譯碼器。該譯碼器以FPGA片內(nèi)的寄存器作為路徑度量和幸存路徑的存儲(chǔ)單元,經(jīng)分析得出了路徑度量單元的最小位寬,有效降低了對(duì)芯片資源的消耗。采用截短譯碼算法,降低了硬件的復(fù)雜度。采取了一種巧妙的方法實(shí)現(xiàn)了譯碼器的啟動(dòng)過(guò)程單元。綜合和仿真結(jié)果表明:該譯碼器用較少的硬件資源消耗就換取了極大的譯碼速度的提高。
評(píng)論
查看更多