胡鐵喬,任志杰
(中國民航大學 天津市智能信號與圖像處理重點實驗室,天津 300300)
廣播式自動相關監(jiān)視(ADS-B)信號源是ADS-B接收機研制過程中不可缺少的測試設備,目前對ADS-B信號源的研究主要有鐘倫瓏等設計的ADS-B接收機自動測試系統(tǒng)[1]和王婷琦等設計的ADS-B信號發(fā)生器[2]。上述ADS-B信號源均是采用上位機配合下位機的方式實現(xiàn),上位機是計算機或帶有顯示終端的嵌入式設備,負責生成已知功率、多普勒頻移的ADS-B數(shù)據(jù),下位機是數(shù)據(jù)編碼、信號調制、數(shù)模轉換與上變頻等模塊,根據(jù)上位機提供的ADS-B數(shù)據(jù)生成對應的ADS-B射頻信號。由于這類設備的下位機不僅涉及FPGA和單片機軟件開發(fā),還涉及到PCB電路板硬件設計,導致開發(fā)周期太長。此外,該類設備一旦定型,后期增加功能需要涉及硬件層面的改動,導致其可擴展性較差。
本文采用CPU+GPU異構平臺[3],通過計算機編程生成ADS-B數(shù)字中頻信號,以Google Earth作為地理信息系統(tǒng),針對CPU串行執(zhí)行程序較慢問題,采用CUDA技術利用GPU進行加速來實時生成數(shù)字中頻信號,通過DA卡將數(shù)字中頻信號轉換為對應頻率的模擬中頻信號。該方法使得DA轉換器盡可能靠近天線端,將更多的任務以軟件編程的方式來實現(xiàn),以這種方式設計出來的系統(tǒng)涉及到的硬件電路較少,具有高度的靈活性與開放性,僅僅通過軟件編程就可以增加新的功能,使得系統(tǒng)的可擴展性增強。
ADS-B信號實時生成軟件包括參數(shù)設置模塊、信號生成模塊、數(shù)據(jù)保存模塊和顯示模塊,軟件能夠根據(jù)設定的參數(shù)生成采樣率為80 MHz的ADS-B數(shù)字中頻信號,使用采樣率為80 MHz的DA卡即可將其回放為與設定功率、頻率對應的ADS-B模擬中頻信號。ADS-B信號實時生成軟件框架如圖1所示。
圖1 ADS-B信號實時生成軟件框架
根據(jù)軟件功能確定需要設置的參數(shù),其中ADS-B信號參數(shù)包括功率和多普勒頻移;航跡參數(shù)包括飛機的航跡類型、飛機架數(shù)和飛機高度;衛(wèi)星參數(shù)包括星下點坐標、軌道高度和軌道傾角。使用MFC的按鈕、編輯框、組合框等控件類為各個參數(shù)添加相應的控件,實現(xiàn)在參數(shù)設置界面調整各個參數(shù)的功能。
信號生成模塊是ADS-B信號實時生成軟件的核心。根據(jù)上述參數(shù)設置模塊中航跡設置與衛(wèi)星設置的參數(shù),可以生成基于KML語法的航跡數(shù)據(jù)與衛(wèi)星天線覆蓋范圍數(shù)據(jù)。根據(jù)信號設置設定的參數(shù),可以生成與之對應的ADS-B信號或載波。當信號參數(shù)中的功率模擬方式選擇真實功率時,根據(jù)當前時刻飛機與接收天線的距離,通過地空通信鏈路損耗模型來計算這一時刻信號的功率;功率模擬方式選擇固定功率時,通過參數(shù)設置界面輸入一個固定的功率值,該方式生成的每一條ADS-B信號的功率大小均為設定的功率。當信號參數(shù)中的頻移模擬方式選擇真實頻移時,通過多普勒頻移計算公式計算信號的多普勒頻移,該方式模擬的多普勒頻移由當前時刻飛機與接收機天線的徑向速度決定;頻移模擬方式選擇固定頻移時,通過參數(shù)設置界面輸入一個固定的頻移值,該方式生成的每一條ADS-B信號的頻移大小均為設定的頻移。最后,將生成的ADS-B基帶信號結合上述得出的功率與頻移,生成ADS-B數(shù)字中頻信號或者頻偏和功率與ADS-B數(shù)字中頻信號相同的載波。
在設定好衛(wèi)星參數(shù)后,軟件將生成的衛(wèi)星天線覆蓋范圍數(shù)據(jù)以KML語法格式保存到KML文件中,用于Google Earth顯示天線覆蓋范圍。在生成當前1 s的ADS-B數(shù)字中頻信號之前,軟件將該秒的航跡信息以KML語法保存到KML文件中,用于Google Earth顯示當前時刻飛機航跡。軟件每生成1 s時長的ADS-B數(shù)字中頻信號之后便執(zhí)行一次寫磁盤操作,將緩沖區(qū)中的ADS-B數(shù)字中頻信號寫入到DAT文件中,當下一秒的信號生成完畢直接將緩沖區(qū)中之前的數(shù)據(jù)覆蓋,這樣只需開辟兩個1 s時長信號占用大小的緩沖區(qū)(因為寫磁盤部分用到乒乓操作,所以需要兩個緩沖區(qū)),有利于軟件在內存較小的平臺上進行部署。
根據(jù)ADS-B數(shù)據(jù)內容,將仿真的飛機以及相關信息顯示在界面中,通過Google Earth COM API將Google Earth嵌入到本系統(tǒng)中作為地理信息系統(tǒng),以KML文件為媒介實現(xiàn)航跡可視化,使得人機交互更為容易。
ADS-B信號實時生成軟件系統(tǒng)流程如圖2所示,該軟件能夠實時完成4個通道ADS-B數(shù)字中頻信號的生成與存盤,后續(xù)使用DA卡把生成的4個通道數(shù)字中頻信號回放為4路模擬中頻信號,經(jīng)過上變頻器將模擬中頻信號上變頻為1090 MHz的射頻信號。
圖2 ADS-B信號實時生成軟件系統(tǒng)流程
飛機距離接收機的遠近會影響飛機廣播的ADS-B信號到達接收機天線端的功率大小,為了模擬接收機天線覆蓋范圍內不同距離的飛機發(fā)出的ADS-B信號,本文設計的ADS-B信號模擬軟件可以調節(jié)信號的發(fā)射功率。在移動通信中特別是高速運動狀態(tài)下,發(fā)射端與接收端之間徑向速度的改變會使天線接收的信號頻率發(fā)生變化,稱為多普勒效應[4],多普勒效應引起的頻移稱為多普勒頻移。飛機與星載ADS-B接收機的相對速度很大,導致信號的多普勒頻移較明顯,因此需要對ADS-B信號的多普勒頻移進行模擬[5]。
2.1.1 直接數(shù)字式頻率合成器
直接數(shù)字式頻率合成器(direct digital synthesizer)的英文縮寫為DDS,DDS技術是一種經(jīng)典的頻率合成方法。由于DDS技術采用全數(shù)字化實現(xiàn),便于集成,且性能良好,DDS設備日益受到重視,在通信領域中已得到廣泛的應用[6]。本文中信號功率與頻偏的模擬通過DDS來實現(xiàn)。
DDS由相位累加器、正弦ROM表、DA轉換器及低通濾波器構成。在時鐘脈沖的控制下,相位累加器以頻率控制字K為步長進行累加得到相應的相碼,相碼尋址ROM查找表進行相碼-幅碼變換輸出不同的幅度編碼,再經(jīng)過DA轉換器得到對應的階梯波,最后經(jīng)低通波器進行濾波平滑,得到受頻率控制字控制的連續(xù)變化的輸出波形。DDS各個變量之間的數(shù)學關系如下
(1)
(2)
式中:fout為待生成的信號頻率,fclk為時鐘頻率,N為相位累加器的位寬,K為對應fout的頻率控制字,Δf為頻率分辨率。本文中fclk為80 MHz,N設定為28,由式(2)可知Δf為0.298 Hz。
為了避免ROM查找表耗費存儲資源過多的問題,將相位累加器的高10位用于尋址ROM查找表,這樣ROM查找表也只需要10位就可以存儲正弦波一個周期的信息。
2.1.2 多普勒頻移模擬
本文中的頻移以10 MHz為中心頻率,故由式(1)可以得出10 MHz的頻率控制字K10MHz,引入KDpl作為多普勒頻移的頻率控制字,各變量之間的數(shù)學關系如下
(3)
(4)
式中:fDpl為多普勒頻移,軟件執(zhí)行過程中把通過真實頻移或固定頻移方式模擬的多普勒頻移傳遞給fDpl,將fDpl代入到式(4)可得出KDpl。DDS的相位累加器在時鐘脈沖的驅動下以K10MHz+KDpl的步長進行累加,當相位累加器累加滿時就完成了一個周期動作,該周期對應的頻率就是疊加上多普勒頻移的信號頻率。
通過上述方法可以模擬出由飛機與接收機相對速度導致的多普勒頻移,多普勒頻移模擬關鍵代碼如下:
short Amp_V=GetAmpDat(Amp_dBm);
int tmp1,tmp;
shift_r=phaAddWidth-10;
phase_inc_Dpl=round(DopplerShift*phase_inc_1 Hz);
phase_adder=0;
for(int i=0;i { phase_adder=phase_adder+phase_inc_10MHz+phase_inc_Dpl; tmp1=round(phase_adder/(pow(2,shift_r))); tmp=tmp1%1024; Sin_out[i]=Amp_V*Sin_ROM[tmp]; } 2.1.3 功率模擬 真實功率模擬方式是通過建立地空通信鏈路損耗模型來實現(xiàn)信號功率模擬,根據(jù)地空通信鏈路損耗公式可以計算信號到達接收機天線端功率值 Pr=PT+GT+GR-Ld-Ls (5) 式中:Pr(單位dBm)是ADS-B接收機接收到的信號功率值,PT(單位dBm)是信號發(fā)射功率,GT是發(fā)射天線增益,設定為3 dB;GR是接收天線增益,設為8 dB;Ld(單位dB)是自由空間傳播損耗,Ls是大氣、云、雨、霧吸收損耗,此外,發(fā)射天線、接收天線損耗設為6 dB。 對于自由空間損耗Ld,有公式 Ld=32.44+20lgd+20lgf (6) d(單位km)表示發(fā)射天線與接收天線的距離,f(單位MHz)表示載波頻率,這里取1090 MHz。這樣就實現(xiàn)在軟件中根據(jù)飛機與接收機的距離,模擬出信號經(jīng)衰減后到達接收機的功率大小。 ADS-B信號實時生成軟件生成的數(shù)字中頻信號最終要通過DA卡將其回放為模擬中頻信號。數(shù)字中頻信號的存放格式由DA卡決定,以8個通道為例,從通道1到通道8,每通道依次存放8個點(short類型)。DA卡中頻數(shù)據(jù)格式如圖3所示。 圖3 DA卡中頻數(shù)據(jù)格式 圖3中每個點都是一個short類型的數(shù)值,該數(shù)值越大對應回放后的電壓越高。建立分貝毫瓦到電壓的映射表,使用真實功率或者固定功率方式模擬的功率值通過查表的方式可以得到一個介于-32767~32767之間short類型的數(shù)值,2.1.2小節(jié)代碼段中Amp_V即為查表后的數(shù)值,該數(shù)值對應經(jīng)DA卡回放后ADS-B模擬中頻信號的電壓值。 軟件首先生成每駕飛機的航跡數(shù)據(jù),包括空中位置、地面位置、空中速度、飛行器身份和類型、飛行器運行狀況、目標狀況與狀態(tài)、測試數(shù)據(jù)共7種類型的數(shù)據(jù)以及飛機當前發(fā)射信號的功率與頻移,并將其存儲到每駕飛機的航跡數(shù)據(jù)結構體中。根據(jù)RTCA-DO260B中規(guī)定的各種報文的編碼方法,將以上7種數(shù)據(jù)編碼為對應的7種ADS-B報文。 一幀基帶ADS-B信號的長度為120 bit,包括由4個前導脈沖構成的8 bit報頭和112 bit的數(shù)據(jù)域[7]。4個前導脈沖時間起點分別為0.0 μs、1.0 μs、3.5 μs、4.5 μs,每個脈沖持續(xù)時長為0.5 μs。數(shù)據(jù)位采用脈沖位置調制,每個碼元的持續(xù)時長為1 μs。在1 μs碼元時長內若前0.5 μs為脈沖,后0.5 μs為零電平,表示碼元為1,若前0.5 μs為零電平,后0.5 μs為脈沖,表示碼元為0,112個碼元構成一條ADS-B報文。由一幀ADS-B基帶信號生成中頻信號程序流程如圖4所示。 圖4 生成一條ADS-B中頻信號程序流程 基于通用計算機平臺的ADS-B信號源具有較好的靈活性與可擴展性等優(yōu)點,但是在CPU上串行執(zhí)行的程序運行速度太慢,特別是在數(shù)據(jù)量比較大的場景下這種問題更加明顯[8]。CUDA是NVIDIA公司推出的一種通用并行計算架構,該架構使GPU能夠解決復雜的計算問題[9]。文中將耗時較長的部分利用CUDA技術在GPU上并行化,實現(xiàn)ADS-B中頻信號生成與存盤的實時性。 ADS-B信號實時生成軟件中耗時最多的是信號調制和寫磁盤部分,其中信號調制部分主要是數(shù)據(jù)的搬移,屬于數(shù)據(jù)密集型操作,所以對這部分進行數(shù)據(jù)搬移優(yōu)化。首先將生成4個通道的ADS-B數(shù)據(jù)分別存儲在4個長為80000000的數(shù)組中,之后將4個數(shù)組的數(shù)據(jù)按照DA卡回放格式搬移到一個數(shù)組中用來寫到磁盤。采用CPU完成這項工作時,需要執(zhí)行80000000*4個數(shù)據(jù)搬移操作,這種方式耗時長,無法達到實時生成信號的要求。 采用CUDA編程對上面數(shù)據(jù)搬移部分進行優(yōu)化,使用GPU強大的并行能力來加速程序的執(zhí)行。具體步驟如下: (1)分配顯存空間; (2)將主機端生成的1 s時長4個通道的ADS-B信號存儲到顯存空間; (3)配置并啟動核函數(shù),將4個通道的ADS-B信號按照DA卡讀數(shù)據(jù)格式搬移到一個緩沖區(qū)中; (4)將顯卡緩沖區(qū)中搬移后的數(shù)據(jù)拷貝到主機端寫磁盤緩沖區(qū)中。 主機端與設備端交換的數(shù)據(jù)量比較大導致拷貝占用的時間比較長。CUDA運行時提供了cudaHostAlloc()函數(shù)分配頁鎖定內存,GPU可以直接與主機端的物理內存交換數(shù)據(jù),使拷貝操作比可分頁內存性能高2倍,頁鎖定內存使用cudaFreeHost()進行內存釋放。 寫磁盤部分采用多線程和乒乓操作技術實現(xiàn),生成當前秒數(shù)據(jù)的同時,往磁盤寫上1 s已經(jīng)生成好的數(shù)據(jù),這樣就利用了生成數(shù)據(jù)與寫磁盤二者中耗時較長的時間隱藏了耗時較短的那部分時間,提升軟件工作的速度。乒乓操作是一種常用于數(shù)據(jù)流控制的處理方法,特點是創(chuàng)建“緩沖區(qū)1”和“緩沖區(qū)2”兩個緩沖區(qū),通過輸入數(shù)據(jù)選擇單元和輸出數(shù)據(jù)選擇單元按節(jié)拍、相互配合的切換,將經(jīng)過緩沖的數(shù)據(jù)流不斷傳輸?shù)綌?shù)據(jù)流運算處理模塊[10]。 通過創(chuàng)建WriteDisk1與WriteDisk2兩個線程分別將“緩沖區(qū)1”與“緩沖區(qū)2”中的數(shù)據(jù)寫入到磁盤中。為了避免兩個線程在寫磁盤時同時操作文件指針而導致數(shù)據(jù)競爭問題[11],本文采用互斥鎖來完成兩個線程間的通信[12,13]。當WriteDisk1開始操作文件指針時,會上鎖避免其它線程對該文件指針的操作,WriteDisk1寫磁盤結束后開鎖釋放對文件指針的使用權;同理,當WriteDisk2開始操作文件指針時,會上鎖避免其它線程對該文件指針的操作,WriteDisk2寫磁盤結束后開鎖釋放對文件指針的使用權。 在本文中按1 s為單位生成ADS-B信號,故乒乓操作中的緩沖周期設定為1 s。生成4個通道數(shù)據(jù)時,每通道數(shù)據(jù)長度是80000000,故“緩沖區(qū)1”和“緩沖區(qū)2”的長度是80000000*4。在第1秒時,數(shù)據(jù)生成完畢后,顯卡將當前1 s的4個通道數(shù)據(jù)通過并行的方式整合到顯存中一個長度為80000000*4的數(shù)組中,通過拷貝函數(shù)將顯存內數(shù)據(jù)拷貝到主機內存“緩沖區(qū)1”中并啟動WriteDisk1將“緩沖區(qū)1”中的數(shù)據(jù)寫到磁盤,在WriteDisk1進行寫磁盤時,主線程開始生成第2秒數(shù)據(jù),數(shù)據(jù)生成完畢后,通過拷貝函數(shù)將顯存內數(shù)據(jù)拷貝到主機內存“緩沖區(qū)2”中并啟動WriteDisk2將“緩沖區(qū)2”中的數(shù)據(jù)寫到磁盤,在WriteDisk2進行寫磁盤時,主線程開始生成第3秒數(shù)據(jù),依次循環(huán)下去。 Google Earth是谷歌公司旗下的一款虛擬地球軟件,本軟件平臺使用Google Earth作為航跡顯示的地圖背景,通過調用Google Earth COM API將Google Earth嵌入進目標工程。使用CApplicationGE類的GetMainHwnd函數(shù)獲取Google Earth的主窗口句柄,使用CApplicationGE類的GetRenderHwnd函數(shù)獲取Google Earth的地圖窗口句柄。在分別獲取這兩個窗口句柄之后,將Google Earth的地圖窗口的父容器改變?yōu)楸拒浖闹鞔翱冢oogle Earth的主窗口隱藏掉,實現(xiàn)了將Google Earth嵌入到本軟件平臺[14]。本軟件平臺周期性的將飛機的位置、速度、高度等信息進行更新并寫到航跡KML文件中,周期性的對航跡KML文件進行加載,實現(xiàn)了飛機航跡的實時更新。在每一次設置波束參數(shù)后對波束KML文件進行更新并將其加載到Google Earth中實現(xiàn)對星載接收機天線覆蓋范圍的顯示。 ADS-B信號實時生成軟件實驗平臺是Intel Xeon E5-2640 CPU的PC機,GPU采用NVIDIA GeForce GTX TITAN BLACK,操作系統(tǒng)是Windows 7,開發(fā)環(huán)境是Microsoft Visual Studio 2012加裝CUDA9.0,使用MFC開發(fā)人機交互界面。 ADS-B信號實時生成軟件界面包括參數(shù)設置菜單欄、快捷工具欄、三維顯示窗體3部分,參數(shù)設置菜單欄包括衛(wèi)星參數(shù)設置、航路參數(shù)設置、生成航跡等主要功能菜單,快捷工具欄包括開始/停止按鈕、仿真時間控件、地圖放大縮小按鈕等使用頻率較高的一些功能控件,三維顯示窗體用來顯示地圖背景、航跡等內容。軟件啟動界面如圖5所示。 圖5 軟件啟動界面 通過ADS-B信號實時生成軟件中參數(shù)設置模塊來設置模擬參數(shù),衛(wèi)星參數(shù)設置為多波束類型,信號通道個數(shù)為4,航跡類型設置為繞圈飛行,為了方便觀察,飛機架數(shù)設置為每通道50架,內圈外圈各25架,軟件仿真航跡效果如圖6所示。將軟件生成的ADS-B數(shù)字中頻信號經(jīng)過DA卡回放,輸出到示波器觀察信號波形如圖7所示,圖7(a)是截取的一幀完整的ADS-B信號波形,圖7(b)是幀頭局部放大,顯示結果與 2.2節(jié)中描述的ADS-B信號特征相符。 圖6 軟件仿真航跡效果 圖7 ADS-B信號波形截圖 為了進一步驗證軟件所生成信號的準確性,將所生成的ADS-B數(shù)字中頻信號經(jīng)過DA卡和上變頻器后通過天線輻射出去,使用Kinetic公司的SBS-3接收機進行接收,經(jīng)過解碼后的航跡如圖8所示,圖中外面4個圓形航跡為ADS-B信號實時生成軟件所發(fā)信號,中心的航跡為天津濱海機場上空真實飛機的航跡。 圖8 SBS-3接收機接收解碼航跡 ADS-B信號是脈沖信號,而頻譜分析儀無法直接對脈沖信號進行測量,本軟件具有輸出連續(xù)波功能,可以輸出與當前ADS-B信號相同功率與多普勒頻移的載波,這樣就可以使用頻譜分析儀測量載波的功率與頻移獲取ADS-B信號的功率與頻移。 3.1.1 功率測試 當軟件設定發(fā)送功率為-60 dBm,多普勒頻移為0 Hz,輸出設定為連續(xù)波,將生成的信號經(jīng)DA卡回放后輸出到頻譜儀,頻譜儀測試功率結果如圖9所示。 圖9 頻譜儀測試功率結果 3.1.2 頻偏測試 當軟件設定發(fā)送功率為-60 dBm,多普勒頻移為1000 Hz,輸出設定為連續(xù)波,將生成的信號經(jīng)DA卡回放后輸出到頻譜儀,頻譜儀測試頻偏結果如圖10所示。 圖10 頻譜儀測試頻偏結果 為了驗證ADS-B信號實時生成軟件生成ADS-B信號的實時性,分別對該軟件的CPU版本與CPU+GPU異構版本進行測試,設定每波束模擬250架飛機,仿真時長設定30 s,使用計時函數(shù)計算每秒內生成信號并存盤的耗時,最后求取每秒內生成信號并存盤耗時的平均值,比較兩種版本的軟件生成并存儲不同波束個數(shù)ADS-B信號每秒耗時的平均值。兩種軟件版本生成1 s數(shù)據(jù)耗時平均值對比見表1,當波束數(shù)量大于等于2時加速比穩(wěn)定在6倍左右,當模擬4個波束共1000架飛機時,能夠在1 s內完成當前1 s時長信號的生成與存盤,達到了實時生成ADS-B信號的要求。 表1 兩種軟件版本耗時對比 本文針對當前ADS-B信號源涉及到的硬件系統(tǒng)復雜導致開發(fā)周期長、功能可擴展性弱的問題設計開發(fā)了ADS-B信號實時生成軟件。本軟件實現(xiàn)了ADS-B信號源的基本功能,一方面采用DDS技術實現(xiàn)了信號功率與多普勒頻移的模擬;另一方面通過CUDA編程和乒乓操作,實現(xiàn)了ADS-B數(shù)字中頻信號的實時生成與存儲。此外,通過Google Earth COM API將谷歌地球嵌入到本軟件中作為地理信息系統(tǒng),增強了人機交互界面的友好性。測試結果表明,通過該方法設計開發(fā)的ADS-B信號生成軟件運行效果良好,能夠實時生成并存儲ADS-B數(shù)字中頻信號,為進一步擴展為多類型信號生成軟件平臺提供基礎。2.2 中頻信號生成
2.3 CUDA加速
2.4 多線程與乒乓操作
2.5 地圖背景與航跡顯示
3 實驗結果及分析
3.1 功率與頻偏測試
3.2 加速比測試
4 結束語