張道成
(91404部隊(duì) 秦皇島 066200)
從20世紀(jì)中葉開(kāi)始,隨著超大規(guī)模數(shù)字集成電路的發(fā)展和計(jì)算機(jī)技術(shù)的廣泛應(yīng)有,數(shù)字信號(hào)處理越來(lái)越多的被應(yīng)用到了現(xiàn)代工業(yè)體系中[1],如通信、雷達(dá)等領(lǐng)域,尤其是在航天領(lǐng)域,導(dǎo)航衛(wèi)星接收信號(hào)的實(shí)時(shí)處理[2~7],不僅需要簡(jiǎn)單的實(shí)時(shí)處理,更加需要高速實(shí)時(shí)處理。
目前,市場(chǎng)上主要是三種信號(hào)處理器[8],DSP、ARM、FPGA,而FPGA主要存在功耗低、設(shè)計(jì)靈活并且工作頻率高的優(yōu)點(diǎn),相比較而言,開(kāi)發(fā)起來(lái)更加簡(jiǎn)單,而且穩(wěn)定性高,可以很好地滿足導(dǎo)航衛(wèi)星信號(hào)實(shí)施處理高速、高時(shí)效性及大數(shù)據(jù)的要求[9],故本文主要采取FPGA進(jìn)行研究。
FPGA的開(kāi)發(fā),主要是使用電子設(shè)計(jì)軟件和編程工具對(duì)芯片進(jìn)行設(shè)計(jì)實(shí)現(xiàn)的過(guò)程,根據(jù)實(shí)際需求和經(jīng)驗(yàn),本文進(jìn)行了以下的設(shè)計(jì)實(shí)現(xiàn)的過(guò)程。
FPGA實(shí)現(xiàn)與驗(yàn)證的主要設(shè)計(jì)流程如下[10]:1)編寫(xiě)VHDL代碼,遵照至頂向下的原則,按照Matlab定點(diǎn)仿真的思路編寫(xiě)。
2)編好代碼后,用Modelsim仿真,來(lái)驗(yàn)證程序流程是否正確,時(shí)序是否與設(shè)計(jì)時(shí)一致,基本功能是否實(shí)現(xiàn)。
3)把FPGA計(jì)算出的數(shù)據(jù)導(dǎo)出,與Matlab計(jì)算結(jié)果進(jìn)行比較;需要注意的是,F(xiàn)PGA與Matlab輸入的數(shù)據(jù)要完全一致,Matlab中的運(yùn)算要用定點(diǎn),保證與FPGA中的運(yùn)算完全一致。如果不一致,將返回代碼,查找原因。
4)FPGA與Matlab計(jì)算的結(jié)果一致后,將程序燒到板卡上,實(shí)際測(cè)試;在實(shí)際運(yùn)行中,用Chipscope觀察實(shí)際運(yùn)行的結(jié)果,并與Matlab仿真的結(jié)果進(jìn)行比較。如果要與Matlab程序進(jìn)行比對(duì),就要保證兩者的輸入一致,這就要求FPGA程序在實(shí)際運(yùn)行時(shí)要收集一段數(shù)據(jù),作為Matlab數(shù)據(jù)源,然后比對(duì)結(jié)果。
5)總結(jié)測(cè)試結(jié)果,做出最后結(jié)論。具體算法如圖1。

圖1 FPGA實(shí)現(xiàn)與驗(yàn)證算法
根據(jù)導(dǎo)航接收機(jī)抗干擾的不同的算法類型[11],本文的濾波器采用時(shí)域NLMS算法[12],需要根據(jù)干擾的變化,及時(shí)更新系數(shù)。但每進(jìn)一個(gè)數(shù)據(jù)都更新一次系數(shù)的計(jì)算量太大,而且干擾不可能變化那么快,所以要找到一個(gè)合適的時(shí)間間隔來(lái)更新系數(shù)。初步用接收機(jī)給出的10ms中斷作為標(biāo)志位來(lái)對(duì)系數(shù)更新。由于抗干擾后的數(shù)據(jù)要進(jìn)入接收機(jī)用于定位,所以出來(lái)的數(shù)據(jù)要保證連續(xù)性,如果有延時(shí)需要保證每個(gè)數(shù)據(jù)延時(shí)的一樣。具體方法如圖2:

圖2 系數(shù)更新示意圖
接收機(jī)發(fā)出10ms中斷,fifo開(kāi)始接收用于更新系數(shù)的信號(hào)源,接收完成后,開(kāi)關(guān)閉合,停止接收;當(dāng)系數(shù)完全更新后一次性送到抗干擾算法模塊,抗干擾模塊將用新系數(shù)來(lái)對(duì)信號(hào)源消除干擾。

圖3 Modelsim仿真系數(shù)更新
在Matlab中計(jì)算出的濾波器系數(shù)都是小于1的小數(shù),如果直接取整就會(huì)造成系數(shù)全是0或1的結(jié)果,濾波器將會(huì)失去作用。所以在這里考慮首先將濾波系數(shù)擴(kuò)大,然后取整計(jì)算,最后在輸出結(jié)果縮小相應(yīng)的倍數(shù)。
根據(jù)算法定義,

FPGA中規(guī)定一個(gè)乘法器是18*18,如果數(shù)據(jù)位數(shù)超出18位,一次乘法就需要使用兩個(gè)乘法器。從式(2)中可以看出,將步長(zhǎng)擴(kuò)大128倍,實(shí)際上也是將系數(shù)h(k)擴(kuò)大128倍,為了節(jié)省乘法器,就將系數(shù)的擴(kuò)大倍數(shù)定位1024倍。這樣系數(shù)的位數(shù)就是1024*128位,輸入數(shù)據(jù)也將擴(kuò)大1024*128位,最后在濾波器輸出結(jié)果上將數(shù)據(jù)縮小1024*128倍,數(shù)據(jù)仍然是8bit。程序設(shè)計(jì)基本流程如圖4所示。

圖4 抗干擾計(jì)算流程
驗(yàn)證FPGA程序功能是否正確,主要分為兩個(gè)部分,一是Modelsim仿真結(jié)果與Matlab仿真結(jié)果比對(duì);二是Chipscope實(shí)時(shí)觀測(cè)濾波器系數(shù)計(jì)算是否正確。這兩項(xiàng)都正確后說(shuō)明FPGA程序能夠正常實(shí)現(xiàn)抗干擾功能。
將FPGA程序完全按照Matlab仿真程序編寫(xiě),如果FPGA程序編寫(xiě)正確,那么FPGA程序應(yīng)與Matlab程序輸出結(jié)果一致。將輸入源設(shè)為相同,觀測(cè)FPGA仿真結(jié)果,并與Matlab結(jié)果比對(duì)。由圖6所示,F(xiàn)PGA計(jì)算濾波器系數(shù)結(jié)果與Matlab計(jì)算結(jié)果完全一致。

圖5 FPGA計(jì)算系數(shù)(左)Matlab計(jì)算系數(shù)(右)

圖6 FPGA計(jì)算結(jié)果與Matlab計(jì)算結(jié)果比對(duì)
將程序下載到板卡上,Chipscope捕捉FPGA中計(jì)算出的系數(shù)、輸入中頻數(shù)據(jù)以及濾波器的輸出結(jié)果。在Matlab中進(jìn)行數(shù)據(jù)轉(zhuǎn)換,可以看到濾波器的頻率響應(yīng)及抗干擾效果。具體見(jiàn)圖7、圖8。
1)導(dǎo)航信號(hào):由導(dǎo)航模擬源產(chǎn)生模擬信號(hào),可根據(jù)需要調(diào)整信號(hào)功率;

圖7 FPGA計(jì)算的濾波器頻率響應(yīng)

圖8 FPGA抗干擾前后信號(hào)頻譜對(duì)比
2)干擾信號(hào):干擾由4438C模擬信號(hào)源產(chǎn)生。

表1 單載波干擾測(cè)試結(jié)果
從表1中可以看出,對(duì)于單載波干擾,大約可以抵抗干信比54dB的干擾,干擾頻率在中心頻點(diǎn)±100KHz與±1MHz的差別并不是很大,并沒(méi)有因?yàn)榭拷行念l點(diǎn)性能會(huì)變差,這也是插值濾波器的特點(diǎn)。
1)實(shí)際AD量化位數(shù)減少,見(jiàn)圖9。

圖9 FPGA采集信號(hào)幅度
由于AGC的作用,干擾增大會(huì)導(dǎo)致壓縮信號(hào)幅度,當(dāng)干擾達(dá)到一定功率時(shí),信號(hào)將被完全壓制。所以當(dāng)量化位數(shù)少時(shí),所能容納的干擾功率也就隨之減小。
2)實(shí)際干擾與理想干擾差別,見(jiàn)圖10。

圖10 實(shí)采干擾信號(hào)頻譜
由于硬件原因,在中頻輸出端干擾會(huì)出現(xiàn)二次諧波。當(dāng)干擾為-70dBm時(shí),由圖10所示,橢圓圈區(qū)域?yàn)槎沃C波,這會(huì)造成載噪比的損失。
隨著信號(hào)處理器的不斷發(fā)展,利用FPGA實(shí)現(xiàn)信號(hào)的高速、髙時(shí)效處理,已經(jīng)成為一種趨勢(shì),本文在導(dǎo)航接收機(jī)抗干擾時(shí)域?yàn)V波的基礎(chǔ)上,編寫(xiě)FPGA程序,并在Modelsim中仿真,與Matlab定點(diǎn)仿真程序進(jìn)行比較,確定FPGA程序輸出與Maltab程序輸出完全一致,保證FPGA程序功能正確;并在接收機(jī)中實(shí)際調(diào)試,驗(yàn)證FPGA程序。