本發(fā)明涉及GPS導(dǎo)航系統(tǒng),特別是涉及一種基于FPGA捕獲微弱GPS導(dǎo)航信號(hào)的電路及方法。
背景技術(shù):
近年來,GPS導(dǎo)航系統(tǒng)在世界范圍內(nèi)得到了廣泛的應(yīng)用,同時(shí)受到了國內(nèi)外科研人員的關(guān)注,其中信號(hào)捕獲為該領(lǐng)域的技術(shù)難點(diǎn)和核心部分。衛(wèi)星信號(hào)捕獲本質(zhì)上是將接收信號(hào)與本地復(fù)現(xiàn)的偽碼和載波進(jìn)行二維搜索計(jì)算相關(guān)值,從而找到初始碼相位和載頻。其中順序法捕獲法通過滑動(dòng)來計(jì)算出相關(guān)峰值,此方法實(shí)現(xiàn)簡(jiǎn)單,但是非常耗費(fèi)時(shí)間,不滿足實(shí)時(shí)性的要求?,F(xiàn)今捕獲方法大多采用并行法,但該方法耗費(fèi)更多硬件資源,實(shí)現(xiàn)較困難。在利用有限硬件資源的前提下開發(fā)出實(shí)時(shí)性好、精度高并且針對(duì)微弱信號(hào)具有較高捕獲靈敏度的接收機(jī)滿足社會(huì)生活各方面需求仍然是一項(xiàng)艱巨任務(wù)。
技術(shù)實(shí)現(xiàn)要素:
鑒于現(xiàn)有技術(shù)狀況,本發(fā)明提供一種基于FPGA捕獲微弱GPS導(dǎo)航信號(hào)的電路及方法。本設(shè)計(jì)的FPGA芯片采用Xilinx公司kintex_7系列的xc7k325t,封裝形式為FFG676。本設(shè)計(jì)能夠成功復(fù)現(xiàn)出本地C/A碼和頻率可控的正余弦載波信號(hào),通過基于累加點(diǎn)數(shù)存儲(chǔ)器的分段累加操作實(shí)現(xiàn)平均采樣,再通過幾個(gè)分時(shí)復(fù)用的數(shù)據(jù)暫存存儲(chǔ)器和FFT、IFFT模塊以及相應(yīng)的控制信號(hào)在節(jié)約硬件資源的情況下快速計(jì)算出相關(guān)結(jié)果,并通過8ms相關(guān)結(jié)果的非相干累加實(shí)現(xiàn)微弱信號(hào)的精確、成功捕獲。
本發(fā)明采取的技術(shù)方案是:一種基于FPGA捕獲微弱GPS導(dǎo)航信號(hào)的電路,其特征在于:包括時(shí)鐘發(fā)生模塊、時(shí)鐘分頻模塊、中頻數(shù)據(jù)接收控制模塊、中頻數(shù)據(jù)接收模塊、C/A碼發(fā)生模塊、載波生成與剝離模塊、C/A碼平均采樣模塊、C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊、同相正交平均采樣模塊、同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊、同相正交FFT模塊、C/A碼FFT模塊、復(fù)數(shù)乘法模塊、復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊、IFFT模塊、相關(guān)值存儲(chǔ)模塊以及峰值檢測(cè)模塊;其中時(shí)鐘發(fā)生模塊分別與時(shí)鐘分頻模塊、中頻數(shù)據(jù)接收控制模塊、載波生成與剝離模塊相連接,中頻數(shù)據(jù)接收控制模塊與中頻數(shù)據(jù)接收模塊相連接,中頻數(shù)據(jù)接收模塊與載波生成與剝離模塊相連接,載波生成與剝離模塊與同相正交平均采樣模塊相連接,同相正交平均采樣模塊與同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊相連接,同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊與同相正交FFT模塊相連接,時(shí)鐘分頻模塊與C/A碼發(fā)生模塊相連接,C/A碼發(fā)生模塊與C/A碼平均采樣模塊相連接,C/A碼平均采樣模塊與C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊相連接,C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊與C/A碼FFT模塊相連接,同相正交FFT模塊和C/A碼FFT模塊同時(shí)與復(fù)數(shù)乘法模塊相連接,復(fù)數(shù)乘法模塊與復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊相連接,復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊與IFFT模塊相連接,IFFT模塊與相關(guān)值存儲(chǔ)模塊相連接,相關(guān)值存儲(chǔ)模塊與峰值檢測(cè)模塊相連接。
本發(fā)明所述的一種基于FPGA捕獲微弱GPS導(dǎo)航信號(hào)的電路的實(shí)現(xiàn)方法,其特征在于:所述的時(shí)鐘發(fā)生模塊產(chǎn)生62MHZ和10.23MHZ的時(shí)鐘,其中62MHZ時(shí)鐘控制中頻數(shù)據(jù)采樣以及除C/A碼發(fā)生模塊外所有模塊的驅(qū)動(dòng),10.23MHZ時(shí)鐘通過時(shí)鐘分頻模塊十分頻后產(chǎn)生1.023MHZ的時(shí)鐘控制C/A碼發(fā)生模塊;中頻數(shù)據(jù)接收控制模塊通過外部控制信號(hào)和內(nèi)部計(jì)數(shù)控制信號(hào)的邏輯與運(yùn)算精確控制1ms中頻數(shù)據(jù)讀入,C/A碼發(fā)生模塊在1.023MHZ控制下產(chǎn)生C/A碼;載波生成與剝離模塊通過每一個(gè)時(shí)鐘沿將累加步長(zhǎng)寫入到32位的累加寄存器中,并根據(jù)累加寄存器高四位的數(shù)值對(duì)一個(gè)周期的載波相位進(jìn)行十六等分,再根據(jù)相位值到幅度值的映射以產(chǎn)生頻率可控的正余弦載波,并將其分別與中頻數(shù)據(jù)相乘產(chǎn)生同相和正交數(shù)據(jù);平均采樣模塊中內(nèi)置一個(gè)累加點(diǎn)數(shù)存儲(chǔ)器用于存儲(chǔ)每一個(gè)平均采樣數(shù)據(jù)需要的累加點(diǎn)數(shù);平均采樣模塊根據(jù)累加點(diǎn)數(shù)存儲(chǔ)器中的值將1ms的C/A碼和同相正交數(shù)據(jù)由62MHZ時(shí)鐘采樣后分段累加成2048個(gè)采樣點(diǎn)存入平均采樣數(shù)據(jù)存儲(chǔ)模塊,存滿后輸出一個(gè)高脈沖連接到FFT模塊的起始信號(hào)端口,并依據(jù)輸入索引讀取平均采樣數(shù)據(jù)存儲(chǔ)模塊中的數(shù)據(jù),當(dāng)FFT模塊的輸出數(shù)據(jù)有效時(shí),啟動(dòng)復(fù)數(shù)乘法模塊,將C/A碼變換結(jié)果取共軛后,與同相正交數(shù)據(jù)變換結(jié)果進(jìn)行復(fù)數(shù)相乘并存入復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊,存滿后啟動(dòng)IFFT模塊,并依次讀取復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊中的數(shù)據(jù),IFFT模塊的輸出數(shù)據(jù)即為相關(guān)值;將連續(xù)8ms相關(guān)結(jié)果進(jìn)行非相干累加后,存入相關(guān)值存儲(chǔ)模塊,最后啟動(dòng)相關(guān)峰值檢測(cè)模塊計(jì)算出主次峰值,并與設(shè)定門限進(jìn)行對(duì)比判定是否捕獲成功。
本發(fā)明的特點(diǎn)是:在中頻數(shù)據(jù)接收使能控制方面采取外部信號(hào)與內(nèi)部計(jì)數(shù)信號(hào)共同控制的方法,保證每次接收的中頻數(shù)據(jù)長(zhǎng)度剛好為1ms。在平均采樣過程中采用塊存儲(chǔ)器儲(chǔ)存累加點(diǎn)數(shù)的方法代替時(shí)鐘沿累加,既節(jié)省了FPGA內(nèi)寶貴的時(shí)鐘資源,又克服了時(shí)鐘沿累加法易產(chǎn)生時(shí)序問題的缺陷。在數(shù)據(jù)處理方面,F(xiàn)FT、IFFT模塊和各存儲(chǔ)器采用了分時(shí)復(fù)用的原則,節(jié)省了硬件資源,并且在輸出和儲(chǔ)存1ms處理結(jié)果的時(shí)候可以同時(shí)進(jìn)行下1ms輸入數(shù)據(jù)的計(jì)算和暫存,大大縮減了捕獲的時(shí)間。通過連續(xù)8ms信號(hào)相關(guān)結(jié)果的非相干累加檢測(cè)峰值,提升了信號(hào)捕獲靈敏度。實(shí)驗(yàn)測(cè)試表明,本設(shè)計(jì)的平均捕獲時(shí)間為110ms,精度為半個(gè)碼片,在節(jié)省硬件資源的前提下,能夠?qū)崿F(xiàn)微弱信號(hào)的快速、精確捕獲。
附圖說明
圖1為本發(fā)明的基本連接框圖;
圖2為本發(fā)明捕獲微弱GPS導(dǎo)航信號(hào)的基本流程圖;
圖3為圖1中的時(shí)鐘發(fā)生模塊引腳圖;
圖4為圖1中的時(shí)鐘分頻模塊引腳圖;
圖5為圖1中的中頻數(shù)據(jù)接收控制模塊引腳圖;
圖6為圖1中的中頻數(shù)據(jù)接收模塊引腳圖;
圖7為圖1中的C/A碼發(fā)生模塊引腳圖;
圖8為圖1中的載波發(fā)生與剝離模塊引腳圖;
圖9為圖1中的C/A碼平均采樣模塊引腳圖;
圖10為圖1中的同相正交平均采樣模塊引腳圖;
圖11為圖1中的C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊引腳圖;
圖12為圖1中的同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊引腳圖;
圖13為圖1中的C/A碼FFT模塊引腳圖;
圖14為圖1中的同相正交FFT模塊引腳圖;
圖15為圖1中的復(fù)數(shù)乘法模塊引腳圖;
圖16為圖1中的復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊引腳圖;
圖17為圖1中的IFFT模塊引腳圖;
圖18為圖1中的相關(guān)值存儲(chǔ)模塊引腳圖;
圖19為圖1中的峰值檢測(cè)模塊引腳圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說明:
如圖1所示,本設(shè)計(jì)包括時(shí)鐘發(fā)生模塊、時(shí)鐘分頻模塊、中頻數(shù)據(jù)接收控制模塊、中頻數(shù)據(jù)接收模塊、C/A碼發(fā)生模塊、載波生成與剝離模塊、C/A碼平均采樣模塊、C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊、同相正交平均采樣模塊、同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊、同相正交FFT(傅里葉變換)模塊、C/A碼FFT模塊、復(fù)數(shù)乘法模塊、復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊、IFFT(傅里葉反變換)模塊、相關(guān)值存儲(chǔ)模塊以及峰值檢測(cè)模塊;其中時(shí)鐘發(fā)生模塊分別與時(shí)鐘分頻模塊、中頻數(shù)據(jù)接收控制模塊、載波生成與剝離模塊相連接,中頻數(shù)據(jù)接收控制模塊與中頻數(shù)據(jù)接收模塊相連接,中頻數(shù)據(jù)接收模塊與載波生成與剝離模塊相連接,載波生成與剝離模塊與同相正交平均采樣模塊相連接,同相正交平均采樣模塊與同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊相連接,同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊與同相正交FFT模塊相連接,時(shí)鐘分頻模塊與C/A碼發(fā)生模塊相連接,C/A碼發(fā)生模塊與C/A碼平均采樣模塊相連接,C/A碼平均采樣模塊與C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊相連接,C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊與C/A碼FFT模塊相連接,同相正交FFT模塊和C/A碼FFT模塊同時(shí)與復(fù)數(shù)乘法模塊相連接,復(fù)數(shù)乘法模塊與復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊相連接,復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊與IFFT模塊相連接,IFFT模塊與相關(guān)值存儲(chǔ)模塊相連接,相關(guān)值存儲(chǔ)模塊與峰值檢測(cè)模塊相連接。
如圖2所示,時(shí)鐘發(fā)生模塊產(chǎn)生62MHZ和10.23MHZ的時(shí)鐘,其中62MHZ時(shí)鐘控制中頻數(shù)據(jù)采樣以及除C/A碼發(fā)生模塊外所有模塊的驅(qū)動(dòng),10.23MHZ時(shí)鐘通過時(shí)鐘分頻模塊十分頻后產(chǎn)生1.023MHZ的時(shí)鐘控制C/A碼發(fā)生模塊;中頻數(shù)據(jù)接收控制模塊通過外部控制信號(hào)和內(nèi)部計(jì)數(shù)控制信號(hào)的邏輯與運(yùn)算精確控制1ms中頻數(shù)據(jù)讀入,C/A碼發(fā)生模塊在1.023MHZ控制下產(chǎn)生C/A碼;載波生成與剝離模塊通過每一個(gè)時(shí)鐘沿將累加步長(zhǎng)寫入到32位的累加寄存器中,并根據(jù)累加寄存器高四位的數(shù)值對(duì)一個(gè)周期的載波相位進(jìn)行十六等分,再根據(jù)相位值到幅度值的映射以產(chǎn)生頻率可控的正余弦載波,并將其分別與中頻數(shù)據(jù)相乘產(chǎn)生同相和正交數(shù)據(jù);平均采樣模塊中內(nèi)置一個(gè)累加點(diǎn)數(shù)存儲(chǔ)器用于存儲(chǔ)每一個(gè)平均采樣數(shù)據(jù)需要的累加點(diǎn)數(shù);平均采樣模塊根據(jù)累加點(diǎn)數(shù)存儲(chǔ)器中的值將1ms的C/A碼和同相正交數(shù)據(jù)由62MHZ時(shí)鐘采樣后分段累加成2048個(gè)采樣點(diǎn)存入平均采樣數(shù)據(jù)存儲(chǔ)模塊,存滿后輸出一個(gè)高脈沖連接到FFT模塊的起始信號(hào)端口,并依據(jù)輸入索引讀取平均采樣數(shù)據(jù)存儲(chǔ)模塊中的數(shù)據(jù),當(dāng)FFT模塊的輸出數(shù)據(jù)有效時(shí),啟動(dòng)復(fù)數(shù)乘法模塊,將C/A碼變換結(jié)果取共軛后,與同相正交數(shù)據(jù)變換結(jié)果進(jìn)行復(fù)數(shù)相乘并存入復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊,存滿后啟動(dòng)IFFT模塊,并依次讀取復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊中的數(shù)據(jù),IFFT模塊的輸出數(shù)據(jù)即為相關(guān)值;將連續(xù)8ms相關(guān)結(jié)果進(jìn)行非相干累加后,存入相關(guān)值存儲(chǔ)模塊,最后啟動(dòng)相關(guān)峰值檢測(cè)模塊計(jì)算出主次峰值,并與設(shè)定門限進(jìn)行對(duì)比判定是否捕獲成功。
如圖3所示,時(shí)鐘發(fā)生模塊通過IP核實(shí)現(xiàn),輸出信號(hào)CLK_OUT1和CLK_OUT2分別為62MHZ和10.23MHZ的輸出時(shí)鐘。時(shí)鐘發(fā)生模塊的LOCKED為鎖定信號(hào),當(dāng)輸出時(shí)鐘穩(wěn)定時(shí),該端口持續(xù)輸出高電平。
如圖4所示,時(shí)鐘分頻模塊用于對(duì)10.23MHZ的時(shí)鐘進(jìn)行十分頻產(chǎn)生穩(wěn)定的1.023MHZ的時(shí)鐘,用于驅(qū)動(dòng)C/A碼。時(shí)鐘分頻模塊的clk_in端口為輸入時(shí)鐘,連接10.23MHZ時(shí)鐘,模塊內(nèi)置計(jì)數(shù)器,當(dāng)計(jì)數(shù)到5時(shí),計(jì)數(shù)器清零,并使輸出時(shí)鐘翻轉(zhuǎn)。時(shí)鐘分頻模塊的re_clk_div端口為復(fù)位信號(hào),此信號(hào)為高電平時(shí)輸出時(shí)鐘復(fù)位到0,并且計(jì)數(shù)器清零。時(shí)鐘分頻模塊的clk_div_en端口為分頻使能信號(hào),連接時(shí)鐘發(fā)生模塊的LOCKED端口,當(dāng)時(shí)鐘發(fā)生模塊產(chǎn)生穩(wěn)定時(shí)鐘時(shí),時(shí)鐘分頻模塊開始有效,時(shí)鐘分頻模塊的clk_out輸出端口為穩(wěn)定的1.023MHZ時(shí)鐘。
如圖5所示,中頻數(shù)據(jù)接收控制模塊通過外部控制信號(hào)和內(nèi)部計(jì)數(shù)控制信號(hào)的與運(yùn)算控制中頻數(shù)據(jù)的接收,clk62M輸入端口連接62MHZ的時(shí)鐘。rec_en端口為外部控制信號(hào),當(dāng)C/A碼開始有效時(shí)置為高電平。內(nèi)部計(jì)數(shù)控制信號(hào)為寄存器型,初始值為1。模塊內(nèi)置初值為0的計(jì)數(shù)器,當(dāng)中頻數(shù)據(jù)接收控制模塊的rec_en端口為高電平時(shí),此時(shí)兩個(gè)控制信號(hào)的與運(yùn)算即IF_en信號(hào)為高電平,此時(shí)開始接收中頻數(shù)據(jù),并且計(jì)數(shù)器在輸入時(shí)鐘控制下遞增,當(dāng)計(jì)數(shù)器計(jì)滿62000個(gè)數(shù)即1ms中頻數(shù)據(jù)時(shí),內(nèi)部計(jì)數(shù)控制信號(hào)置0,此時(shí)IF_en信號(hào)為低電平,停止數(shù)據(jù)接收。中頻數(shù)據(jù)接收控制模塊的rst_IF_rec端口為復(fù)位信號(hào),當(dāng)此信號(hào)為高電平時(shí),內(nèi)部計(jì)數(shù)控制信號(hào)恢復(fù)到低電平,且計(jì)數(shù)器清零。
如圖6所示,中頻數(shù)據(jù)接收模塊的clk_IF端口為62MHZ輸入時(shí)鐘。中頻數(shù)據(jù)接收模塊的IF_en端口為接收有效信號(hào),當(dāng)此信號(hào)為高電平時(shí),在輸入時(shí)鐘控制下產(chǎn)生數(shù)字10位數(shù)字中頻數(shù)據(jù)IF_data。
如圖7所示,C/A碼發(fā)生模塊的clk_1023端口為時(shí)鐘驅(qū)動(dòng)信號(hào),連接1.023MHZ時(shí)鐘。Sel端口為衛(wèi)星號(hào)選擇端口。C/A碼發(fā)生模塊的ca_en端口為使能信號(hào),連接到時(shí)鐘發(fā)生模塊的LOCKED端口,當(dāng)此信號(hào)為高電平時(shí),模塊內(nèi)的兩個(gè)十位移位寄存器開始進(jìn)行移位,并按照衛(wèi)星號(hào)確定時(shí)延進(jìn)行輸出結(jié)果的異或運(yùn)算產(chǎn)生特定的C/A碼,C/A碼發(fā)生模塊的gold_out端口為產(chǎn)生的C/A碼,C/A碼發(fā)生模塊的ca_start端口為C/A碼有效信號(hào),初值為0,在C/A碼發(fā)生模塊的ca_en端口為高電平之后的第一個(gè)有效時(shí)鐘沿置1,此時(shí)C/A碼開始有效輸出,此信號(hào)連接到中頻數(shù)據(jù)接收控制模塊的rec_en端口。C/A碼發(fā)生模塊的ca_rst端口為復(fù)位信號(hào),C/A碼發(fā)生模塊的ca_rec_rst端口為反饋復(fù)位信號(hào),當(dāng)這兩個(gè)信號(hào)其中之一出現(xiàn)高電平時(shí),將移位寄存器初始化。
如圖8所示,載波生成和剝離模塊的carr_enable端口為使能信號(hào),該端口連接C/A碼發(fā)生模塊的ca_start端口,此信號(hào)有效時(shí),在輸入的62MHZ時(shí)鐘控制下,32位累加寄存器對(duì)頻率控制字進(jìn)行線性累加,再通過累加寄存器的高四位映射出特定幅度的正余弦值。載波的頻率計(jì)算方法如下所示:
其中fclk為62MHZ的輸入時(shí)鐘,incr為控制步長(zhǎng),f為載波頻率。中頻頻率為46.42MHZ,對(duì)應(yīng)的步長(zhǎng)為3215683579,每次多普勒搜索的步長(zhǎng)為500HZ,對(duì)應(yīng)的控制字?jǐn)?shù)值變化為34637。通過此方法復(fù)現(xiàn)出46.42MHZ(中頻頻率)加上-5000HZ至+5000HZ多普勒頻移的正余弦載波,并與中頻數(shù)據(jù)分別相乘產(chǎn)生同相、正交兩路數(shù)據(jù)。載波生成和剝離模塊的carr_rst端口為復(fù)位信號(hào),此信號(hào)為高電平時(shí),累加寄存器清零。載波生成和剝離模塊的carr_change端口為反饋信號(hào),此信號(hào)有效時(shí),將累加寄存器清零,并將頻率控制字改變34637以搜索下一個(gè)多普勒頻率。載波生成和剝離模塊的I、Q端口分別為剝離載波后的同相、正交數(shù)據(jù),載波發(fā)生與剝離模塊的incr_out端口為此時(shí)的步進(jìn)值。
如圖9、圖10所示,C/A碼平均采樣模塊通過分段累加用于對(duì)1ms的C/A碼和同相正交數(shù)據(jù)下采樣成2048點(diǎn)。通過計(jì)算得出1488個(gè)平均采樣數(shù)據(jù),采用30點(diǎn)累加,560個(gè)平均采樣數(shù)據(jù)采用31點(diǎn)累加,再算出每一個(gè)平均采樣數(shù)據(jù)需要的累加點(diǎn)數(shù),存儲(chǔ)在深度為2048的累加點(diǎn)數(shù)存儲(chǔ)器中,計(jì)算方法如下:
average=62000/2048=30.27342375 (2)
accu_ram(i)=round(average*i)-round(average*(i-1)) (3)
其中accu_ram(i)表示第i個(gè)平均采樣數(shù)據(jù)的累加點(diǎn)數(shù),即累加點(diǎn)數(shù)存儲(chǔ)器第i個(gè)地址的值,round表示最接近的整數(shù)。C/A碼平均采樣模塊的ca_aver_en端口和同相正交平均采樣模塊的IQ_aver_en端口為使能信號(hào),連接到C/A碼發(fā)生模塊的ca_start端口,此信號(hào)有效時(shí),在輸入的62MHZ時(shí)鐘驅(qū)動(dòng)下,依據(jù)累加點(diǎn)數(shù)存儲(chǔ)器的值對(duì)偽碼和同相正交數(shù)據(jù)進(jìn)行累加,當(dāng)累加完與累加點(diǎn)數(shù)存儲(chǔ)器的值個(gè)數(shù)相等數(shù)據(jù)后將地址值加一,與此同時(shí),將C/A碼平均采樣模塊的存儲(chǔ)使能信號(hào)ca_ram_en和同相正交平均采樣模塊的IQ_ram_en端口置為高電平,并且C/A碼平均采樣模塊和同相正交平均采樣模塊分別輸出累加值aver_ca、aver_I和aver_Q。C/A碼平均采樣模塊的rst_ca_aver端口和同相正交平均采樣模塊的rst_IQ_aver端口為復(fù)位信號(hào),當(dāng)此信號(hào)為高電平時(shí),將地址值重新置零。
如圖11、圖12所示,C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊和同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊分別在存儲(chǔ)使能信號(hào)ca_ram_en和IQ_ram_en為高電平期間將平均采樣值aver_ca和aver_I、aver_Q讀入內(nèi)置的2048深度存儲(chǔ)器,同時(shí)每存儲(chǔ)一次數(shù)據(jù)計(jì)數(shù)器的值加一,當(dāng)存滿2048個(gè)數(shù)據(jù)時(shí),C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊和同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊分別將指示信號(hào)ca_ram_flag和IQ_ram_flag輸出一個(gè)高脈沖,開始啟動(dòng)FFT變換,同時(shí)將計(jì)數(shù)器置0,C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊的ca_rfd和同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊的IQ_rfd為讀使能信號(hào),此信號(hào)為高電平期間依據(jù)讀地址索引值ca_xn_index和IQ_xn_index依次讀取存儲(chǔ)器中的數(shù)據(jù),并分別輸出到ca_out端口、I_out端口、Q_out端口。
如圖13、圖14所示,F(xiàn)FT模塊采用IP核實(shí)現(xiàn),為了節(jié)省硬件資源,實(shí)現(xiàn)結(jié)構(gòu)為Radix-2Burst I/O,變換點(diǎn)數(shù)為2048。C/A碼FFT模塊的啟動(dòng)信號(hào)ca_start連接C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊的ca_ram_flag端口,同相正交FFT模塊的啟動(dòng)信號(hào)IQ_start連接同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊的IQ_ram_flag端口。C/A碼FFT模塊的ca_rfd端口和同相正交FFT模塊的IQ_rfd端口為讀使能信號(hào),分別連接C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊和同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊的ca_rfd端口和IQ_rfd端口,當(dāng)C/A碼FFT模塊和同相正交FFT模塊開始接收數(shù)據(jù)時(shí),ca_rfd端口和IQ_rfd端口持續(xù)輸出高電平,此時(shí)依照C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊和同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊的索引值ca_xn_index和IQ_xn_index讀取存儲(chǔ)器中的數(shù)據(jù)。C/A碼FFT模塊和同相正交FFT模塊的ca_fwd_inv和IQ_fwd_inv信號(hào)為控制信號(hào),當(dāng)進(jìn)行FFT變換時(shí),這兩個(gè)信號(hào)置為高電平,C/A碼FFT模塊的ca_fwd_inv_en端口和同相正交FFT模塊的IQ_fwd_inv_en端口為ca_fwd_inv端口和IQ_fwd_inv端口的寫使能信號(hào),全部置為高電平。C/A碼FFT模塊的ca_unload端口和同相正交FFT模塊的IQ_unload端口為輸出結(jié)果信號(hào),置為高電平。C/A碼FFT模塊和同相正交FFT模塊的clk時(shí)鐘信號(hào)連接62MHZ時(shí)鐘,C/A碼FFT模塊輸入數(shù)據(jù)的實(shí)部ca_xn_re信號(hào)連接C/A碼平均采樣數(shù)據(jù)存儲(chǔ)模塊的ca_out端口,C/A碼FFT模塊輸入數(shù)據(jù)的虛部ca_xn_im置為低電平。同相正交FFT模塊輸入數(shù)據(jù)實(shí)部IQ_xn_re和虛部IQ_xn_im分別連接同相正交平均采樣數(shù)據(jù)存儲(chǔ)模塊的I_out端口和Q_out端口,C/A碼FFT模塊和同相正交FFT模塊的完成信號(hào)ca_done和IQ_done進(jìn)行與運(yùn)算后連接到中頻數(shù)據(jù)接收控制模塊、C/A碼發(fā)生模塊、載波生成與剝離模塊、C/A碼平均采樣模塊、同相正交平均采樣模塊的反饋復(fù)位信號(hào)rst_IF_rec、ca_rst、carr_rst、rst_ca_aver和rst_IQ_aver,開始處理下1ms中頻數(shù)據(jù)。C/A碼FFT模塊和同相正交FFT模塊的輸出結(jié)果有效信號(hào)ca_dv和IQ_dv為高電平期間開始輸出變換結(jié)果,C/A碼FFT模塊變換結(jié)果的實(shí)部和虛部為ca_xk_re、ca_xk_im,同相正交FFT模塊變換結(jié)果的實(shí)部和虛部為IQ_xk_re和IQ_xk_im。
FFT變換之后需要對(duì)C/A碼變換結(jié)果的共軛和同相正交變換結(jié)果進(jìn)行復(fù)數(shù)乘法。計(jì)算方法如公式(4)和(5)所示:
qr=ar×(br+bi)+br×(ai-ar) (4)
qi=ar×(br+bi)-bi×(ai+ar) (5)
其中ar、br、ai、bi分別表示兩個(gè)乘數(shù)的實(shí)部和虛部,qr和qi表示復(fù)數(shù)乘法結(jié)果的實(shí)部和虛部。
如圖15所示,C/A碼FFT模塊的ca_xk_im端口取反后連接到復(fù)數(shù)乘法模塊ai端口,復(fù)數(shù)乘法模塊ar端口連接C/A碼FFT模塊的ca_xk_re端口。復(fù)數(shù)乘法模塊的bi和br端口分別連接到同相正交FFT模塊的IQ_xk_im和IQ_xk_re端口。復(fù)數(shù)乘法模塊的clk62M端口連接62MHZ時(shí)鐘,端口ca_dv和IQ_dv都為高電平時(shí)在輸入時(shí)鐘控制下接收FFT變換結(jié)果進(jìn)行復(fù)數(shù)乘法運(yùn)算,同時(shí)將計(jì)算結(jié)果的實(shí)部qr和虛部qi輸出,并暫存到復(fù)數(shù)乘法結(jié)果存儲(chǔ)器當(dāng)中,在此期間,復(fù)數(shù)乘法模塊的輸出指示信號(hào)en_ifft_ram置為高電平。
如圖16所示,復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊在en_ifft_ram端口為高電平期間,在62MHZ時(shí)鐘驅(qū)動(dòng)下,將復(fù)數(shù)乘法結(jié)果qi和qr存儲(chǔ)到2048位存儲(chǔ)器中。存滿后將輸出指示信號(hào)ifft_flag輸出一個(gè)高脈沖,并連接到傅里葉反變換(IFFT)模塊的起始信號(hào)start端口,復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊的ifft_rfd端口連接到IFFT模塊的準(zhǔn)備好接收數(shù)據(jù)rfd端口,復(fù)數(shù)乘法結(jié)果存儲(chǔ)模塊的ifft_xn_index端口連接到IFFT模塊的數(shù)據(jù)輸入索引值。在ifft_rfd端口為高電平期間,依據(jù)ifft_xn_index端口將存儲(chǔ)的數(shù)據(jù)通過ifft_re端口和ifft_im端口依次傳送到IFFT模塊數(shù)據(jù)輸入端口xn_re和xn_im,開始進(jìn)行傅里葉反變換。
如圖17所示,IFFT模塊和FFT模塊一樣采樣IP核。IFFT模塊的fwd_inv信號(hào)置為低電平,表示此時(shí)進(jìn)行傅里葉反變換。fwd_inv_en(fwd_inv寫使能信號(hào))和un_load(輸出結(jié)果信號(hào))信號(hào)置為高電平,輸入數(shù)據(jù)xn_re端口和xn_im端口連接到復(fù)數(shù)乘法數(shù)據(jù)存儲(chǔ)模塊的ifft_re端口和ifft_im端口,IFFT變換結(jié)果的實(shí)部和虛部為ifft_xk_re和ifft_xk_im,在計(jì)算結(jié)果穩(wěn)定輸出期間將IFFT變換結(jié)果的實(shí)部和虛部ifft_xk_re和ifft_xk_im存入相關(guān)值存儲(chǔ)模塊。
如圖18所示,相關(guān)值存儲(chǔ)模塊的ifft_dv端口連接IFFT模塊的輸出數(shù)據(jù)有效指示信號(hào)(dv),此信號(hào)為高電平時(shí),將IFFT變換結(jié)果實(shí)部(ifft_xk_re)和虛部(ifft_xk_im)進(jìn)行平方和后,依次存入存儲(chǔ)器中,此結(jié)果為相關(guān)值。為了成功捕獲微弱信號(hào)并克服噪聲帶來的影響,將連續(xù)8ms的結(jié)果進(jìn)行累加之后把輸出信號(hào)edge_ram_flag置為高電平,同時(shí)將累加結(jié)果acq_res依次輸出,當(dāng)2048個(gè)結(jié)果全部輸出完畢之后,將輸出信號(hào)edge_ram_flag恢復(fù)到初始的低電平狀態(tài)。
如圖19所示,峰值檢測(cè)檢測(cè)模塊的test_en端口為使能信號(hào),連接相關(guān)值存儲(chǔ)模塊的edge_ram_flag端口。在此信號(hào)為高電平期間,輸入acq_res端口,并在62MHZ時(shí)鐘驅(qū)動(dòng)下記錄主峰值和次峰值和主峰值出現(xiàn)的碼相位,如果主次峰值比大于一定閾值并且主峰值大于設(shè)定門限時(shí),捕獲成功,此時(shí)將峰值檢測(cè)檢測(cè)模塊的acq_flag端口置為高電平,同時(shí)輸出多普勒(acq_incr)和碼相位(acq_codePhase),否則將輸出結(jié)果carr_change賦予一個(gè)高脈沖信號(hào),把此端口連接到中頻數(shù)據(jù)接收控制模塊、C/A碼發(fā)生模塊、載波生成與剝離模塊和平均采樣模塊的rst_IF_rec、ca_rst、carr_change、rst_ca_aver和rst_IQ_aver端口,修改步進(jìn)值,將頻率移動(dòng)至下一個(gè)多普勒,同時(shí)將載波和C/A碼復(fù)位進(jìn)行下一個(gè)多普勒頻槽的搜索,直至搜索出滿足條件的結(jié)果。