作者:Mike Donovan, Andrei Cozma, and Di Pu
可檢測和解碼的無線信號無處不在,使用當今的軟件定義無線電(SDR)硬件(如ADI公司集成RF捷變收發器AD9361/AD9364)可以輕松訪問這些信號。 ?1,2商用飛機的自動相關監視廣播 (ADS-B) 傳輸提供現成的無線信號,可用于演示基于連接到 Xilinx Zynq-7000 全可編程 SoC 的 AD9361 的快速原型制作流程。 商用飛機使用 ADS-B 發射器向空中交通管制員報告其位置、速度、高度和飛機 ID。??3飛行數據格式在國際民用航空組織 (ICAO) 的模式 S 擴展 Squitter 規范中定義。4ADS-B正在世界各地推出,以實現空中交通管制和防撞系統的現代化。它已經在歐洲被采用,并正在逐步引入美國。
S模式擴展分離器標準提供了RF傳輸格式和編碼數據字段的詳細信息。應答器傳輸具有以下特性:
發射頻率:1090兆赫
調制:脈沖位置調制 (PPM)
數據速率:1 Mbps
消息長度:56 μs 或 112 μs
24 位 CRC 校驗和
調諧頻率和帶寬完全在AD9361 RF收發器的能力范圍內,并且可以使用各種軟件或嵌入式平臺選項檢測和解碼接收到的I/Q樣本。
在本文中,我們將討論如何使用基于AD9361的接收器平臺捕獲這些S模式信號,然后使用MATLAB和Simulink開發可以解碼消息的算法。該算法的開發最終目標是將解決方案部署到Zynq SoC平臺上,例如安富利的PicoZed? SDR模塊系統(SOM)。
接收器設計挑戰
S模式消息為短(56 μs)或長(112 μs)。短消息包含消息類型、飛機標識號和循環冗余校驗 (CRC) 校驗和。長消息還包含高度、位置、速度和飛行狀態。無論哪種情況,S模式傳輸都以8 μs前導碼開始。接收方使用此前導碼模式來確定正在傳輸的有效消息,并幫助接收方確定消息位何時開始。有關詳細信息,請參見圖 1。5
圖1.模式 S 消息的結構。
S模式波形相當簡單,但成功接收和解碼傳輸的消息仍然存在一些挑戰。
接收環境通常包含非常短的消息,其中穿插著較長的空閑時間,當發射飛機距離接收器很遠時,接收的信號可能非常微弱。傳統波形也以 1090 MHz 傳輸。接收器需要使用前導碼來識別擁塞頻帶中的高幅度和低幅度模式S傳輸。
位在1 μs位間隔內具有兩種可能的模式之一。邏輯 1 在前 1/2 μs 內導通,在第二個 1/2 μs 內關閉。邏輯 0 在前 1/2 μs 內關閉,在第二個 1/2 μs 內導通。由于位決策是基于基于時間的模式做出的,因此接收器需要使用前導碼來準確找到消息位開始的I/Q采樣。
模式 S 消息由 88 個信息位和 24 個校驗和位組成。接收器需要能夠清除寄存器、做出位決策、計算校驗和并在正確的時間讀取校驗和寄存器。接收器需要定時控制才能正常工作。
對于嵌入式設計,解碼過程必須逐個樣本地工作。存儲大量數據以進行批處理并不是嵌入式系統的現實接收器設計。
AD9361等功能強大的RF前端與MATLAB等技術計算語言相結合,極大地簡化了與檢測和解碼這些傳輸相關的問題。MATLAB 和信號處理工具箱中的函數可用于識別同步模式、計算本底噪聲、做出位決策以及計算校驗和。MATLAB 中的條件和執行控制功能簡化了控制邏輯。從二進制或文本文件訪問測試數據,或使用AD9361 SDR平臺直接流式傳輸到MATLAB都很容易。最后,MATLAB 的解釋性質使得與數據交互、嘗試不同的方法以及交互式開發解決方案變得容易。?
在 MATLAB 中對模式 S 接收器算法進行建模和驗證
有興趣了解MATLAB源代碼的讀者可以在ADI公司的GitHub存儲庫中找到這些文件。入門級函數為 ad9361_ModeS.m,還提供了此函數調用的文件。
設計接收器算法的第一步是訪問一些源數據。由于許多飛機現在都配備了S模式轉發器,因此可以將接收器調諧到1090 MHz的廣播頻率并捕獲本地傳輸。在我們的例子中,我們可以使用 Zynq SDR 快速原型制作平臺。ADI公司提供了一個MATLAB系統對象?,能夠通過以太網從FMCOMMS平臺接收數據。6System 對象允許用戶選擇調諧頻率和采樣率,使用無線電硬件收集接收樣本,并將接收樣本作為 MATLAB 變量直接引入 MATLAB 工作區。所需的代碼非常短;幾行代碼用于設置 MATLAB 系統對象,幾行代碼用于設置 FMCOMMS3,以及幾行代碼用于捕獲 I/Q 樣本并將其寫入 MATLAB 變量。代碼示例如圖 2、圖 3 和圖 4 所示。
圖2.用于設置 MATLAB 系統對象的示例 MATLAB 代碼。
圖3.用于配置 FMCOMMS3 板的示例 MATLAB 代碼。
圖4.用于捕獲 I/Q 樣本并將其寫入 Rx 變量的示例 MATLAB 代碼。
我們 使用 了一些 基于 這些 命令 的 代碼, 以 12.5 MHz 的 采樣 率 捕獲 多個 數據 集。選擇 12.5 MHz 速率 是為了 提供 足夠 的 樣本, 以 微調 前導 碼 與 第一 消息 位 的 對齊 方式, 并 平均 出 用于 做出 位 決策 的 樣本 中 的 一些 噪聲。100萬個樣品捕獲的結果如圖5所示。
圖5.在 1090 MHz 下捕獲樣本數據。
在這個簡短的數據集中,有14個信號在本底噪聲之上脫穎而出。在這 14 個信號中,有兩個是 S 模式消息。其余的都是應拒絕的遺留或雜散信號。放大到樣本編號 604000 附近的區域會顯示一條有效消息(參見圖 6)。
圖6.單模式 S 消息。
在此圖中,可以清楚地看到前導碼,并且由于PPM調制引起的位轉換很明顯。即使有這樣的干凈信號,通過檢查解碼位也需要良好的視力和很大的耐心。顯然,需要一個自動化程序來解碼這些消息。MATLAB 是開發該程序的良好解決方案。
可以接收和解碼模式 S 消息的 MATLAB 代碼可以總結如下:
計算本底噪聲和前導碼與 filter() 函數在短時間窗口內的相關性。在我們的解決方案中,我們使用 75 個樣本,相當于 6 μs。
當前導碼相關性超過本底噪聲一個顯著因素時,啟動邏輯以查找第一個消息位樣本。
這個閾值的選擇是主觀的。它應該足夠小以檢測微弱信號,但又足夠大以防止大量誤報。我們選擇比本底噪聲高 10× 的值作為捕獲大多數可解碼消息的合理閾值。
前導碼模式產生多個峰值。由于最佳匹配在前6 μs,因此存儲第一個峰值,開始搜索第一個消息位,并查看在接下來的3 μs中是否出現另一個更大的峰值。如果確實發生,請存儲新的峰值并重置搜索第一個消息位的開頭。
當出現最大峰值時,2 μs后開始消息位解碼。
圖7以綠色顯示本底噪聲,以及將理想前導碼與輸入數據相關聯的結果。本底噪聲上方有幾個峰值,但感興趣的峰值是幅度最大的峰值。第一個消息位的采樣發生在該峰值后2 μs。
圖7.計算本底噪聲和前導碼相關性。
對于每個單獨的位,對前 1/2 μs 和第二個 1/2 μs 的樣本幅度求和。無論總和較大,確定位是邏輯 1 還是邏輯 0。
在做出位決策時計算校驗和。這需要一些控制邏輯,用于在第一個位到達時重置CRC寄存器,計算88位的校驗和,然后清空最后24位的CRC寄存器。當接收位與校驗和匹配時,ADS-B 消息有效。
根據模式 S 標準解析消息位(參見圖 8)。
圖8.解碼模式 S 消息。
上圖來自 MATLAB 命令窗口,顯示了從 100 萬個樣本數據集中成功解碼的兩條消息。將顯示構成 88 位消息和 24 位校驗和的十六進制字符,解碼過程的結果顯示飛機 ID、消息類型以及飛機速度、高度和位置。
MATLAB 提供了一種強大的數學和信號處理語言,可以相對輕松地解決這個問題。處理數據樣本并最終解碼消息所需的 MATLAB 代碼很短,只有 200 行 MATLAB 代碼。此外,MATLAB 的解釋性使得以交互方式嘗試設計理念并快速確定可行的解決方案變得容易。在各種數據集上測試了幾種時序機制、閾值和噪聲水平,以產生令人滿意的程序。
該 MATLAB 代碼已在當地空域飛行的飛機信號上進行了測試,并且已根據 airframes.org 和 flightaware.com 等來源對解碼消息進行了檢查。硬件和代碼性能非常好;我們已經能夠解碼50英里外飛機的傳輸。
實施途徑
MATLAB 是在 PC 上測試設計理念和運行算法的絕佳環境,但如果最終目標是生成要在嵌入式平臺上使用的軟件或 HDL,尤其是像 Zynq SoC 這樣的平臺,那么 Simulink 是一個很好的解決方案。Simulink 非常適合對針對可編程器件所需的硬件特定細節進行建模。一個好的工作流程是使用 MATLAB 開發和驗證算法,然后將設計轉換為 Simulink,并繼續沿著開發路徑進行最終的硬件實現。
幸運的是,該算法的 MATLAB 代碼逐個樣本處理數據,因此轉換為 Simulink 相當簡單。與 200 行 MATLAB 代碼相比,Simulink 模型易于顯示和描述(參見圖 9)。
圖9.模式S檢測與譯碼算法的模擬模型.
在圖9中,您可以看到解碼的第一步是計算本底噪聲以及與前導碼的相關性。數字濾波器塊用于這些計算。時序控制塊是使用 Stateflow 實現的,Stateflow 是一種狀態機工具,用于為解碼算法的其余部分生成定時、復位和控制信號。狀態流對于要將控制邏輯與數據流分離的模型非常有用。激活時序和觸發器后,名為 BitProcess 的塊獲取輸入 I/Q 樣本并計算數據位,CRC_Check塊計算校驗和。消息解析仍然在由此 Simulink 模型驅動的 MATLAB 腳本中進行。?
深入了解該模型,您可以看到使 Simulink 適合嵌入式開發的一些功能,尤其是將設計劃分為面向 Zynq SoC 的功能以及生成 HDL 代碼和 C 代碼。
Simulink 具有出色的定點支持,因此您可以構建和測試設計的位真版本。各個塊允許您為模型中的數學運算設置字長和小數長度。用于計算前導碼相關性的數字濾波器模塊就是一個很好的例子(圖10)。您可以設置計算的舍入模式和溢出行為(地板和環繞是在 HDL 中完成數學運算的最簡單選擇)。此外,您可以為產品指定不同的字長和分數精度,并為濾波器指定累加器操作(圖 11)。您可以使用映射到接收器 ADC 的字長選擇,并利用硬件乘法器,例如 Zynq SoC DSP48 片中的 18 位× 25 位乘法器。
圖 10.用于前導碼相關的 Simulink 數字濾波器塊,12 位數據類型。
圖 11.定點數據類型設置。
嵌入式設計通常具有許多操作模式和有條件執行的算法。Stateflow特別擅長管理這些控制信號。狀態流為您提供了檢測和解碼模式 S 消息所需的控制邏輯的可視化表示形式。在下面的圖 12 中,您可以看到邏輯中的狀態為:
同步搜索:在捕獲的樣本中查找前導碼
WaitForT0:查找第一個消息位的開頭
位進程:啟用位處理
EmptyReg:清空校驗和寄存器,并將位與位處理的輸出進行比較
隨著檢測和解碼算法在不同狀態中的進展,Stateflow 模塊生成啟用位處理的信號,重置位決策計數器和校驗和寄存器,并在模式 S 消息末尾讀出校驗和位。
圖 12.用于解碼模式 S 消息的狀態流程圖。
Simulink 模塊庫為工程師提供了在非常高的水平或非常精細的細節水平下工作的選擇。Simulink 具有數字濾波器、FFT 和數控振蕩器等高級模塊,可輕松構建信號處理設計。如果需要對設計進行更精確的控制,可能是為了速度或面積優化,工程師可以使用低級模塊,如單元延遲、邏輯運算符(例如 XOR)和開關。該模型中的 24 位校驗和是使用這些低電平塊構建的反饋移位寄存器(圖 13)。
圖 13.用于模式 S 校驗和計算的反饋移位寄存器。
此 Simulink 模型是 MATLAB 算法的硬件特定版本,用于檢測和解碼模式 S 消息。Simulink 是一種有用的工具,用于彌合用 MATLAB 編寫的行為算法與嵌入式硬件實現代碼之間的差距。您可以將特定于硬件的詳細說明引入 Simulink 模型,運行模型,并驗證您所做的更改不會破壞解碼算法。
結論
Zynq SDR 快速原型制作平臺和 MathWorks 軟件的結合為通信工程師提供了一種全新且靈活的方法,可以快速為無線接收器設計理念進行原型設計。捷變寬帶RF收發器AD9361/AD9364提供的高度可編程性和性能以及硬件與MATLAB環境之間的簡單連接,使工程師可以使用各種有趣的無線信號。使用 MATLAB 的工程師可以快速嘗試多種設計理念,并最終確定出有前途的解決方案。如果設計的最終目標是嵌入式處理器,那么 Simulink 就是工程師可以使用的工具,通過硬件特定的想法來完善設計,并最終生成用于對處理器進行編程的代碼。此工作流程減少了設計無線接收器所需的技能數量,并縮短了從概念到工作原型的開發周期。
審核編輯:郭婷
-
收發器
+關注
關注
10文章
3454瀏覽量
106243 -
matlab
+關注
關注
185文章
2980瀏覽量
231007 -
SDR
+關注
關注
7文章
234瀏覽量
50578
發布評論請先 登錄
相關推薦
評論