自動(dòng)相關(guān)監視廣播波形 能被檢測和解碼的無(wú)線(xiàn)信號無(wú)處不在。利用當今的軟件定義無(wú)線(xiàn)電(SDR)硬件,像ADI公司的集成RF捷變收發(fā)器AD9361/AD9364等,很容易接入這些信號。商業(yè)航空器的自動(dòng)相關(guān)監視廣播(ADS-B)傳輸提供了一個(gè)現成的無(wú)線(xiàn)信號,利用它可演示基于A(yíng)D9361和Xilinx Zynq-7000 All Programmable SoC的快速原型開(kāi)發(fā)流程。 商業(yè)航空器利用ADS-B發(fā)射機向空中交通管制員報告其位置、速度、高度和航空器ID。國際民用航空組織(ICAO) S模式超長(cháng)電文規范定義了飛行數據格式。ADS-B正在向全世界推廣,以便構建現代化空中交通管制和避碰系統。 它已被歐洲采用,美國正在逐漸引入。 S模式超長(cháng)電文標準詳細規定了RF傳輸格式和編碼數據字段。 應答器傳輸具有如下特性: ·發(fā)射頻率: 1090 MHz ·調制: 脈沖位置調制(PPM) ·數據速率: 1 Mbps ·消息長(cháng)度: 56 μs或112 μs ·24位CRC校驗和 調諧頻率和帶寬完全在A(yíng)D9361 RF收發(fā)器的能力范圍之內,收到的I/Q樣本可利用多種軟件或嵌入式平臺選項進(jìn)行檢測和解碼。 本文將討論如何利用一個(gè)基于A(yíng)D9361的接收機平臺來(lái)捕捉這些S模式信號,然后利用MATLAB和Simulink開(kāi)發(fā)一個(gè)能夠解碼消息的算法。 該算法的最終目標是將該解決方案部署到Zynq SoC平臺上,例如Avnet PicoZed SDR系統化模塊(SOM)。 接收機設計挑戰 S模式消息有短(56 μs)和長(cháng)(112 μs)兩種。 短消息包含消息類(lèi)型、航空器識別號和循環(huán)冗余校驗(CRC)和。 長(cháng)消息則還包含高度、位置、速度和飛行狀態(tài)信息。 無(wú)論何種情況,S模式傳輸均從一個(gè)8 μs前同步碼開(kāi)始。 接收機通過(guò)此前同步碼確定一條有效消息正在傳輸,此前同步碼還能幫助接收機確定消息位從何時(shí)開(kāi)始。 詳情參見(jiàn)圖1。 圖1. S模式消息結構 S模式波形相當簡(jiǎn)單,但要成功接收并解碼消息,仍有若干挑戰需要解決。 1.接收環(huán)境通常是長(cháng)時(shí)間空閑中穿插著(zhù)非常短的消息;如果發(fā)射信號的航空器距離接收機很遠,收到的信號可能非常弱。 傳統波形也會(huì )以1090 MHz的頻率發(fā)射。 接收機需要利用前同步碼在擁堵的頻段中識別高和低兩個(gè)幅度的S模式傳輸。 2.在1 μs位間隔內,各位的可能模式有兩種。 前0.5μs為ON且后0.5μs為OFF,表示邏輯1。 前0.5 μs為OFF且后0.5μs為ON,表示邏輯0。 位判定的依據是基于時(shí)間的模式,因此,接收機需要利用前同步碼準確找出消息位開(kāi)始的I/Q樣本。 3.S模式消息由88個(gè)信息位和24個(gè)校驗和位組成。 接收機需要能夠在正確的時(shí)間清除寄存器、作出位判定、計算校驗和并讀取校驗和寄存器。 為使接收機正確工作,必須對時(shí)序進(jìn)行控制。 4.對于嵌入式設計,解碼過(guò)程必須逐個(gè)樣本進(jìn)行。 存儲大量數據再進(jìn)行批處理的接收機設計,對嵌入式系統來(lái)說(shuō)是不現實(shí)的。 AD9361等強大的RF前端與MATLAB之類(lèi)的科技計算語(yǔ)言相結合,可大大簡(jiǎn)化與此類(lèi)傳輸的檢測和解碼相關(guān)的問(wèn)題。 MATLAB和信號處理工具箱中的函數可用來(lái)識別同步模式,計算噪底,作出位判定,以及計算校驗和。 MATLAB中的條件和執行控制函數可簡(jiǎn)化控制邏輯。 利用AD9361 SDR平臺很容易訪(fǎng)問(wèn)測試數據,無(wú)論是從二進(jìn)制或文本文件讀取,還是以流形式直接輸入MATLAB。 最后,MATLAB是解釋性語(yǔ)言,因而很容易與數據進(jìn)行交互,嘗試不同的方法,以交互方式開(kāi)發(fā)解決方案。 在MATLAB中建模并驗證S模式接收機算法 對下述內容和MATLAB源代碼感興趣的讀者,可在A(yíng)nalog Devices GitHub庫中找到相關(guān)文件。 入門(mén)級函數為 ad9361_ModeS.m,同時(shí)提供了此函數調用的文件。 設計接收機算法的第一步是訪(fǎng)問(wèn)一些源數據。 許多航空器現在都配備了S模式應答器,因而只需將接收機調諧到1090 MHz的廣播頻率便可捕獲本地傳輸。 在我們的例子中,可以使用Zynq SDR快速原型開(kāi)發(fā)平臺。 ADI公司提供了一個(gè)MATLAB系統對象,它能通過(guò)以太網(wǎng)從FMCOMMS平臺接收數據。該系統對象允許用戶(hù)選擇調諧頻率和采樣速率,利用無(wú)線(xiàn)電硬件收集接收樣本,以及將接收樣本作為MATLAB變量直接送入MATLAB工作空間。 所需代碼非常少,幾行代碼便可設置MATLAB系統對象,再用幾行代碼設置FMCOMMS3,還有幾行代碼用來(lái)捕獲I/Q樣本并將其寫(xiě)入一個(gè)MATLAB變量。 代碼示例如圖2、圖3和圖4所示。 圖2. 設置MATLAB系統對象的MATLAB代碼示例 圖3. 配置FMCOMMS3板的MATLAB代碼示例 圖4. 捕獲I/Q樣本并將其寫(xiě)入Rx變量的MATLAB代碼示例 我們使用了一些基于這些命令的代碼,以12.5 MHz的采樣速率捕獲數個(gè)數據集。 選擇12.5 MHz速率是為了提供足夠的樣本來(lái)使前同步碼與第一個(gè)消息位精密對齊,并通過(guò)求均值方法消除用來(lái)作出位判定的樣本中的噪聲。 捕捉一百萬(wàn)樣本的結果如圖5所示。 圖5. 1090 MHz數據捕捉示例 在這個(gè)較短的數據集中,有14個(gè)信號從噪底中凸顯出來(lái)。 在這14個(gè)信號中,有兩個(gè)是S模式消息。 其余是傳統或雜散信號,應予以?huà)仐墶?放大樣本號604000附近的區域,可看到其中一個(gè)有效消息(圖6)。 圖6. 單個(gè)S模式消息 在此圖中,可以清楚看到前同步碼,PPM調制引起的位躍遷也很明顯。 即使面對如此清晰的信號,通過(guò)目視檢查解碼各位也需要很好的視力和極大的耐心。 顯然,需要一個(gè)自動(dòng)化程序來(lái)解碼這些消息。 MATLAB非常適合于開(kāi)發(fā)這種程序。 用于接收和解碼S模式消息的MATLAB代碼可概述如下: 1.利用filter()函數計算一個(gè)短時(shí)間窗口上的噪底和前同步碼相關(guān)性。 我們的解決方案使用75個(gè)樣本,相當于6 μs。 2.當前同步碼相關(guān)性比噪底大一個(gè)相當大的倍數時(shí),啟動(dòng)尋找第一消息位樣本的邏輯。 a.此閾值可主觀(guān)選擇。 它應足夠小,以便檢測弱信號,但又應足夠大,以防出現大量誤報。 我們選擇比噪底高10倍的值,這是一個(gè)能夠捕捉大多數可解碼消息的合理閾值。 b.前同步碼模式產(chǎn)生數個(gè)峰值。 最佳匹配是第一個(gè)6 μs,因此存儲第一峰值,開(kāi)始尋找第一消息位,并檢查接下來(lái)的3 μs是否有一個(gè)更大的峰值。 若有,則存儲新峰值,重新開(kāi)始尋找第一消息位。 c.找到最大峰值時(shí),于2 μs后開(kāi)始解碼消息位。 d.圖7顯示了噪底(綠色)以及將理想前同步碼與輸入數據相關(guān)的結果。 噪底上有多個(gè)峰值,但有意義的峰值是幅度最大的峰值。 第一消息位樣本出現在該峰值后2 μs處。 圖7. 噪底和前同步碼相關(guān)性的計算 3.對于每一位,將前0.5μs和后0.5μs的樣本幅度分別求和。 哪一個(gè)和較大決定該位是邏輯1還是邏輯0。 4.一邊作出位判定,一邊計算校驗和。 當第一位到達時(shí),需要某種控制邏輯來(lái)復位CRC寄存器,計算88位的校驗和,然后在最后的24位期間清空CRC寄存器。 若接收位匹配校驗和,則ADS-B消息有效。 5.根據S模式標準解析消息位(參見(jiàn)圖8)。 圖8. 解碼后的S模式消息 上圖來(lái)自MATLAB命令窗口,顯示了從一百萬(wàn)樣本數據集中成功解碼的兩條消息。 圖中給出了構成88位消息和24位校驗和的十六進(jìn)制字符,解碼過(guò)程的結果顯示了航空器ID、消息類(lèi)型以及航空器速度、高度和位置。 MATLAB提供了功能強大的數學(xué)和信號處理語(yǔ)言,使我們能夠相對輕松地解決此類(lèi)問(wèn)題。 用于處理數據樣本并最終解碼消息的MATLAB代碼很短,只有200行。 此外,MATLAB是解釋性語(yǔ)言,因而很容易以交互方式嘗試不同的設計思想,快速確定可行的解決方案。 我們對不同數據集測試了多種時(shí)序機制、閾值和噪聲水平,最終獲得一個(gè)滿(mǎn)意的程序。 該MATLAB代碼已針對本地空域飛行的航空器發(fā)出的信號進(jìn)行了測試,解碼的消息也對照airframes.org和flight-aware.com等信息源進(jìn)行了檢查。 硬件和代碼表現得非常好,我們已經(jīng)能夠解碼距離50英里的飛機發(fā)出的信號。 實(shí)施路徑 MATLAB是一個(gè)出色的環(huán)境,可讓用戶(hù)在PC上測試設計思想并運行算法,但如果最終目標是產(chǎn)生要用在嵌入式平臺(例如Zynq SoC)上的軟件或HDL,那么Simulink是一個(gè)不錯的解決方案。 Simulink非常適合針對可編程器件的硬件細化建模工作。 一個(gè)很好的工作流程是先用MATLAB開(kāi)發(fā)并驗證算法,然后將設計轉換成Simulink,沿著(zhù)開(kāi)發(fā)路徑向前推進(jìn),直至獲得最終硬件實(shí)現方案。 幸運的是,該算法的MATLAB代碼是逐個(gè)樣本地處理數據,因此可以相當輕松地轉換為Simulink。 與200行MATLAB代碼相比,Simulink模型很容易顯示和描述(參見(jiàn)圖9)。 圖9. S模式檢測和解碼算法的Simulink模型 在圖9中,可以看到解碼的第一步是計算噪底和前同步碼相關(guān)性。 這些計算使用數字濾波器模塊。 時(shí)序控制模塊利用Stateflow?實(shí)現,后者是一個(gè)狀態(tài)機工具,用于為解碼算法的其它部分產(chǎn)生時(shí)序、復位和控制信號。 對于想要將控制邏輯與數據流分開(kāi)的模型,Stateflow非常有用。 一旦激活時(shí)序和觸發(fā)信號,名為BitProcess的模塊便會(huì )接受I/Q輸入樣本并計算數據位,然后CRC_Check模塊計算校驗和。 消息解析仍然發(fā)生在由該Simulink模型驅動(dòng)的MATLAB腳本中。 深入觀(guān)察該模型,可以看到令Simulink適合嵌入式開(kāi)發(fā)的幾個(gè)特性,尤其是針對Zynq SoC將設計劃分為多個(gè)功能,以及產(chǎn)生HDL代碼和C代碼。 1.Simulink具有出色的定點(diǎn)支持能力,用戶(hù)可以構建并測試設計的位真(bit-true)版本。 各個(gè)模塊允許用戶(hù)設置模型中數學(xué)運算的字長(cháng)和小數長(cháng)度。 用于計算前同步碼相關(guān)性的數字濾波器模塊就是一個(gè)很好的例子(圖10)。 用戶(hù)可以設置計算的舍入模式和溢出行為(對于HDL中的數學(xué)運算,Floor和Wrap是最簡(jiǎn)單的選擇)。 此外,用戶(hù)可以為產(chǎn)品和濾波器的累加器操作指定不同的字長(cháng)和小數精度(圖11)。 用戶(hù)可以使用映射到接收機ADC的字長(cháng)選擇,并且利用硬件乘法器,例如Zynq SoC的DSP48分片內部的18位× 25位乘法器。 圖10. 用于前同步碼相關(guān)性的Simulink數字濾波器模塊,12位數據類(lèi)型 圖11. 定點(diǎn)數據類(lèi)型設置 2.嵌入式設計常常具有多種工作模式和條件執行算法。 Stateflow特別善于管理這些控制信號。 Stateflow以可視化方式呈現S模式消息檢測和解碼所需的控制邏輯。 在下面的圖12中,可以看到邏輯中的如下?tīng)顟B(tài): a.SyncSearch: 尋找捕獲樣本中的前同步碼 b.WaitForT0: 尋找第一個(gè)消息位的開(kāi)始 c.BitProcess: 啟用位處理 d.EmptyReg: 清空校驗和寄存器并將這些位與位處理輸出進(jìn)行比較 當檢測和解碼算法在不同狀態(tài)間流轉時(shí),Stateflow模塊產(chǎn)生相關(guān)信號以啟用位處理,復位位判定計數器和校驗和寄存器,以及在S模式消息結束時(shí)讀出校驗和位。 圖12. 解碼S模式消息的Stateflow流程圖 3.Simulink模塊庫中既有高度概括的模塊,也有非常精細的模塊,工程師可以根據需要選擇使用。 數字濾波器、FFT和數控振蕩器等是高級模塊,利用這些模塊很容易構建信號處理設計。 如果需要更精確地控制設計,例如針對速度或面積進(jìn)行優(yōu)化,工程師可以使用單位延遲、邏輯運算符(如XOR)和開(kāi)關(guān)等低級模塊。 該模塊中的24位校驗和便是利用這些低級模塊構建的反饋移位寄存器(圖13)。 圖13. 用于S模式校驗和計算的反饋移位寄存器 該Simulink模型是用于檢測和解碼S模式消息的MATLAB算法的硬件化版本。 Simulink是一個(gè)很有用的工具,填補了MATLAB中編寫(xiě)的行為算法與嵌入式硬件的實(shí)現代碼之間的空白。 您可以將針對硬件的細化工作引入Simulink模型,運行模型,驗證您所做的變更沒(méi)有破壞解碼算法。 結論 Zynq SDR快速原型開(kāi)發(fā)平臺和MathWorks軟件的結合,為通信工程師提供了一種全新且靈活的方式來(lái)將無(wú)線(xiàn)接收機設計理念快速變成原型。 AD9361/AD9364捷變寬帶RF收發(fā)器的高度可編程能力和性能,加上硬件與MATLAB環(huán)境之間的簡(jiǎn)單連接,讓大量不同且有趣的無(wú)線(xiàn)信號可以為工程師所用。 使用MATLAB的工程師可以快速?lài)L試各種設計思想并確定有前途的解決方案。 如果設計的最終目標是嵌入式處理器,工程師可以通過(guò)Simulink工具利用硬件相關(guān)主意優(yōu)化設計,最終獲得用于對處理編程的代碼。 這種工作流程可降低無(wú)線(xiàn)接收機設計對工程師技能的要求,縮短從概念到工作原型的開(kāi)發(fā)周期。 |