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