高性能維特比在衛(wèi)星導(dǎo)航接收機中FPGA實現(xiàn)
摘要:衛(wèi)星定位接收機中卷積碼譯碼即維特比譯碼器,在處理器中面臨占有資源較多、處理時間過長等問題,為了減少處理器資源的占用和提高處理速度,采用并行加比選蝶形單元的的方法,在FPGA平臺上用硬件描述語言設(shè)計一種高性能維特比譯碼器,作為GPS L2頻點和GALILEO E1頻點接收機的通用譯碼器,在GPS和GALILEO接收機上運用,大大減少資源使用,提高接收機的處理速度。
關(guān)鍵詞:Viterbi譯碼器;GPS/GALILEO接收機;卷積碼;FPGA
0 引言
在現(xiàn)代通信系統(tǒng)中,要使信號能夠更可靠地在信道中傳輸,往往需要在信道編碼中采用糾錯碼來降低信號受噪聲的影響,以降低傳輸?shù)恼`碼率。卷積碼及其Viterbi譯碼是常用的信道編碼方案。卷積碼在GNSS接收機中得到應(yīng)用,其中約束長度K=7,碼率為1/2的卷積碼已經(jīng)成為商業(yè)衛(wèi)星通信系統(tǒng)中的標(biāo)準編碼方法。在衛(wèi)星定位系統(tǒng)中,GPS L2頻點和GAILILEO E1的電文均采用卷積碼編碼,目前在定位接收機中用軟件進行Viterbi譯碼較多,為了提高處理速度通用性,本文設(shè)計一種基于FPGA的通用高速Viterbi譯碼器,能作為GPS L2和GALILEO E1的電文的譯碼器,大大減少資源使用,提高接收機的處理速度和減少軟件復(fù)雜度,從而節(jié)約處理器的資源。
1 卷積編碼及Viterbi算法基本原理
卷積碼包含由K個寄存器組(每組包括k個比特,k通常取1)構(gòu)成的移位寄存器和n個模2加法器,其中K是約束長度,編碼器的輸出由當(dāng)前輸入數(shù)據(jù)和寄存器組中的數(shù)據(jù)共同決定。對于GPS L2和GALILEOE1均為(2,1.7)卷積碼,其生成多項式為G=(171,133),電路圖如圖1所示。(2,1,7)卷積碼編碼器由6個延時器(圖1中的q-1模塊,可用寄存器實現(xiàn))和兩個模2加法器組成,它的編碼約束度為7,碼率為1/2,即輸入端輸入1 b信息,輸出端輸出2 b編碼信息,并分為上、下兩路并行輸出。
對信號進行卷積編碼后,通常采用Viterbi算法(VA)譯碼。Viterbi算法是對于卷積碼的最大似然譯碼,即利用概率譯碼。1967年Viterbi第一個提出了這個算法,F(xiàn)orney對這種算法及其性能做了可讀強、見解深刻的描述。最大似然譯碼函數(shù),就是在已知收到的信道輸出序列,找到最有可能的傳輸序列,即通過網(wǎng)格圖找出一條路徑對應(yīng),要求路徑輸出的碼序列具有對數(shù)最大值。對于二進制對稱信道來說,函數(shù)的最大化等價于在網(wǎng)格圖中找到與接收序列之間有最小漢明距離的路徑。
Viterbi算法是通過動態(tài)規(guī)劃的方法找出網(wǎng)格圖中具有最大度量的最大似然路徑,即局部最優(yōu)等效全局最優(yōu)。在每一步中,它將進入每一狀態(tài)的所有路徑進行比較,并存儲具有最大度量值的路徑,即幸存路徑,步驟為:
(1)從時刻l=m開始,計算進入某一狀態(tài)的單個路徑的部分度量值,并存儲每一狀態(tài)的幸存路徑及其度量值。
(2)l增加1,l=m+1,將進入某一狀態(tài)的分支度量值與前一段時間的幸存度量值累加,然后計算進入該狀態(tài)的所有最大度量的路徑,決定并存儲新的幸存路徑及度量,并刪除所有其他路徑。
(3)若l<l+m,重復(fù)步驟(2),否則結(jié)束。
該算法主要包括兩個工作:計算度量并比較,其決定幸存路徑;另一個是記錄幸存路徑及其相關(guān)的度量值。
2 基于硬件描述語言的Viterbi算法
Viterbi算法一般采用回溯法和寄存器交換法。為了減少控制的復(fù)雜度,本文采用回溯法,譯碼器由分支度量(BMU)、加比選(ACS)蝶形運算、存儲單元、回溯(TB)單元4個基本部分組成,見圖2。
利用二元卷積來說明VA譯碼過程如圖3所示。
圖4為用實線表示輸入為0時走的分支,虛線表示輸入為1走的分支,任意給定一個序列,在網(wǎng)格圖中就有一個特定路徑,圖4中,u=(1011100),輸出的編碼為c={11_10_00_01_10_01_11}。
2.1 分支度量單元
路徑度量單元是計算實際接收到的碼元與期望碼元之問的差別。G1與g1比較,G2與g2比較,若接收信號為0,期望值為0時,度量值為0,期望值為1時,度量值為1;若接收信號為1,期望值為0時,度量值為1,期望值為1時,度量值為0。兩個比較結(jié)果和作為最終度量結(jié)果輸出。按此規(guī)律計算當(dāng)前狀態(tài)下進入下一個狀態(tài)的度量值。
2.2 加比選蝶形單元
加比選(ACS)單元是完成幸存路徑的延伸和判決向量的生成,計算過程包括度量值的累加、比較、選擇路徑操作。對(2,1,3)卷積碼而言,共4個狀態(tài),組成2個蝶形運算單元;而(2,1,7)卷積碼則64個狀態(tài),組成32個蝶形單元。在K=7的卷積碼中,有64個狀態(tài)的路徑,所以根據(jù)待譯碼的長度,適當(dāng)增加累加值的位寬,防止度量值溢出。
2.3 幸存路徑存儲單元
幸存路徑存儲是用來存儲每次蝶形運算完成單元后所選擇的路徑,存儲單元的大小為譯碼深度乘以狀態(tài)個數(shù)。對每一個加比選過程的存儲,實際就是對幸存路徑的存儲。
2.4 回溯單元
由VA算法可知,在網(wǎng)格圖上經(jīng)過大約5倍的約束長度之后,所有幸存路徑將匯聚到一起。因此選擇合適的回溯長度L,并從任一條路徑開始(比如0狀態(tài))開始回溯,當(dāng)回溯到L個節(jié)點時開始輸出譯碼比特。
3 GPS L2和GALILEO E1接收機的高性能Viterbi譯碼具體模塊設(shè)計
根據(jù)GPS和GALILEO的接口文件,L2頻點電文采用(2,1,7)卷積碼的形式,碼多項式為(171,133)o,且與GALILEO E1的卷積碼格式相同,GALILEO采用分段卷積的形式,參與卷積的為每頁中不包含同步頭的部分,即120位進行卷積。為了能同時作為GPS和GALILEO的譯碼器,設(shè)計譯碼深度為120的譯碼器。
接收機的Viterbi譯碼模塊包括:地址譯碼模塊、數(shù)據(jù)加載模塊、Viterbi譯碼模塊、輸出控制模塊。為了提高譯碼器的性能,Viterbi譯碼模塊的加比選蝶形單元采用32個并行結(jié)構(gòu),提高運算速度。
3.1 地址譯碼及數(shù)據(jù)加載
地址譯碼包括總線讀寫譯碼,由于Viterbi模塊作為一個獨立模塊,內(nèi)部地址采用自己的譯碼設(shè)計。
深度為120的Viterbi譯碼器,需要輸入240個卷積碼,對于總線32位CPU,需要8次寫入完成數(shù)據(jù)輸入。最少需要8個地址單元,Viterbi譯碼輸出最少需要4個地址單元,譯碼狀態(tài)中斷輸出,狀態(tài)位清除,即整個譯碼器模塊需要14個地址單元。地址線需要4根即可。
地址譯碼電路采用組合邏輯設(shè)計。譯碼狀態(tài)中斷輸出、狀態(tài)位清零采用不同時鐘域同步。
數(shù)據(jù)加載模塊是加載寄存器內(nèi)數(shù)據(jù),然后按照順序,1次按2位串行輸出。
3.2 Viterbi譯碼模塊
Viterbi譯碼模塊采用的譯碼深度為120的(171,133)o譯碼設(shè)計,譯碼器結(jié)構(gòu)如圖6所示,由譯碼控制單元、度量值計算單元、蝶形運算、幸存路徑存儲、回溯輸出單元構(gòu)成。
(1)蝶形運算單元。按照(2,1,7),多項式為(171,133)卷積碼特點,基本蝶形單元分布見圖7。對于約束長度為7的卷積碼,共計64個狀態(tài),形成32個基2的蝶形運算單元見圖8。
蝶形單元的輸入信號為上次的度量和,與接收碼本蝶形單元中理論輸出碼的碼距度量,如圖9所示。
輸出信號為幸存路徑、度量值和,選擇輸出為1,不選輸出為0,如表1所示。
(2)幸存路徑存儲。經(jīng)過蝶形單元運算的輸出,幸存路徑,64個狀態(tài),幸存路徑為64位,表示該狀態(tài)有或無,每進行一次蝶形運算,存入一個64位路徑信息,存儲器的寫入控制信號和地址信息由狀態(tài)控制單元發(fā)出,存儲空間為120×64 b。
(3)回溯及輸出?;厮葸^程即從地址最后向前一次讀取幸存路徑的值,得出譯碼電文。如圖10所示。
(4)狀態(tài)控制單元。狀態(tài)控制單元是對整個譯碼過程的控制,復(fù)位后,系統(tǒng)處在空狀態(tài),收到輸入的待譯數(shù)據(jù)后,進入加比選狀態(tài),按照數(shù)據(jù)流順序進行加比選蝶形運算操作,進入到譯碼深度的長度的加比選后,轉(zhuǎn)入譯碼回溯輸出單元,從最后一個回溯到第一個時,即完成回溯,同時輸出譯碼電文和譯碼完成中斷,系統(tǒng)再次進入等待狀態(tài),如圖11所示。
4 仿真及接收機測試結(jié)果
GPS/Galileo接收機通用的Viterbi譯碼器設(shè)計通過Modelsim仿真,能夠得出正確譯碼結(jié)果,編碼后在240個碼序列的228之前加入1位或2位錯誤碼,均能正確糾錯,得到正確的譯碼結(jié)果。
譯碼延時260個時鐘周期。最大譯碼數(shù)據(jù)吞吐率達240×(150×1 000 00/260)=138 Mb/s。如圖12所示。
譯碼模塊在Altera StratixⅡ系列EP2S180F1020I4 FPGA平臺上,利用QuartusⅡ8.0進行綜合和時序分析,最大速度可以達到150 MHz,資源使用量為:ALUTs占用2 679.Logic Registers占用1 465,與文獻相比,資源消耗大大減少。如圖13,圖14所示。
5 結(jié)語
本文所述基于FPGA的Viterbi譯碼器用于GPS/GALILE-O接收機,能對GPS L2和GALILEO的電文進行譯碼,糾錯能力達到預(yù)期效果,F(xiàn)PGA資源使用量較低,主時鐘速度最大可達到150 MHz,譯碼處理延時達260個時鐘周期,譯碼深度為120,最大譯碼數(shù)據(jù)吞吐率達138 Mb/s,完全滿足GPS/GALILEO接收機電文接收譯碼速度要求。