袁 進
(宿遷學(xué)院 信息工程學(xué)院,江蘇 宿遷 223800)
隨著全球衛(wèi)星導(dǎo)航系統(tǒng)(GNSS)及物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,導(dǎo)航定位技術(shù)已應(yīng)用在智慧城市、車聯(lián)網(wǎng)、智慧物流等領(lǐng)域.目前,GNSS主要包括美國的全球定位系統(tǒng)(GPS)、歐盟的伽利略系統(tǒng)(Galileo)、俄羅斯的格洛納斯系統(tǒng)(GLONASS)以及中國的北斗衛(wèi)星導(dǎo)航系統(tǒng)(BDS)[1],接收機的設(shè)計已從單模接收機發(fā)展到了更具特色的多模接收機.多模接收機能夠更大化地發(fā)揮出導(dǎo)航衛(wèi)星系統(tǒng)的作用,其定位范圍更廣、定位精度更高,但其結(jié)構(gòu)相對復(fù)雜、設(shè)計成本較高.本文側(cè)重于對一種多模接收機捕獲模塊的快速傅里葉變換(FFT)算法設(shè)計問題進行研究.該多模接收機能夠接收GPS及BDS的衛(wèi)星信號,在捕獲模塊設(shè)計過程中,根據(jù)接收信號特點,該接收機采用并行碼相位捕獲算法為基礎(chǔ)的設(shè)計方法.由于這種方法多次用到快速傅里葉變換(FFT)模塊,故FFT模塊決定著捕獲模塊的性能優(yōu)劣.本文針對FFT算法設(shè)計中出現(xiàn)的兼容性差、運算時間長、資源占用大等問題,從該接收機接收的衛(wèi)星信號特點、硬件資源狀況以及FFT算法理論特點等方面進行綜合考慮,對FFT算法進行了優(yōu)化設(shè)計,并對優(yōu)化后的算法進行仿真分析與工程測試后得,該方法能有效解決上述遇到的問題,工程應(yīng)用效果較好.
多模接收機是指接收機能夠接收多種衛(wèi)星信號,從而使定位精度更高、使用范圍更廣.本文研究的多模接收機共可接收如B1I信號、L1C/A信號、B3I信號等多種基于BPSK調(diào)制的信號,該接收機可以根據(jù)其所處環(huán)境的優(yōu)劣進行不同衛(wèi)星信號接收,當接收機可接收到多種信號時,優(yōu)先選擇B1I信號進行導(dǎo)航定位.表1示出了接收機所接收的具有代表性的信號基本參數(shù).
表1 信號基本參數(shù)
由表1可得,接收機所接收信號的主碼長有三類,最短為1023,最長為10 230,故這些信號的主碼長可看成以1023為基底的不同形式.在設(shè)計FFT算法時,可以根據(jù)衛(wèi)星信號特點將FFT算法設(shè)計成1024點或者2048點FFT.考慮該接收機通常通過接收B1I信號實現(xiàn)定位,并且,采用2048點FFT設(shè)計既能滿足各類信號的捕獲要求,又易于硬件實現(xiàn),故本文采用2048點FFT設(shè)計.
比較常規(guī)捕獲算法的優(yōu)缺點,結(jié)合本文討論的接收機接收信號的特點可知,該接收機以并行碼相位捕獲方法為基礎(chǔ)進行捕獲模塊設(shè)計.由于本文主要討論FFT算法的設(shè)計,故對多模接收機的捕獲算法設(shè)計不做贅述,這里僅對涉及到FFT算法處理的部分做一些分析.
圖1為并行碼相位捕獲算法的原理框圖.由圖1所示,接收機通過天線接收衛(wèi)星信號,經(jīng)前端處理后得到中頻信號,中頻信號經(jīng)混頻處理后,以(i+jq)的復(fù)數(shù)形式進行FFT運算,接著,運算結(jié)果與經(jīng)FFT處理后的本地偽碼進行共軛相乘,相乘結(jié)果經(jīng)IFFT處理后輸出到隨后的處理模塊中[2-3].
由上述分析可知,FFT在接收機的捕獲過程中起著關(guān)鍵的作用,且多次使用,故FFT算法設(shè)計需綜合考慮捕獲模塊特點、硬件資源等因素.
在FFT算法設(shè)計中,本文遵循按頻率抽取的FFT算法的以下幾個規(guī)則:
1) 蝶形運算單元
x1(n)=x(n),
(1)
x2(n)=x(n+N/2).
(2)
式中:n=0,1,2,…,N/2-1.
圖2 蝶形運算單元結(jié)構(gòu)
2) 原位運算
與按時間抽取的FFT算法一樣,按頻率抽取的FFT算法同樣可以使用原位運算.原位運算是指當數(shù)據(jù)輸入到存儲器中以后,每一級蝶形運算的結(jié)果仍然存儲在同一組存儲器中,直到最后輸出,中間無需設(shè)計其他的存儲器.原位運算只需要N個復(fù)數(shù)的存儲單元,不僅可用來存放輸入的原始數(shù)據(jù),還可存放中間數(shù)據(jù),另外,還可以存放最后的計算結(jié)果,大大節(jié)省了硬件資源.
3) 蝶形類型隨蝶形運算級數(shù)成倍減少
4)序列重排
按頻率抽取的FFT算法的輸入數(shù)據(jù)是按自然順序輸入的,但經(jīng)過各級蝶形運算單元的處理后,得到的輸出數(shù)據(jù)是以按位反轉(zhuǎn)的規(guī)律進行排列的,數(shù)據(jù)失去了原有的自然順序.因此,在FFT算法設(shè)計中,需在最后一級蝶形運算單元后加一個自然順序排序單元[7],進行數(shù)據(jù)的重排.
本文設(shè)計的FFT算法具有自適應(yīng)的特點,能夠根據(jù)實際樣點數(shù),通過蝶形運算單元的不同次數(shù)調(diào)用,實現(xiàn)P點(P=2Q,Q=3,4,5,…)的FFT算法處理.根據(jù)第1節(jié)所述,在本文所討論的接收機捕獲模塊中,考慮到接收機所接收信號主碼長的特點,故選擇使用基2-2048點的FFT設(shè)計.圖3為本文FFT算法設(shè)計框圖.
圖3 FFT算法設(shè)計框圖
由圖3可知,FFT算法中的第一個單元為數(shù)據(jù)緩存單元,其內(nèi)部包括兩個空間:讀空間與寫空間.當寫空間存儲將滿時,則會發(fā)出一個脈沖提示信號,控制中心接收到該信號后,就會將寫空間中的數(shù)據(jù)輸入到第一級蝶形運算單元中進行處理,同時,該寫空間變?yōu)樽x空間,另一個讀空間轉(zhuǎn)換為寫空間,繼續(xù)存儲輸入到FFT模塊中的數(shù)據(jù).通過讀、寫兩個空間的相互配合,使FFT運算既不會出現(xiàn)空閑,也不會出現(xiàn)堵塞,從而實現(xiàn)整個FFT模塊的流水線運算.
本文在蝶形運算單元的設(shè)計中加入了原位運算和截位運算設(shè)計,截位運算用于截取蝶形運算單元輸出端兩支路中的實部與虛部數(shù)據(jù)位的低位(具體截位位數(shù)根據(jù)樣點實際數(shù)值進行設(shè)置),相當于對數(shù)據(jù)數(shù)值整體做了一次除法,使得樣點整體數(shù)值降低,并且抑制了其中的噪聲或者干擾,從而在存儲空間上達到了一定的節(jié)約.由于捕獲模塊在IFFT處理后還會進行相干累加及非相干累加等運算,使信號能量得到積累,最后根據(jù)峰值是否超過閾值來判別是否捕獲成功,故截位運算不會影響最終的捕獲效果.
另外,本文將旋轉(zhuǎn)因子單獨存儲在一個存儲單元中,當需要使用時,直接調(diào)用該旋轉(zhuǎn)因子存儲單元即可,無需重復(fù)為其分配存儲空間.并且,當進行IFFT運算時,捕獲模塊可以直接使用該FFT算法,需要改變的僅是旋轉(zhuǎn)因子,從而大大提高了捕獲模塊的運算效率,同時也節(jié)約了硬件資源.
經(jīng)自然排序單元處理后的數(shù)據(jù)不是直接輸入到下一個模塊,而是存儲在存儲單元中,設(shè)置存儲單元的目的主要有兩個方面,一方面是實現(xiàn)FFT運算的流水線處理;另一個方面是與下一模塊實現(xiàn)時序匹配,存儲模塊須接收到捕獲模塊的控制單元發(fā)出信號輸出命令后,方可輸出數(shù)據(jù).
考慮到接收機捕獲模塊使用賽靈思(Xilinx)公司的FPGA芯片進行硬件實現(xiàn),故本文使用verilog語言通過Xilinx軟件平臺進行FFT算法設(shè)計,并使用其自帶的仿真工具進行FFT算法的仿真分析.
圖4為截位運算模塊的仿真圖,由圖可得,當輸入端輸入一個位寬為25位的正弦實部數(shù)據(jù)時(虛部為零),經(jīng)截位運算后,得到與輸入數(shù)據(jù)包絡(luò)一致的正弦數(shù)據(jù)(與輸入數(shù)據(jù)相比,僅延遲一個時鐘),但輸出數(shù)據(jù)的位寬僅為18位,從而減少了硬件資源的占用.
圖4 截位模塊仿真
圖5為蝶形運算單元的RTL圖,由圖可見,在輸出端的上、下兩個支路中,分別加入了截位運算模塊.序號1和2分別為上支路實部數(shù)據(jù)和虛部數(shù)據(jù)的截位運算模塊,序號3和4分別為下支路實部數(shù)據(jù)和虛部數(shù)據(jù)的截位運算模塊.
圖5 蝶形運算單元的RTL圖
圖6所示為正弦函數(shù)經(jīng)第一級蝶形運算單元處理后的仿真結(jié)果,經(jīng)分析得,上支路(oYnLeft)的實部虛部與下支路(oYnRight)的實部虛部仿真結(jié)果與理論結(jié)果一致.
圖6 第一級蝶形運算單元仿真結(jié)果
圖7為2048點FFT的RTL圖,存儲器中的樣點依次進行各級蝶形運算(圖中圓圈1中的模塊為各級蝶形運算單元,其中,第11級蝶形運算單元中不含旋轉(zhuǎn)因子),最后,通過自然排序單元(圓圈2處)對蝶形運算單元輸出的數(shù)據(jù)進行自然順序排序,完成FFT運算.
圖7 2048點FFT的RTL圖
圖8為2048點FFT的仿真圖,同步脈沖信號(oSynYnEp)為一個周期數(shù)據(jù)的起始標志信號.由圖可知,仿真結(jié)果符合正弦函數(shù)FFT變換后的特點.為進一步論證其正確性,將一個周期的仿真結(jié)果數(shù)據(jù)以文件的形式在MATLAB中打開,得到圖9,由圖9可知,仿真結(jié)果與理論結(jié)果一致,FFT仿真正確.
圖8 2048點FFT仿真結(jié)果
圖9 MATLAB仿真驗證
圖10為捕獲模塊中FFT到IFFT模塊之間的各模塊RTL圖.圖中的A為FFT模塊,該模塊負責完成樣點數(shù)據(jù)及本地偽碼數(shù)據(jù)的FFT運算.B為IFFT模塊,該模塊負責共軛相乘數(shù)據(jù)的IFFT運算.由于FFT算法中的旋轉(zhuǎn)因子是單獨存儲的,故IFFT模塊直接使用了FFT模塊,只把旋轉(zhuǎn)因子做改變即可.
圖10 FFT到IFFT之間模塊RTL圖
本文主要圍繞多模接收機捕獲模塊中FFT算法設(shè)計這一關(guān)鍵技術(shù)進行研究.結(jié)合接收機捕獲模塊的特點及所遇到的問題,本文提出一種改進方法.該方法優(yōu)化之處在于:1)根據(jù)捕獲模塊信號處理特點,在FFT設(shè)計中加入原位運算與截位運算單元,在保證捕獲性能的前提下,使得資源占用減少;2)FFT算法中加入數(shù)據(jù)緩存單元,該單元中包括數(shù)據(jù)讀與寫兩個部分,通過相互配合,使FFT運算實現(xiàn)流水線處理;3)FFT算法中設(shè)計單獨的旋轉(zhuǎn)因子存儲單元,便于FFT模塊的重復(fù)使用(更改旋轉(zhuǎn)因子,即可實現(xiàn)IFFT運算);4)FFT算法具有自適應(yīng)的特點,通過調(diào)用不同個數(shù)的蝶形運算單元以滿足不同應(yīng)用需求.本文完成了FFT算法的整體模塊設(shè)計,并借助仿真工具完成了對FFT算法的仿真、調(diào)試與分析.由仿真結(jié)果可知,本算法在處理速度、資源占用及兼容性方面得到了一定的改善.