郝敬堂,蘇志剛,韓 冰,劉 通
(中國民航大學(xué) 中歐航空工程師學(xué)院,天津 300300)
廣播式自動相關(guān)監(jiān)視(Automatic Dependent Surveillance-Broadcast, ADS-B)是一種基于GNSS和空空、地空數(shù)據(jù)鏈通信的航空器及車輛運行監(jiān)視技術(shù)。ADS-B發(fā)射機周期性向外廣播航空器ICAO地址、三維位置、速度以及意向等信息。ADS-B接收機接收并解碼ADS-B報文后,將解碼結(jié)果傳輸給空管系統(tǒng)實現(xiàn)對航空器監(jiān)視。 2019年,中國民航按計劃全面啟動ADS-B管制運行[1]。然而,ADS-B存在嚴重電子欺騙干擾[2]以及微弱信號較難檢測[3]等問題,為開展相關(guān)研究,研發(fā)一套低成本、易于功能擴展的ADS-B收發(fā)系統(tǒng)具有重大意義。
目前市面上的無線通信、信號處理設(shè)備多采用硬件電路完成,集成度較高,成本較大,不具有開放性。針對此問題,國內(nèi)外眾多學(xué)者基于軟件無線電平臺搭建了通用的無線通信及信號處理平臺[4-5],開展了GNSS干擾信號分析[6]、室內(nèi)定位[7]以及無線電頻譜數(shù)據(jù)分析[8-9]等研究。在ADS-B信號處理方面,文獻[10]基于AD9363 和 Xilinx Zynq-7000 SOC 搭建軟件無線電平臺,實現(xiàn)了ADS-B接收機;文獻[11-12]利用通用軟件無線電外設(shè)(Universal Software Radio Peripheral, USRP)實現(xiàn)了ADS-B信號的接收及處理;文獻[13]搭建了一個ADS-B收發(fā)仿真系統(tǒng),并重點分析了ADS-B信號的編碼及解碼方式。上述研究多針對ADS-B信號接收及解碼開展研究,且使用的無線電設(shè)備較為昂貴。
基于此,本文設(shè)計了基于軟件無線電的ADS-B信號收發(fā)系統(tǒng),該系統(tǒng)依托GNU Radio,用Python編程實現(xiàn)了ADS-B信號收發(fā)過程中信號生成、信號收發(fā)以及信號處理等核心模塊的編寫,進而搭建ADS-B發(fā)射機和接收機流圖,利用較為廉價的軟件無線電外設(shè)HackRF實現(xiàn)信號的發(fā)射與接收。該系統(tǒng)具有模塊化和開放性特點,通過修改模塊代碼,可以方便實現(xiàn)系統(tǒng)功能的完善與擴展。
ADS-B系統(tǒng)采用S模式數(shù)據(jù)鏈,以1 090 MHz擴展電文的形式進行周期性廣播。本文設(shè)計的ADS-B信號收發(fā)系統(tǒng)包含ADS-B發(fā)射機和ADS-B接收機兩個子系統(tǒng),且都由開源的軟件無線電開發(fā)工具GNU Radio及通用軟件無線電硬件平臺HackRF組成。系統(tǒng)總體框架如圖1所示,ADS-B收發(fā)系統(tǒng)中信號生成及處理都在GNU Radio中以軟件形式完成,ADS-B信號的發(fā)射及接收由GNU Radio控制HackRF實現(xiàn)。所設(shè)計系統(tǒng)不僅可以接收自己生成的信號,還可以接收周邊航空器發(fā)出的真實ADS-B信號。
圖1 系統(tǒng)結(jié)構(gòu)框架
為有效降低系統(tǒng)成本,系統(tǒng)硬件部分使用開源的軟件無線電外設(shè)HackRF實現(xiàn),其硬件結(jié)構(gòu)圖如圖2所示。HackRF的工作頻率范圍為30 MHz~6 GHz,最大采樣頻率為22 MHz,采用寬帶中頻正交采樣,主要完成信號收發(fā)、混頻以及采樣等前端處理,采用半雙工通信方式[14]。發(fā)射和接收過程中的基帶數(shù)字信號通過USB2.0與電腦或手機進行通信。
圖2 HackRF硬件結(jié)構(gòu)圖
以發(fā)射信號過程為例,系統(tǒng)軟件部分生成IQ兩路數(shù)字基帶信號,經(jīng)USB傳輸給HackRF微控制器LPC4320,并由CPLD將數(shù)據(jù)傳輸給MAX5864完成數(shù)模轉(zhuǎn)換,輸出的基帶模擬信號由MAX2837調(diào)制到射頻2.3 GHz-2.7 GHz頻段,然后利用RFFC5072混頻到指定頻率,經(jīng)功率放大后發(fā)射出去。
利用開源程序可以初始化HackRF,設(shè)置射頻增益、低噪聲放大器(Low Noise Amplifier, LNA)增益、可變增益放大器(Variable Gain Amplifier, VGA)增益,中心頻率以及采樣率等參數(shù),完成與HackRF的通信。GNU Radio將與HackRF通信的功能封裝為 Osmocom Source/Sink兩個模塊,除了設(shè)置中心頻率以及采樣率等基本參數(shù)外,通過設(shè)置射頻增益(RF Gain)、中頻增益(IF Gain)和基帶增益(BB Gain)完成相關(guān)增益的設(shè)置,相關(guān)增益范圍及步長如表1所示。
表1 增益范圍/步長
如表1所示,射頻增益為0或14 dB,用來控制是否開啟14 dBm放大器。接收數(shù)據(jù)時,主要調(diào)整HackRF中頻(LNA)增益和基帶(VGA)增益;發(fā)射數(shù)據(jù)時,主要調(diào)整HackRF中頻 (VGA)增益。
系統(tǒng)軟件部分采用GNU Radio開發(fā),GNU Radio為一款開源的軟件無線電平臺,內(nèi)置有信號采集、信號產(chǎn)生、信道、濾波器、調(diào)制解調(diào)以及顯示儀器等模塊,并支持用戶編制具有特定功能的自定義模塊。
根據(jù)是否更改模塊采樣速率,自定義模塊分為同步、內(nèi)插以及抽取3種類型,可以使用GNU Radio內(nèi)部模塊gr_modtool創(chuàng)建模塊模板,并利用C++或Python實現(xiàn)模塊功能代碼的編寫。另外,也可以直接在內(nèi)部模塊Python Block中輸入Python代碼實現(xiàn)特定功能。
如圖3所示,GNU Radio以GRC (GNU Radio Companion)流圖形式,將單個的模塊連接起來,組成信號處理系統(tǒng),且系統(tǒng)至少包含一個信源和一個信宿。每個模塊都是一個數(shù)據(jù)處理線程,GNU Radio利用其調(diào)度機制控制硬件驅(qū)動及各模塊線程調(diào)度,并利用數(shù)據(jù)零拷貝緩存機制、消息傳遞機制以及流標簽機制實現(xiàn)數(shù)據(jù)流的傳輸與有用數(shù)據(jù)的標記[15]。
圖3 GNU Radio流圖示例圖
如圖3中所示,為了實現(xiàn)數(shù)據(jù)零拷貝緩存,模塊0輸出端口會綁定一個緩存區(qū),并通過寫指針wptr輸出數(shù)據(jù),下游模塊1通過讀指針rptr讀取數(shù)據(jù),保證模塊間數(shù)據(jù)高效傳輸。除了傳輸數(shù)據(jù)流外,模塊可以以GNU Radio 專有多態(tài)數(shù)據(jù)類型(polymorphic type,PMT)構(gòu)建協(xié)議數(shù)據(jù)單元,并將其作為異步消息在相鄰模塊間傳遞傳遞,如圖3中虛線所示。另外,對于關(guān)鍵信息,可以通過添加流標簽形式進行標記,如圖3中,模塊0在數(shù)據(jù)流偏移量為3的位置添加了鍵名為test的標簽。
根據(jù)圖1所示系統(tǒng)結(jié)構(gòu)框架,ADS-B收發(fā)系統(tǒng)中HackRF主要完成數(shù)字上下變頻、正交采樣等前端工作,ADS-B信號生成及處理等核心功能在GNU Radio以自定義模塊形式實現(xiàn),且為數(shù)據(jù)處理方便,本系統(tǒng)自定義的模塊皆為同步類型模塊。根據(jù)ADS-B系統(tǒng)信號處理流程,分別搭建ADS-B接收機流圖和ADS-B發(fā)射機流圖。為實現(xiàn)與HackRF的通信,ADS-B接收機流圖中以O(shè)smocom Source模塊為信源,ADS-B發(fā)射機流圖以O(shè)smocom Sink模塊為信宿。
在進行系統(tǒng)設(shè)計之前,需要對ADS-B消息格式進行分析,如圖4所示為ADS-B消息格式,采用下行格式(Downlink Format, DF) 17格式,前8 μs為前導(dǎo)脈沖,后112 μs為數(shù)據(jù)塊,采用脈沖位置調(diào)制(pulse position modulation, PPM)[16]。
基于GNU Radio模塊化和開放性的優(yōu)勢,將ADS-B信號處理及信號生成過程中核心功能封裝為自定義GNU Radio模塊。對ADS-B信號收發(fā)系統(tǒng)中信號生成及處理流程進行細化,繪制系統(tǒng)完整工作流程如圖5所示。
圖4 ADS-B消息格式
如圖5所示,ADS-B發(fā)射機在GNU Radio中時序讀取歷史航跡數(shù)據(jù),并按消息類型進行報文編碼,然后經(jīng)PPM調(diào)制、添加前導(dǎo)脈沖后生成基帶信號。ADS-B接收機在GNU Radio中對HackRF輸出的基帶正交信號依次進行前導(dǎo)脈沖檢測、PPM解調(diào)以及報文解碼等處理。
圖5 收發(fā)系統(tǒng)工作流程
下面就ADS-B發(fā)射機及ADS-B接收機實現(xiàn)的具體流程及解決的關(guān)鍵難點進行分別描述。
如圖5所示,ADS-B發(fā)射機核心功能可以歸類為ADS-B報文編碼和基帶信號生成兩個模塊,分別自定義GNU Radio 模塊為ADS-B Encoder模塊和Baseband Signal Generator模塊。根據(jù)ADS-B發(fā)射機工作流程搭建GRC流圖如圖6所示。
圖6 ADS-B發(fā)射機GRC流圖
發(fā)射機系統(tǒng)具體工作流程如下:
1) 利用Message Edit Box 模塊輸入歷史真實航跡文件路徑,并將其以消息形式傳輸給ADS-B Encoder模塊。
ADS-B常用消息類型主要包含呼號、空中位置以及空速三類,歷史真實航跡文件以明文形式按行存儲三類消息,存儲內(nèi)容如表2所示。從表2可以看出,每一類消息都包含消息類型、時間戳以及航空器24比特地址碼。呼號類消息包含航空器航班號;空中位置類消息包含經(jīng)度、緯度以及高度信息;空速類消息包含航空器地速、航向以及爬升率。
表2 歷史真實航跡文件內(nèi)容
圖7 ADS-B接收機GRC流圖
根據(jù)Do-260B文件《1 090 MHz ADS-B最低運行性能標準》規(guī)定,呼號消息每4.8~5.2 s更新一次;空中位置及空速消息每0.4~0.6 s更新一次。本系統(tǒng)使用的歷史航跡數(shù)據(jù)是利用專業(yè)ADS-B接收機接收得到,各類消息更新速率滿足要求。
2) ADS-B Encoder模塊逐條讀取歷史航跡文件,按照S模式DF17報文格式完成報文編碼及循環(huán)冗余校驗(Cyclic Redundancy Check, CRC)碼生成,并將生成的112比特報文通過消息傳輸給Baseband Signal Generator模塊。
在進行空中位置報文編碼時,經(jīng)度緯度信息一般用24比特表示,而由于ADS-B信息字長限制,需要采用壓縮位置報告(compact position reporting, CPR)進行位置編碼。CPR算法將地球表面按照緯度等分為30個高位區(qū),按經(jīng)度劃分為若干低位區(qū)。由于從赤道向兩極,橫截圓面積越來越小,低位區(qū)數(shù)量與所處緯度有關(guān)。航空器在飛行過程中,相鄰兩條報文高位區(qū)編碼一般不發(fā)生變化。在利用CPR算法編碼時,將航空器處于相同高位區(qū)的相鄰兩條位置報文分別定義為奇編碼報文和偶編碼報文,高位區(qū)信息平分到兩條報文進行編碼。通過此壓縮編碼方式,經(jīng)度緯度信息可以通過17比特完成編碼。
除了實現(xiàn)位置報文的奇偶編碼外,保證各類消息具有正確更新速率也是本系統(tǒng)著重解決的問題之一。假設(shè)歷史真實航跡文件第n行消息時間戳為tn,n=1,2…。ADS-B Encoder模塊設(shè)定計時器,得到系統(tǒng)累積運行時間tr。對于第n行消息,若tn-t1≤tr,則將該行對應(yīng)報文傳遞出去。
3) Baseband Signal Generator模塊在接收到ADS-B報文后,按照圖4所示ADS-B消息格式,完成前導(dǎo)脈沖生成及PPM調(diào)制,并根據(jù)采樣率及MAX5864芯片數(shù)模轉(zhuǎn)換參數(shù),生成脈沖幅度為127的I/Q兩路數(shù)字基帶信號,并將I/Q兩路基帶信號以交錯形式轉(zhuǎn)換為串行數(shù)據(jù)流輸出。
對于多航班情況,Baseband Signal Generator模塊在1秒內(nèi)會接收到多條ADS-B報文,在生成ADS-B信號時,為了避免兩兩之間互相干擾,給生成的每條ADS-B信號前添加500 μs的保護間隔,即根據(jù)采樣率添加對應(yīng)數(shù)量的0。另外,當Baseband Signal Generator模塊無ADS-B報文數(shù)據(jù)輸入時,則模塊輸出數(shù)據(jù)流全為0。
4) 將Baseband Signal Generator模塊輸出的數(shù)據(jù)流通過IChar To Complex模塊轉(zhuǎn)換為復(fù)信號后,通過Osmocom Sink模塊傳入HackRF進行上變頻,完成信號的發(fā)射。
根據(jù)如圖5所示工作流程,ADS-B接收機核心功能可以分別自定義為Preamble Detector模塊、ADS-B Demodulator模塊以及ADS-B Decoder模塊。搭建ADS-B接收機GRC流圖如圖7所示。
接收機系統(tǒng)具體工作流程如下:
1) 通過Osmocom Source模塊驅(qū)動HackRF,完成I/Q兩路數(shù)字基帶信號的采集,并將兩路8比特有符號整數(shù)做歸一化處理。
如圖7所示,Osmocom Source模塊主要設(shè)置HackRF設(shè)備序列號、采樣率、中心頻率以及表1所示3種增益。所設(shè)置增益值應(yīng)滿足表1所示范圍及步長,且應(yīng)根據(jù)周邊環(huán)境,設(shè)定合適的大小。例如,若基帶增益設(shè)置太小,則接收不到ADS-B信號,太大會導(dǎo)致基帶噪聲過大。
2) 將Osmocom Source模塊輸出的復(fù)信號取模平方后,輸入Preamble Detector模塊進行前導(dǎo)脈沖檢測。前導(dǎo)脈沖檢測性能直接影響ADS-B接收機的性能。
在進行前導(dǎo)脈沖檢測時,本系統(tǒng)首先通過估計噪聲基底來設(shè)定閾值,然后根據(jù)閾值對采樣數(shù)據(jù)進行判決處理,對判決后的數(shù)據(jù)進行一階差分處理,得到上升沿和下降沿位置,在剔除異常值后,可以得到有效脈沖位置序列。遍歷序列內(nèi)有效脈沖,以其上升沿為起始,將其后8 μs數(shù)據(jù)與標準前導(dǎo)脈沖數(shù)據(jù)進行匹配,若匹配成功,則判定此有效脈沖處為一個ADS-B信號。為減少運算,對于匹配成功的有效脈沖,其后120 μs內(nèi)脈沖不參與匹配運算。
GNU Radio每個模塊都包含一個數(shù)據(jù)處理線程,且同步類型模塊每個處理周期輸出的數(shù)據(jù)長度為固定值,設(shè)其值為N。在進行前導(dǎo)脈沖檢測過程中,如圖8所示,上一處理周期讀取的數(shù)據(jù)可能包含前導(dǎo)脈沖的局部,為保證此類前導(dǎo)脈沖不被漏檢,在當前處理周期,Preamble Detector模塊將讀指針rptr向回移動M個位置,M為一個標準前導(dǎo)脈沖對應(yīng)的數(shù)據(jù)長度。
圖8 前導(dǎo)脈沖模塊數(shù)據(jù)讀取方式
Preamble Detector模塊在檢測出信號的數(shù)據(jù)流位置處添加鍵名為burst的標簽,且應(yīng)為標簽設(shè)置正確的位置偏差值。例如,對于圖8檢測出的第2個前導(dǎo)脈沖,其處于當前周期讀取數(shù)據(jù)的第L位,若Preamble Detector模塊已累計運行k個處理周期,則這個前導(dǎo)脈沖在數(shù)據(jù)流中位置偏差為:
offset=kN+L-M
(1)
3) ADS-B Demodulator模塊遍歷數(shù)據(jù)流中標簽信息,找到ADS-B消息數(shù)據(jù)塊起止位置,完成PPM解調(diào),得到112比特報文數(shù)據(jù),并對每一位數(shù)據(jù)進行置信度分析,并將報文數(shù)據(jù)及置信度值通過消息傳遞給ADS-B Decoder模塊。對于某1 μs數(shù)據(jù),若前0.5 μs和后0.5 μs信號平均功率分別為P1和P0,則置信度定義為:
(2)
4) ADS-B Decoder模塊接收到112比特數(shù)據(jù)及置信度消息后,首先進行CRC校驗,對于CRC校驗不通過的報文,將置信度最低的位取反,然后進行二次校驗。最后對所有校驗通過的報文按照DF17報文格式進行解碼,并將解碼結(jié)果以明文形式通過網(wǎng)絡(luò)分發(fā)出去。
為增加ADS-B信號生成的真實性,以2019年10月28日天津機場周邊部分航班數(shù)據(jù)生成歷史航跡文件。ADS-B Encoder模塊讀取航跡文件,時序生成編碼報文,并將其以消息形式傳遞給下個模塊。利用GNU Radio中Message Debug模塊打印ADS-B Encoder模塊傳遞的某條消息如下:
(((TargetAddress.7869729)),(141 120 21 33 88 49 149 55 159 73 154 38 48 29))
其中,TargetAddress部分對應(yīng)航空器地址的十進制形式,如7869729對應(yīng)地址0x781521,后面括號內(nèi)141(0x8D)等14個字節(jié)對應(yīng)112比特報文數(shù)據(jù),經(jīng)專業(yè)DF17報文解析軟件解碼,驗證了編碼的正確性。
在完成前導(dǎo)脈沖生成及PPM調(diào)制后,得到基帶信號波形如圖9所示,為了顯示效果,圖9僅展示前導(dǎo)脈沖及20 μs左右數(shù)據(jù)。為驗證PPM調(diào)制正確性,對數(shù)據(jù)塊前8 μs數(shù)據(jù)進行手動解調(diào),結(jié)果如圖9所示,為二進制10001101,即0x8D,與報文實際一致。
圖9 ADS-B發(fā)射機界面
為了進一步分析ADS-B發(fā)射機所發(fā)射信號波形,將中心頻率設(shè)置為150 MHz,生成的信號直接輸入示波器,局部觀測結(jié)果如圖10所示。
圖10 ADS-B發(fā)射機生成信號
從圖10可以看出,生成的ADS-B信號格式規(guī)范,符合Do-260B標準。本系統(tǒng)ADS-B信號最大發(fā)射功率為10 dBm。為了避免對周邊環(huán)境進行干擾,當中心頻率設(shè)置為1 090 MHz時,本系統(tǒng)利用同軸電纜加衰減器的形式將ADS-B信號輸出到ADS-B接收機。
ADS-B接收機利用圖7所示GRC流圖,依次完成前導(dǎo)脈沖檢測、PPM解調(diào)及解碼等工作。由于Preamble Detector模塊為每一個檢測到的信號添加了鍵值為burst的標簽,QT GUI Time Sink模塊以此標簽作為觸發(fā)條件,著重顯示檢測到的ADS-B信號波形,具體如圖11中Detected Signal所示。
圖11 ADS-B接收機界面
ADS-B信號完成PPM解調(diào)后,會得到112比特報文數(shù)據(jù),且每一位都對應(yīng)一個置信度值。如圖12所示為某條報文部分位的置信度分析結(jié)果。
圖12 置信度分析
從圖12可以看出,若置信度數(shù)值為正,則該數(shù)據(jù)位為1,反之為0,且置信度數(shù)值的絕對值越大,置信度越高。
ADS-B發(fā)射機發(fā)射功率大小可以通過調(diào)整中頻增益實現(xiàn),經(jīng)過測試,ADS-B接收機接收靈敏度為-68 dBm。利用ADS-B發(fā)射機發(fā)射ADS-B消息共27 131條,當信噪比為16 dB時,經(jīng)過多次實驗,CRC校驗成功的報文數(shù)目均值為24 181,正確檢測率約為89%。
ADS-B Decoder模塊將解碼結(jié)果通過網(wǎng)絡(luò)分發(fā)至指定服務(wù)器。服務(wù)器將接收到的ADS-B航跡信息實時整理成JSON格式數(shù)據(jù),供百度地圖訪問并顯示,如圖13為基于百度地圖實時顯示的部分航班:
圖13 ADS-B信息動態(tài)顯示
經(jīng)過對比分析,圖13中所示航班信息與歷史航跡文件中信息一致,進一步驗證了收發(fā)系統(tǒng)的可行性。
為設(shè)計廉價、功能易擴展的ADS-B收發(fā)系統(tǒng),本文將ADS-B信號收發(fā)處理過程中信號生成、前導(dǎo)脈沖檢測以及報文編解碼等核心功能在GNU Radio平臺中以自定義模塊方式實現(xiàn),并根據(jù)ADS-B信號處理流程搭建信號流圖,使用HackRF實現(xiàn)了ADS-B信號的發(fā)射與接收。所設(shè)計系統(tǒng)不僅方便存儲、顯示各階段信號數(shù)據(jù),還可以將解碼得到的航班信息傳送至百度地圖中進行動態(tài)顯示。系統(tǒng)中核心模塊具有開放性,利于開展創(chuàng)新性項目研究,例如,通過更新本系統(tǒng)中前導(dǎo)脈沖檢測模塊算法,可以進一步開展ADS-B微弱信號檢測等方面研究。另外,由于本系統(tǒng)具有ADS-B信號發(fā)射功能,在開展ADS-B信號防欺騙、信號到達方向估計等研究時,可以以本系統(tǒng)作為特定的ADS-B信號源,具有重要的科研價值。