推動現代化空中交通管制 全球逐漸導入ADS-B
由民航機所發(fā)送出來的自動相關監(jiān)視廣播(ADS-B),提供容易取得的無線電訊號,可用來展示基于與Xilinx Zynx-7000 All Programmable SoC連接的AD9361的快速原型建構流程。
民航機使用ADS-B傳送器向空中交通管制者(Air Traffic Controllers)報告它們的位置、速度、高度及飛機標識符,其飛行數據格式是定義于國際民航組織(ICAO)的S模式擴展電文(Mode S Extended Squitter)標準中。目前ADS-B正在全球各地導入中,以推進空中交通管制及防撞系統的現代化。除了歐洲已正式采用外,美國也正在逐步普及中。
S模式擴展電文標準提供RF傳送格式與編碼數據字段的細節(jié),而轉發(fā)器(Transponder)的傳送具有以下的特性:
.傳送頻率:1090MHz
.調變:脈沖位置調變(PPM)
.數據速率:1Mbit/s
.訊息長度:56微秒(μs)或112μs
.24位CRC檢查總和(Checksum)
RF收發(fā)器AD9361能涵蓋整個調諧頻率(Tuning Frequency)及帶寬,而收到的I/Q取樣值,可透過多種的軟件或嵌入式平臺選項,來加以偵測及解碼。
本文將討論如何使用基于AD9361的接收平臺,來補捉這些S模式訊號,然后再透過MATLAB及Simulink來開發(fā)能夠譯碼這些訊息的算法。此算法的最終開發(fā)目標,在于能將解決方案布局到Zynq SoC平臺上,例如Avnet的PicoZed SDR模塊化系統(SoM)。
克服四大挑戰(zhàn) 助S模式接收/譯碼訊息
S模式訊息短為56μs,長則可達112μs。短訊息包含訊息類型、飛機標識符、以及一循環(huán)冗余檢測(CRC)檢查總和,長訊息則還包含高度、位置、速度及飛行狀態(tài)。但不論是何者,S模式傳送都是以8μs前置訊號(Preamble)為開始,接收器可使用此前置訊號的式樣(Preamble Pattern)得知有效訊息正要被傳送,此前置訊號式樣還可協助接收器判斷訊息的位何時開始。相關細節(jié)請參考圖1。
?
圖1 S模式訊息的架構
?
S模式的波形相當簡單,但要成功地接收及譯碼被傳送的訊息,還是有一些挑戰(zhàn)須要克服。
一、接收環(huán)境通常包含非常短且穿插長閑置期間(Idle Period)的訊息,而當發(fā)射訊息的飛機與接收器的距離很遠時,接收到的訊號還可能會相當地微弱。
由于舊(Legacy)波形也是以1090MHz來傳送,因此接收器必須利用前置訊號,在擁塞的頻帶中辨識出高與低振幅的S模式傳送。
二、在每一個1μs的位期間內,位有兩種可能的式樣。邏輯1為第一個1/2μs為ON,而第二個1/2μs為OFF。邏輯0則是第一個1/2μs為OFF,而第二個1/2μs為ON。由于位是以時基式樣(Time-based Patterns)來進行判定,接收器必須使用前置訊號來正確地找出訊息位開始時的I/Q取樣。
三、S模式訊息是由八十八個信息位及二十四個檢查總和位所組成。接收器必須能清除緩存器、判定位、計算檢查總和、并在正確的時間點讀取檢查總和緩存器。時序控制對于接收器的正常動作而言是必要的。
四、對于嵌入式設計來說,譯碼處理必須以一個取樣接一個取樣的方式來進行。將大量的批處理用數據儲存起來,對于嵌入式系統而言,并非切合實際的接收器設計。
將AD9361這類功能強大的RF前端,與MATLAB這類技術運算語言加以結合,能減化偵測及譯碼這些傳送數據的相關問題。MATLAB及Signal Processing Toolbox所提供的功能,可用來辨識同步式樣(Sync Pattern)、計算噪聲基準 (Noise Floor)、判定位以及計算檢查總和。MATLAB中的條件型(Conditional)及執(zhí)行控制(Execution Control)功能,可簡化控制邏輯。測試數據的取得相當容易,包括從二進制或文字格式的檔案,或是也可使用AD9361SDR平臺直接串流入MATLAB。最后,MATLAB的解譯特性(Interpreted Nature)有助于與數據之間的互動、嘗試不同的方法,以及以互動方式開發(fā)出解決方案。
MATLAB中S模式接收器算法模型化與驗證
設計接收器算法的第一步,是取得一些資源數據(Source Data)。由于目前許多飛機都配備有S模式的轉發(fā)器,因此可以只調整接收器到1090MHz的廣播頻率,即可接收到本地傳送。舉例來說,可以使用Zynq SDR快速原型平臺。
ADI提供的MATLAB System Object,可以透過以太網絡從FMCOMMS平臺接收資料。
System Object能夠讓用戶可以選擇諧調頻率以及取樣率、使用無線電硬件收集接收取樣值、并且可以將接收到的取樣值直接帶入MATLAB的工作區(qū)中以作為MATLAB變量。
System Objec#e#
所需的程序代碼非常短,其中一小部份用來設置MATLAB System Object,一部份負責FMCOMMS3的設置,另外有一部份則是捕捉I/Q取樣并寫入MATLAB變數中。圖2到圖4所示為此類程序的例子。
?
圖2 用于設定MATLABS System Object的MATLAB程序代碼范例
?
?
圖3 用于配置FMCOMM3電路板的MATLAB程序代碼范例
?
?
圖4 用于捕捉I/Q取樣值并寫入Rx變量的MATLAB程序代碼范例
?
使用基于這些指令的程序,以12.5MHz的取樣率來捕捉一些數據組。之所以選擇12.5MHz的取樣率,是為提供足夠的取樣值以便微調前置訊號與第一個訊息位之間的對位,并利用平均化處理,去除掉用來判定位的取樣中的噪聲。圖5是由一百萬筆取樣值所得出的結果。
?
圖5 1090MHz上的取樣數據捕捉
?
在此短數據組中,有十四個訊號突顯于噪聲基準之上,其中有兩個S模式訊息,其他則是應被排除的舊或偽(Spurious)訊號。如果聚焦并展開取樣604000一帶的區(qū)間,可觀察到有效的訊息之一(圖6)。
?
圖6 單一S模式訊息
?
在此圖中,可清楚地看出前置訊號部份,由PPM調變所產生的位轉換(Transition)也明顯可見。但即使是如此干凈的訊號,如果要藉由檢視方式來譯碼位,還是需要好的眼力及高的耐性。因此一套能對這些訊息進行自動譯碼的程序是必要的,而MATLAB正是開發(fā)此類程序的良好解決方案。
用于接收及譯碼S模式訊息的MATLAB程序代碼,其內容可摘要說明如下。 一、使用Filter()函式,計算一短時間窗內的噪聲基準及前置訊號關聯性(Preamble Correlation)。在此解決方案中所使用的時間窗是七十五個取樣值,相當于是6μs。
二、當前置訊號關聯性超過噪聲基準達一定程度時,啟動邏輯以尋找第一個訊息位取樣值。
a.此臨界值的選擇是很主觀的,它應該要小到足以偵測到微弱訊號,但又要大到足以避免許多的假正值(False Positive)。選擇比噪聲基準大十倍以上的值來作為一合理的臨界值,以補捉大部份的可譯碼訊息。
b.前置訊號的式樣會產生多個峰值,由于最佳的符合者會出現在最先的6μs,因此先儲存第一個峰值,開始尋找第一個訊息位,并觀察在接下來的3μs內是否有出現更大的峰值。如果確實有出現,則儲存此新的峰值,并重置第一個訊息位起端的尋找動作。
c.當最大峰值出現時,待2μs后開始訊息位的譯碼。
d.圖7中顯示了噪聲基準,以及將一理想的前置訊號關聯到輸入數據所得到的結果。其中有數個高過噪聲基準的峰值,但關注的是具有最大振幅者。第一個訊息位的取樣值會在峰值的2μs后出現。
?
圖7 噪聲基準的計算及前置訊號關聯性
?
三、對于每一個別的位,分別將前1/2μs及后1/2μs取樣的振幅加總,其中總和較大者決定此位是邏輯1或邏輯0。
四、在位判定完成時,計算出檢查總和。這需要一些控制邏輯來負責在第一位到達時重置CRC緩存器、為88位計算出檢查總和、并為最后的24位清空CRC緩存器。當接收到的位與檢查總和符合時,ADS-B訊息才算有效。
五、根據S模式標準解析訊息位(圖8)。
?
圖8 經譯碼的S模式訊息
?
圖8中MATLAB指令窗口所顯示的,是由一百萬筆取樣數據組中,成功譯碼出來的兩個訊息。
顯示的內容包括了構成88位訊息及24位檢查總和的十六進制字符,而譯碼處理的結果則顯示了飛機ID、訊息類型、及飛行速度、高度及位置。
MATLAB提供數學及訊號處理語言,以便解決此問題。用來處理數據取樣及最終將訊息譯碼出來的MATLAB程序代碼其實很短,只有兩百行左右。此外,MATLAB的解譯特性,可讓設計構想的交互式試作變得容易,并能很快地找出可行的解決方案。多種時序機制(Timing Mechanisms)、臨界值(Thresholds)及噪聲位準,會透過各種數據組來加以測試,以產生令人滿意的程序。
此MATLAB程序代碼已經使用來自本地飛行區(qū)中的飛機訊號上測試過,而譯碼出來的訊息也已經和Airframes.org及Flightaware.com等這類來源比對檢查過。依得到的結果來看,硬件與程序代碼都有較佳表現,可對來自50英里遠處飛機的訊號進行譯碼。
完整工作流程 幫助嵌入式平臺開發(fā)
MATLAB是在個人計算機(PC)上測試設計概念并執(zhí)行算法的較佳環(huán)境,但如果最終的目標是要產生用于嵌入式平臺上的軟件或HDL,特別是像Zynq SoC這類產品,則Simulink是較好的的解決方案。
Simulink特別適用于針對可編程組件所需的特定硬件開發(fā)的模型化。良好的工作流程,是利用MATLAB開發(fā)及驗證算法,再將設計轉譯為Simulink,并繼續(xù)開發(fā)流程到最終硬件完成。
此算法的MATLAB程序代碼是以一次一筆取樣值的方式處理資料,因此轉換到Simulink是較直接的。相對于兩百行的MATLAB程序代碼,Simulink模型的顯示及敘述更為簡單(圖9)。
?
圖9 S模式偵測及譯碼算法的Simulink模型
?
圖9中可觀察到,解碼的第一步是計算噪聲基準及與前置訊號的關聯性,數字濾波功能塊可用來處理這些計算。時序(Timing)控制功能塊則是由Stateflow來完成,這是用來為其他的譯碼算法產生時序、重置、及控制訊號的狀態(tài)機(State Machine)工具。Stateflow對于要將控制邏輯從數據流分開來的模型而言非常有用。
一旦時序及觸發(fā)被啟動,名為BitProcess的功能塊便會開始接收輸入I/Q取樣,并計算出數據位,而CRC_Check功能塊則會計算出檢查總和。訊息分析仍會在此Simulink模型所驅動的MATLAB腳本中進行。
如果深入了解模型,可以發(fā)現Simulink的一些特性讓它適合于嵌入式的開發(fā),特別是在于將設計分割為Zynq SoC專屬的函式上,以及產生HDL碼及C程序代碼。
一、Simulink有定點(Fixed-point)支持,因此可以為設計建立并測試Bit-true的版本。個別的功能塊,能為模型中的數學運算設定字長及分數長度。其中一個例子,就是用來計算前置訊號關聯性的數字濾波器功能塊(圖10),使用者可為其運算設定四舍五入模式及溢流(Overflow)行為(Floor及Wrap是以HDL所完成的數學中最簡單的選擇)。此外,也可以為乘積及濾波器的累加器運算,設定不同的字長及分數精準度(圖11)。并能使用對應于接收器ADC的字長選擇,以便利用如Zynq SoC DSP48 Slices中的18位×25位乘法器這類的硬件乘法器。
?
圖10 用于前置訊號關聯的Simulink數字濾波器方塊和12位數據類型
?
?
圖11 固定點數據類型的設定
?
二、嵌入式設計通常有許多的動作模式,及條件型執(zhí)行算法。Stateflow適合處理這些控制訊號。Stateflow提供偵測及譯碼S模式訊息所需控制邏輯的視覺表現。圖12中可看到邏輯的狀態(tài)為:
?
圖12 譯碼S模式訊息的Stateflow圖
?
a. SyncSearch(同步搜尋):在捕捉到的取樣中尋找前置訊號
b. WaitForT0(等待T0):尋找第一個訊息位的起始
c. BitProcess(位處理):啟動位處理
d. EmptyReg(清空緩存器):清空檢查總和緩存器,并將這些位與位處理的輸出做比較
當偵測與譯碼算法通過不同狀態(tài)而進展時,Stateflow功能塊會產生用來啟動位處理的訊號、重置位判定計數器及檢查總和緩存器、并讀出S模式訊息尾端的檢查總和位。
三、Simulink功能塊鏈接庫為工程師提供多種高階或高度細節(jié)的工作選項,它具有高階的功能塊,如數字式濾波器、FFT、及數值控制振蕩器,以利訊號處理設計的建立。如有需要更高精度的設計控制,像是速度或區(qū)域優(yōu)化,則可使用單位延遲(Unit delays)、邏輯操作元(Logic Operators,比方說XOR),以及切換開關等低階功能塊。此模型中的24位檢查總和,是使用這些低階功能塊所建立的回授移位寄存器(圖13)。
?
圖13 用于計算S模式檢查總和的回授平移緩存器
?
此Simulink模型是特定硬件版的MATLAB算法,它能偵測并譯碼S模式訊息。對于用MATLAB所寫成的行為算法與嵌入式硬件的完成碼之間的間隙來說,Simulink是能加以連接起來的有效工具。并可將特定硬件加工導入Simulink模型、運行模型、并驗證確認所做的修改是否會破壞譯碼算法。
Zynq SDR快速原型建構(Rapid Prototyping)平臺與MathWorks軟件的結合,為通訊工程師提供具彈性的方法,能將其無線接收器的設計構想快速轉換為產品原型。
捷變寬帶RF收發(fā)器所提供的可編程能力與性能,以及硬件與MATLAB環(huán)境之間的簡易連接性,讓工程師能取得多樣的無線電訊號。工程師能透過MATLAB,快速嘗試許多不同的設計構想,然后再選擇其中最可行的解決方案。如果設計的終極目標是嵌入式處理器,則工程師可使用Simulink以特定硬件構想來優(yōu)化設計,最后再產生可用于此處理器的程序代碼。此工作流程可降低設計無線接收器所需的技巧種類,并縮短從概念到可動作原型所需的開發(fā)周期。
評論