張道成
(91404部隊 秦皇島 066200)
從20世紀中葉開始,隨著超大規(guī)模數(shù)字集成電路的發(fā)展和計算機技術(shù)的廣泛應有,數(shù)字信號處理越來越多的被應用到了現(xiàn)代工業(yè)體系中[1],如通信、雷達等領(lǐng)域,尤其是在航天領(lǐng)域,導航衛(wèi)星接收信號的實時處理[2~7],不僅需要簡單的實時處理,更加需要高速實時處理。
目前,市場上主要是三種信號處理器[8],DSP、ARM、FPGA,而FPGA主要存在功耗低、設計靈活并且工作頻率高的優(yōu)點,相比較而言,開發(fā)起來更加簡單,而且穩(wěn)定性高,可以很好地滿足導航衛(wèi)星信號實施處理高速、高時效性及大數(shù)據(jù)的要求[9],故本文主要采取FPGA進行研究。
FPGA的開發(fā),主要是使用電子設計軟件和編程工具對芯片進行設計實現(xiàn)的過程,根據(jù)實際需求和經(jīng)驗,本文進行了以下的設計實現(xiàn)的過程。
FPGA實現(xiàn)與驗證的主要設計流程如下[10]:1)編寫VHDL代碼,遵照至頂向下的原則,按照Matlab定點仿真的思路編寫。
2)編好代碼后,用Modelsim仿真,來驗證程序流程是否正確,時序是否與設計時一致,基本功能是否實現(xiàn)。
3)把FPGA計算出的數(shù)據(jù)導出,與Matlab計算結(jié)果進行比較;需要注意的是,F(xiàn)PGA與Matlab輸入的數(shù)據(jù)要完全一致,Matlab中的運算要用定點,保證與FPGA中的運算完全一致。如果不一致,將返回代碼,查找原因。
4)FPGA與Matlab計算的結(jié)果一致后,將程序燒到板卡上,實際測試;在實際運行中,用Chipscope觀察實際運行的結(jié)果,并與Matlab仿真的結(jié)果進行比較。如果要與Matlab程序進行比對,就要保證兩者的輸入一致,這就要求FPGA程序在實際運行時要收集一段數(shù)據(jù),作為Matlab數(shù)據(jù)源,然后比對結(jié)果。
5)總結(jié)測試結(jié)果,做出最后結(jié)論。具體算法如圖1。
圖1 FPGA實現(xiàn)與驗證算法
根據(jù)導航接收機抗干擾的不同的算法類型[11],本文的濾波器采用時域NLMS算法[12],需要根據(jù)干擾的變化,及時更新系數(shù)。但每進一個數(shù)據(jù)都更新一次系數(shù)的計算量太大,而且干擾不可能變化那么快,所以要找到一個合適的時間間隔來更新系數(shù)。初步用接收機給出的10ms中斷作為標志位來對系數(shù)更新。由于抗干擾后的數(shù)據(jù)要進入接收機用于定位,所以出來的數(shù)據(jù)要保證連續(xù)性,如果有延時需要保證每個數(shù)據(jù)延時的一樣。具體方法如圖2:
圖2 系數(shù)更新示意圖
接收機發(fā)出10ms中斷,fifo開始接收用于更新系數(shù)的信號源,接收完成后,開關(guān)閉合,停止接收;當系數(shù)完全更新后一次性送到抗干擾算法模塊,抗干擾模塊將用新系數(shù)來對信號源消除干擾。
圖3 Modelsim仿真系數(shù)更新
在Matlab中計算出的濾波器系數(shù)都是小于1的小數(shù),如果直接取整就會造成系數(shù)全是0或1的結(jié)果,濾波器將會失去作用。所以在這里考慮首先將濾波系數(shù)擴大,然后取整計算,最后在輸出結(jié)果縮小相應的倍數(shù)。
根據(jù)算法定義,
FPGA中規(guī)定一個乘法器是18*18,如果數(shù)據(jù)位數(shù)超出18位,一次乘法就需要使用兩個乘法器。從式(2)中可以看出,將步長擴大128倍,實際上也是將系數(shù)h(k)擴大128倍,為了節(jié)省乘法器,就將系數(shù)的擴大倍數(shù)定位1024倍。這樣系數(shù)的位數(shù)就是1024*128位,輸入數(shù)據(jù)也將擴大1024*128位,最后在濾波器輸出結(jié)果上將數(shù)據(jù)縮小1024*128倍,數(shù)據(jù)仍然是8bit。程序設計基本流程如圖4所示。
圖4 抗干擾計算流程
驗證FPGA程序功能是否正確,主要分為兩個部分,一是Modelsim仿真結(jié)果與Matlab仿真結(jié)果比對;二是Chipscope實時觀測濾波器系數(shù)計算是否正確。這兩項都正確后說明FPGA程序能夠正常實現(xiàn)抗干擾功能。
將FPGA程序完全按照Matlab仿真程序編寫,如果FPGA程序編寫正確,那么FPGA程序應與Matlab程序輸出結(jié)果一致。將輸入源設為相同,觀測FPGA仿真結(jié)果,并與Matlab結(jié)果比對。由圖6所示,F(xiàn)PGA計算濾波器系數(shù)結(jié)果與Matlab計算結(jié)果完全一致。
圖5 FPGA計算系數(shù)(左)Matlab計算系數(shù)(右)
圖6 FPGA計算結(jié)果與Matlab計算結(jié)果比對
將程序下載到板卡上,Chipscope捕捉FPGA中計算出的系數(shù)、輸入中頻數(shù)據(jù)以及濾波器的輸出結(jié)果。在Matlab中進行數(shù)據(jù)轉(zhuǎn)換,可以看到濾波器的頻率響應及抗干擾效果。具體見圖7、圖8。
1)導航信號:由導航模擬源產(chǎn)生模擬信號,可根據(jù)需要調(diào)整信號功率;
圖7 FPGA計算的濾波器頻率響應
圖8 FPGA抗干擾前后信號頻譜對比
2)干擾信號:干擾由4438C模擬信號源產(chǎn)生。
表1 單載波干擾測試結(jié)果
從表1中可以看出,對于單載波干擾,大約可以抵抗干信比54dB的干擾,干擾頻率在中心頻點±100KHz與±1MHz的差別并不是很大,并沒有因為靠近中心頻點性能會變差,這也是插值濾波器的特點。
1)實際AD量化位數(shù)減少,見圖9。
圖9 FPGA采集信號幅度
由于AGC的作用,干擾增大會導致壓縮信號幅度,當干擾達到一定功率時,信號將被完全壓制。所以當量化位數(shù)少時,所能容納的干擾功率也就隨之減小。
2)實際干擾與理想干擾差別,見圖10。
圖10 實采干擾信號頻譜
由于硬件原因,在中頻輸出端干擾會出現(xiàn)二次諧波。當干擾為-70dBm時,由圖10所示,橢圓圈區(qū)域為二次諧波,這會造成載噪比的損失。
隨著信號處理器的不斷發(fā)展,利用FPGA實現(xiàn)信號的高速、髙時效處理,已經(jīng)成為一種趨勢,本文在導航接收機抗干擾時域濾波的基礎(chǔ)上,編寫FPGA程序,并在Modelsim中仿真,與Matlab定點仿真程序進行比較,確定FPGA程序輸出與Maltab程序輸出完全一致,保證FPGA程序功能正確;并在接收機中實際調(diào)試,驗證FPGA程序。