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