作者:Mike Donovan, Andrei Cozma, and Di Pu
本系列文章的前幾部分介紹了 Zynq SDR 快速原型制作平臺,1介紹了使用 MATLAB 和 Simulink 開發(fā)可以成功處理和解碼 ADS-B 傳輸?shù)?a href="http://m.xsypw.cn/v/tag/2562/" target="_blank">算法的步驟,2并展示了如何在仿真和從SDR平臺獲取的實(shí)時(shí)數(shù)據(jù)中驗(yàn)證算法。3所有階段的最終目標(biāo)是創(chuàng)建一個(gè)經(jīng)過驗(yàn)證的模型,該模型可以轉(zhuǎn)換為 C 和 HDL 代碼,并準(zhǔn)備好集成到 SDR 平臺的軟件和硬件基礎(chǔ)設(shè)施中。
本系列第 2 部分中討論的 Simulink 模型(“使用 MATLAB 和 Simulink 進(jìn)行模式 S 檢測和解碼”)")2是一個(gè)仿真模型,具有足夠的硬件特定保真度,以驗(yàn)證設(shè)計(jì)是否能夠成功解碼 ADS-B 消息。以該模型為起點(diǎn),將討論在 Zynq SDR 快速原型平臺上運(yùn)行的工作接收器設(shè)計(jì)所需的最后步驟。與本系列前面的文章一樣,開發(fā)此工作設(shè)計(jì)所需的技能包括:熟練掌握 MATLAB 和 Simulink、Zynq 無線電硬件知識以及軟件/硬件集成技能。
本文中要遵循的步驟包括:
將 Simulink 模型劃分為面向 Zynq SoC 上的 FPGA 結(jié)構(gòu)和 ARM 處理系統(tǒng)的函數(shù)。
對 Simulink 模型進(jìn)行設(shè)計(jì)更改,以提高生成的 HDL 代碼的性能。
為 ADS-B 接收器算法生成源 HDL 和 C 代碼。
將生成的源代碼集成到 Zynq 無線電平臺設(shè)計(jì)中。
使用實(shí)時(shí)飛機(jī)信號在目標(biāo)硬件上測試嵌入式設(shè)計(jì)。
在此過程結(jié)束時(shí),將生成一個(gè)經(jīng)過充分驗(yàn)證的SDR系統(tǒng),運(yùn)行從Simulink ADS-B模型自動(dòng)生成的C和HDL代碼,并實(shí)時(shí)接收和解碼實(shí)時(shí)商用飛機(jī)信號。
將模型劃分為硬件和軟件組件
生成實(shí)現(xiàn)代碼過程的第一步是將設(shè)計(jì)劃分為將在 Zynq SoC 的可編程邏輯和 ARM 處理系統(tǒng)上運(yùn)行的功能。
分區(qū)通常從確定設(shè)計(jì)中不同組件的處理要求以及所需的執(zhí)行速率和時(shí)間開始。計(jì)算密集型組件(如數(shù)據(jù)調(diào)制/解調(diào)算法)需要以采樣速率實(shí)時(shí)運(yùn)行,最適合在可編程邏輯中實(shí)現(xiàn)。不太密集的處理任務(wù)(例如數(shù)據(jù)解碼和渲染以及系統(tǒng)監(jiān)視和診斷)更適合軟件實(shí)現(xiàn)。要考慮的其他一些方面包括:操作的數(shù)據(jù)類型和復(fù)雜性以及輸入和輸出數(shù)據(jù)的精度。面向可編程邏輯的所有操作都適用于定點(diǎn)、整數(shù)或布爾數(shù)據(jù)類型。對于更復(fù)雜的運(yùn)算,例如三角函數(shù)或平方根,使用近似值來使用可用的硬件資源有效地實(shí)現(xiàn)它們。所有這些約束都會導(dǎo)致精度損失,如果評估和實(shí)施不當(dāng),可能會對系統(tǒng)功能產(chǎn)生不利影響。但是,面向處理系統(tǒng)的組件可以處理浮點(diǎn)數(shù),并以最高保真度實(shí)現(xiàn)任何復(fù)雜程度的操作,但通常以較慢的執(zhí)行速度為代價(jià)。
以這些約束為指導(dǎo),ADS-B解碼算法的劃分相當(dāng)明顯。ModeS_Simulink_Decode.slx 模型中檢測器模塊中的功能(包括 I/Q 樣本的前端處理一直到校驗(yàn)和計(jì)算)非常適合在 Zynq SoC 的可編程邏輯上實(shí)現(xiàn)(圖 1)。消息位的解碼在修改的緩沖區(qū)和解碼和顯示塊中實(shí)現(xiàn),在處理系統(tǒng)中很容易實(shí)現(xiàn)。
圖1.ModeS_Simulink_Decode.slx:FPGA 和 ARM 處理器分區(qū)。
有興趣了解 Simulink 模型的讀者可以在 ADI GitHub 存儲庫中找到這些文件。4
從 Simulink 模型生成 HDL 代碼
模式S解碼器模型中的檢測器模塊(圖2)由幾個(gè)子系統(tǒng)組成:CalcSyncCorr,CalcNF,SyncAndControl,BitProcess,CalcCRC和FameDetect。來自MathWorks的HDL編碼器5用于生成此設(shè)計(jì)的源代碼 HDL 代碼。
圖2.用于生成 HDL 代碼的檢測器塊。
Simulink 模型必須滿足多個(gè)條件才能使用 HDL 編碼器成功生成 HDL 代碼。一些最重要的要求是:
使用支持 HDL 代碼生成的塊。HDL Coder 支持大約 200 個(gè) Simulink 模塊的代碼生成。6在檢測器設(shè)計(jì)中,所有模塊(包括狀態(tài)流圖和數(shù)字濾波器模塊)都支持HDL代碼生成。
使用定點(diǎn)數(shù)據(jù)類型。在檢測器設(shè)計(jì)中,信號使用 12 位、24 位和布爾數(shù)據(jù)類型。12位數(shù)據(jù)類型與ADI公司AD9361收發(fā)器上模數(shù)轉(zhuǎn)換器的位寬相匹配。
使用標(biāo)量或矢量信號。矢量信號可用于多通道信號或資源共享。
避免模型中的代數(shù)循環(huán)。HDL 編碼器軟件不支持為存在代數(shù)循環(huán)條件的模型生成 HDL 代碼。
ModeS_Simulink_Decode.slx模型不滿足所有這些條件,因此CalcCRC塊中將接收位與計(jì)算的校驗(yàn)和進(jìn)行比較的部分被移到了檢測器塊之外,并最終在C中實(shí)現(xiàn)。生成的模型 ModeS_ADI_CodeGen.slx 用于生成 HDL 代碼。與手動(dòng)編碼過程相比,只需幾分鐘即可生成數(shù)千行 HDL 代碼。HDL Coder 生成的源代碼有點(diǎn)真實(shí),循環(huán)準(zhǔn)確的 Simulink 模型版本。這是使用基于模型的設(shè)計(jì)的主要生產(chǎn)力提升之一;生成的代碼是 Simulink 模型的準(zhǔn)確翻譯。
此外,代碼設(shè)計(jì)為可讀和可追溯,因此工程師可以輕松地將生成的代碼映射到他們的設(shè)計(jì)模型。這是通過多種方式實(shí)現(xiàn)的(圖3):
模型的層次結(jié)構(gòu)保留在生成的 HDL 代碼文件中。在此示例中,頂級塊名為 Detector.vhd,下一級層次結(jié)構(gòu)的子系統(tǒng)名為 CalcNF.vhd、Bit_Process.vhd 等。
模型中使用的塊名稱、端口名稱、信號名稱、數(shù)據(jù)類型和復(fù)雜性保留在生成的代碼中。
模型和源代碼之間的鏈接允許設(shè)計(jì)人員單擊 Simulink 模型中的塊并自動(dòng)導(dǎo)航到生成的 HDL 代碼。同樣,生成的代碼中存在超鏈接,這些超鏈接將打開 Simulink 模型并突出顯示與該代碼段關(guān)聯(lián)的塊。
圖3.ModeS_ADI_CodeGen.slx 的源 HDL 代碼
優(yōu)化 ADS-B 模型以生成具有更高時(shí)鐘速度的 HDL 代碼
盡管 ModeS_ADI_CodeGen.slx 模型成功生成了 HDL 代碼,但設(shè)計(jì)人員很少不希望改進(jìn)初始結(jié)果。設(shè)計(jì)人員通常需要滿足速度和面積限制,這通常涉及優(yōu)化初始 Simulink 模型以實(shí)現(xiàn)所需的結(jié)果。Simulink 和代碼生成的一個(gè)主要優(yōu)點(diǎn)是,設(shè)計(jì)人員可以在模型中進(jìn)行這些優(yōu)化,運(yùn)行仿真以確保更改不會破壞算法,然后重新生成 HDL 代碼。這通常比更改 HDL 源代碼并可能破壞算法要簡單得多,更不容易出錯(cuò)。
在這種設(shè)計(jì)中,模型生成的HDL代碼很容易適應(yīng)可用的FPGA結(jié)構(gòu),但以相對較低的時(shí)鐘速率運(yùn)行。這在許多初始設(shè)計(jì)中很常見。HDL Coder 中的內(nèi)置分析工具顯示,模型中的關(guān)鍵路徑從 I/Q 樣本輸入擴(kuò)展到 CalcCRC 子系統(tǒng)中的第一個(gè)寄存器。在設(shè)計(jì)中插入流水線寄存器是提高時(shí)鐘速度的一種常用方法(圖 4)。流水線縮短了信號操作之間的路徑,但代價(jià)是增加了整個(gè)處理的延遲。這種權(quán)衡通常是可以接受的,因?yàn)閷τ诟叩臅r(shí)鐘速率來說,輕微的延遲通常是很小的代價(jià)。
圖4.管道寄存器插入到探測器設(shè)計(jì)中。
子系統(tǒng)之間的流水線寄存器有助于提高設(shè)計(jì)的時(shí)鐘速率,但通過為數(shù)字濾波器模塊做出有利的架構(gòu)選擇,可以實(shí)現(xiàn)更好的時(shí)鐘速率。許多 Simulink 模塊都有架構(gòu)選擇,使設(shè)計(jì)人員能夠針對速度或面積優(yōu)化設(shè)計(jì)。對于用于計(jì)算本底噪聲和前導(dǎo)碼相關(guān)性的數(shù)字濾波器(圖5),對輸出乘法器進(jìn)行流水線處理可以縮短數(shù)字濾波器內(nèi)的關(guān)鍵路徑并提高設(shè)計(jì)時(shí)鐘速率。
圖5.數(shù)字濾波器模塊的 HDL 模塊選擇。
在進(jìn)行這兩個(gè)簡單的流水線更改后,生成的HDL代碼的時(shí)鐘速率超過了140 MHz。對于使用代碼生成工具的工程師來說,這是一個(gè)有用的教訓(xùn):將硬件設(shè)計(jì)原理的一點(diǎn)知識應(yīng)用于代碼生成模型可以對生成的代碼的結(jié)果產(chǎn)生重大影響。進(jìn)一步優(yōu)化此設(shè)計(jì)是可能的,但被認(rèn)為是不必要的,因?yàn)镠DL代碼很容易滿足該設(shè)計(jì)相對簡單的時(shí)序和資源目標(biāo)。
在傳統(tǒng)的無線電設(shè)計(jì)過程中,大部分開發(fā)時(shí)間都花在測試和調(diào)試HDL代碼上。在本示例中使用的基于模型的設(shè)計(jì)方法中,將更多時(shí)間花在開發(fā)仿真和代碼生成模型上。但是,由于生成的源代碼與仿真的驗(yàn)證行為完全匹配,因此大大節(jié)省了開發(fā)時(shí)間;只需在嵌入式硬件上執(zhí)行最少量的調(diào)試。
使用 MATLAB 編碼器生成 C 代碼7
與 HDL 代碼生成類似,必須滿足幾個(gè)條件才能為本設(shè)計(jì)的解碼功能生成 C 代碼。兩個(gè)最重要的要求是:
使用 MATLAB Coder 支持的函數(shù)。MATLAB Coder 支持大多數(shù) MATLAB 語言和各種工具箱,8但您可能會在不知不覺中使用代碼生成不支持的函數(shù)。MATLAB Coder 提供了一些工具,例如代碼準(zhǔn)備工具、9以幫助查找任何不受支持的函數(shù)。
確保聲明 MATLAB 變量后,其大小和類型不會更改。這對于確保在生成的代碼中正確進(jìn)行內(nèi)存分配是必需的。
從 MATLAB 生成 C 代碼的最簡單方法是打開一個(gè)新的 MATLAB Coder 項(xiàng)目,可以從 MATLAB Toolstrip 上的“應(yīng)用程序”選項(xiàng)卡訪問該項(xiàng)目。MATLAB Coder 項(xiàng)目的最終輸出如圖 6 所示。
圖6.用于 DecodeBits_ADI.m 的 MATLAB Coder 項(xiàng)目
在本項(xiàng)目中,頂級MATLAB函數(shù)為DecodeBits_ ADI.m。用戶需要指定此函數(shù)所需的數(shù)據(jù)類型和大小作為輸入參數(shù)。圖 6 顯示此函數(shù)的輸入?yún)?shù)是 112 個(gè)布爾數(shù)據(jù)位和兩個(gè)雙精度值(以提供用戶當(dāng)前的緯度和經(jīng)度)。DecodeBits_ADI.m 的輸出大小和數(shù)據(jù)類型(例如 *nV 表示北速度,*eV 表示東速度,*alt 表示高度)由 MATLAB Coder 自動(dòng)確定。MATLAB Coder 查找頂級入口點(diǎn)文件 DecodeBits_ADI.m 調(diào)用的所有其他函數(shù),包括 AltVelCalc_ADI.m 和 LatLongCalc_ADI.m,然后生成整個(gè)解碼算法的源代碼。
由 MATLAB Coder 生成的 C 代碼是 MATLAB 功能到 C 語言的相當(dāng)簡單的翻譯。與HDL代碼生成的情況一樣,MATLAB Coder生成的源代碼是可讀和可追溯的,因此工程師可以輕松識別原始MATLAB代碼和生成的C代碼之間的關(guān)系。此示例中的 C 代碼可以從 MATLAB 命令提示符生成,并由任何 ANSI C 編譯器編譯。
HDL 代碼平臺部署
在將設(shè)計(jì)劃分為將在 Zynq 可編程邏輯和處理系統(tǒng)上運(yùn)行的功能,優(yōu)化 HDL 和 C 代碼生成的設(shè)計(jì),并在仿真中驗(yàn)證優(yōu)化的設(shè)計(jì)是否正常運(yùn)行并符合性能標(biāo)準(zhǔn)后,現(xiàn)在可以將設(shè)計(jì)部署到實(shí)際的 SDR 硬件平臺上,并在實(shí)際條件下驗(yàn)證系統(tǒng)的功能。為此,ADI公司AD-FMCOMMS3-EBZ SDR平臺10連接到賽靈思 ZC706 開發(fā)板11使用運(yùn)行ADI公司的Linux發(fā)行版。
AD-FMCOMMS3-EBZ板隨附ADI公司提供的開源Vivado HDL參考設(shè)計(jì)。12該參考設(shè)計(jì)包含配置和傳輸數(shù)據(jù)所需的所有IP模塊,這些數(shù)據(jù)與AD-FMCOMMS3-EBZ板上的AD9361收發(fā)器之間傳輸數(shù)據(jù)。圖 7 顯示了 HDL 參考設(shè)計(jì)的框圖。
圖7.HDL 參考設(shè)計(jì)框圖。
AD9361 IP內(nèi)核在AD9361收發(fā)器芯片和Zynq器件之間實(shí)現(xiàn)LVDS接收和發(fā)送數(shù)據(jù)接口,以及與設(shè)計(jì)其余部分的數(shù)據(jù)接口。DMA模塊用于AD9361 IP和DDR存儲器之間的高速數(shù)據(jù)傳輸。AD9361 IP模塊的數(shù)據(jù)接口由四條用于接收的數(shù)據(jù)線和四條用于發(fā)送的數(shù)據(jù)線組成,對應(yīng)于AD9361的兩個(gè)接收通道和兩個(gè)發(fā)送通道的I&Q數(shù)據(jù)。每條數(shù)據(jù)線的寬度為 16 位。為了使系統(tǒng)內(nèi)部的數(shù)據(jù)傳輸更加高效,接收和發(fā)送數(shù)據(jù)被打包到由DMA模塊管理的64位寬總線中。封裝和解包模塊用于將AD9361 IP的16位并行數(shù)據(jù)線連接到DMA。
將 ADS-B 模型的 HDL 代碼部署到 SDR 平臺的現(xiàn)有 HDL 基礎(chǔ)設(shè)施中需要?jiǎng)?chuàng)建一個(gè)可以插入數(shù)據(jù)路徑的 IP 核;這樣做是為了實(shí)時(shí)處理接收到的數(shù)據(jù)并將處理后的數(shù)據(jù)傳遞給軟件層。部署過程可能被證明是一項(xiàng)困難且耗時(shí)的任務(wù),因?yàn)樗枰钊肓私?HDL 設(shè)計(jì)的功能以及足夠的 HDL 編程技能。為了簡化這些步驟,MathWorks 在 HDL Coder 中加入了一個(gè)名為 HDL Workflow Advisor 的實(shí)用程序,ADI 公司為 AD-FMCOMMS2-EBZ/AD-FMCOMMS3-EBZ SDR 平臺和 Xilinx ZC706 板提供了板級支持包 (BSP)。13
HDL 工作流顧問可指導(dǎo)用戶完成從 Simulink 模型生成 HDL 代碼所需的步驟。用戶可以從幾種不同的目標(biāo)工作流程中進(jìn)行選擇,包括“ASIC/FPGA”、“FPGA-IN-THE-LOOP”和“IP 核生成”。目標(biāo)平臺選擇包括 Xilinx 評估板、Altera 評估板或 FMCOMMS2/3 ZC706 SDR 平臺。然后,HDL 工作流顧問可以自動(dòng)執(zhí)行代碼生成和目標(biāo)集成過程的其余部分。
ADI公司提供的BSP是電路板定義和參考設(shè)計(jì)的集合14為 HDL 工作流顧問提供生成與現(xiàn)有 HDL 參考設(shè)計(jì)兼容的 IP 模塊所需的信息和工具,并將生成的 IP 插入到 HDL 參考設(shè)計(jì)中。圖 8 顯示了如何配置工作流顧問程序以生成 ADS-B 模型的 IP 核。請注意,必須選擇面向ADI公司AD-FMCOMMS3-EBZ SDR平臺和Xilinx ZC706板的IP核生成工作流程。
圖8.工作流顧問程序配置。
下一步是配置 IP 和參考設(shè)計(jì)之間的接口。在輸入端,模型接受原始I&Q樣本;這將模型的輸入端口直接連接到AD9361接收器數(shù)據(jù)端口。在模型的所有輸出信號中,此階段唯一感興趣的是數(shù)據(jù)、frame_valid和bit_clk信號。數(shù)據(jù)和frame_valid寬度為16位,由bit_clk信號計(jì)時(shí)。這些信號可以連接到BSP的“DUT Data x Out”接口,這意味著它們將直接訪問DMA模塊;然后可以將數(shù)據(jù)傳輸?shù)紻DR,軟件層可以訪問DDR。bit_clk信號連接到“DUT 數(shù)據(jù)有效輸出”BSP 接口并控制 DMA 采樣速率。圖 9 顯示了必須如何配置 HDL 接口。
圖9.HDL 接口配置。
定義目標(biāo)接口后,HDL 工作流顧問程序的步驟 2 和步驟 3 可以保留為其默認(rèn)狀態(tài),并且可以通過運(yùn)行步驟 4.1(創(chuàng)建項(xiàng)目)來啟動(dòng)項(xiàng)目生成過程。這一步驟的結(jié)果是一個(gè)Vivado項(xiàng)目,該項(xiàng)目將ADS-B IP內(nèi)核集成到ADI公司的HDL參考設(shè)計(jì)中。圖10顯示了ADS-B IP核與設(shè)計(jì)中其余模塊之間的連接。
圖 10.HDL 參考設(shè)計(jì)中的 ADS-B IP 連接。
從 Vivado 項(xiàng)目生成比特流結(jié)束了 HDL 集成過程,但最終目標(biāo)是讓 Linux 在系統(tǒng)上運(yùn)行。為此,在生成比特流后,可以按照標(biāo)準(zhǔn)的 Xilinx SDK 第一階段引導(dǎo)加載程序 (fsbl) 和 Linux 引導(dǎo)文件創(chuàng)建流程創(chuàng)建 Linux 引導(dǎo)文件。與新創(chuàng)建的HDL設(shè)計(jì)相對應(yīng)的Linux設(shè)備樹和圖像文件與AD-FMCOMMS3-EBZ BSP一起分發(fā)。所有文件必須與 SD 卡引導(dǎo)分區(qū)上的 Linux 引導(dǎo)文件一起復(fù)制;用于在賽靈思 ZC706 板上存儲運(yùn)行 ADI Linux 發(fā)行版所需的所有文件。
C 代碼平臺部署
現(xiàn)在,ADS-B HDL IP 已集成到 SDR 平臺的 HDL 設(shè)計(jì)中,并且創(chuàng)建了 Linux SD 卡,是時(shí)候?qū)崿F(xiàn)解碼 ADS-B 數(shù)據(jù)的軟件應(yīng)用程序了。此應(yīng)用程序基于第 5 節(jié)中生成的 C 代碼,并執(zhí)行以下任務(wù):
將AD9361配置為接收ADS-B信號。
從 ADS-B IP 核讀取數(shù)據(jù)。
檢測讀取數(shù)據(jù)中的有效 ADS-B 幀。
解碼并顯示 ADS-B 信息。
實(shí)現(xiàn)任務(wù) 1 和任務(wù) 2 的最簡單方法是使用 libiio 庫提供的功能。15該庫提供接口功能,使用戶能夠輕松配置AD9361以及接收和發(fā)送數(shù)據(jù)。配置序列設(shè)置以下系統(tǒng)參數(shù):
LO 頻率 — 1.09 GHz
采樣率 — 12.5 MHz
模擬帶寬 — 4.0 MHz
AGC - 快速攻擊模式
除上述參數(shù)外,AD9361還加載了一個(gè)數(shù)據(jù)速率為12.5 MSPS、通帶頻率為3.25 MHz、阻帶頻率為4 MHz的數(shù)字FIR濾波器,以確保接收的數(shù)據(jù)僅包含目標(biāo)頻段。本系列文章的第3部分介紹了該FIR濾波器的系統(tǒng)參數(shù)和設(shè)計(jì)方法。3
ADS-B IP 的輸出數(shù)據(jù)通過 DMA 塊傳輸?shù)较到y(tǒng)的 DDR 內(nèi)存中。libiio庫提供以下功能:將從ADS-B IP獲取的數(shù)據(jù)放置到指定大小的內(nèi)存緩沖區(qū)中;等待緩沖區(qū)被填充;通過指針訪問緩沖區(qū)。緩沖區(qū)填滿后,ADS-B 解碼算法可以處理數(shù)據(jù)。ADS-B IP 核有兩個(gè)輸出通道:一個(gè)通道對應(yīng)于 ADS-B 比特流,另一個(gè)通道指示有效數(shù)據(jù)幀在比特流中的結(jié)束位置。兩個(gè)通道包含相同的數(shù)據(jù)速率,并且彼此同步。有效通道中等于“1”的樣本表示數(shù)據(jù)通道中有效幀的最后一位。通過解析兩個(gè)通道,軟件可以從比特流中提取有效的ADS-B數(shù)據(jù)幀,并將數(shù)據(jù)傳遞給MATLAB Coder生成的解碼函數(shù)。解碼功能在計(jì)算飛機(jī)坐標(biāo)時(shí),使用ADS-B數(shù)據(jù)幀和當(dāng)前位置的經(jīng)緯度作為輸入。當(dāng)前緯度和經(jīng)度被指定為應(yīng)用程序的參數(shù)。解碼后的 ADS-B 數(shù)據(jù)的顯示方式與 Simulink 模型類似。
ADS-B 數(shù)據(jù)解碼應(yīng)用程序是在 Linux 下使用 makefile 構(gòu)建的。該應(yīng)用程序的源代碼和生成文件可在ADI公司的github存儲庫中找到。16
這樣就完成了使用 MathWorks 的 HDL Coder 和 MATLAB Coder 從 ADS-B 模型生成的 HDL 和 C 代碼的平臺部署步驟。下一步是驗(yàn)證系統(tǒng)的功能并評估結(jié)果。
系統(tǒng)驗(yàn)證
要驗(yàn)證系統(tǒng)的功能,首先在AD-FMCOMMS3-EBZ板的一個(gè)接收端口和一個(gè)發(fā)射端口之間創(chuàng)建一個(gè)環(huán)回連接,并傳輸仿真期間使用的相同ADS-B信號。通過接收和解碼這些數(shù)據(jù),可以驗(yàn)證在SDR平臺上運(yùn)行的算法的輸出是否與仿真結(jié)果相匹配。圖 11 顯示了 ADS-B 數(shù)據(jù)解碼應(yīng)用程序的輸出;結(jié)果與使用預(yù)捕獲數(shù)據(jù)的HIL仿真系列文章第3部分中所示的結(jié)果相同。這提供了系統(tǒng)按預(yù)期運(yùn)行并準(zhǔn)備好與實(shí)際數(shù)據(jù)一起使用的信心。
圖 11.環(huán)回結(jié)果。
在實(shí)際的現(xiàn)場測試中,SDR接收器被放置在馬薩諸塞州內(nèi)蒂克的MathWorks總部外,并與系統(tǒng)解碼的ADS-B信息與飛機(jī)實(shí)時(shí)跟蹤網(wǎng)站(如 flightradar24.com)提供的數(shù)據(jù)進(jìn)行比較。據(jù)觀察,該系統(tǒng)能夠解碼從天線視線內(nèi)的飛機(jī)接收的數(shù)據(jù)。圖12顯示了系統(tǒng)檢測到的飛機(jī)信息與在線飛機(jī)跟蹤數(shù)據(jù)之間的比較;解碼算法顯示正確的飛機(jī) ID、高度、速度和緯度/經(jīng)度坐標(biāo)。
數(shù)字。12 實(shí)時(shí)數(shù)據(jù)結(jié)果。
結(jié)論
本文總結(jié)了由四部分組成的系列文章,展示了如何使用基于模型的設(shè)計(jì)將 SDR 系統(tǒng)從仿真一直帶到生產(chǎn)。該系列介紹了開發(fā)“硬件就緒”ADS-B Simulink 模型的所有階段。我們設(shè)計(jì)了一個(gè)仿真模型來證明我們可以解碼記錄的ADS-B消息,然后使用從SDR硬件平臺獲取的實(shí)時(shí)數(shù)據(jù)驗(yàn)證模型。這不僅驗(yàn)證了模型,還驗(yàn)證了SDR平臺對模擬前端和數(shù)字接收器鏈的設(shè)置;這也讓我們有信心,該平臺已針對接收 ADS-B 信號進(jìn)行了適當(dāng)調(diào)整。之后,我們將模型劃分為在 Zynq 處理系統(tǒng)和可編程邏輯上運(yùn)行的功能,并優(yōu)化模型以自動(dòng)生成 C 和 HDL 代碼。最后,我們將 C 和 HDL 代碼集成到 SDR 設(shè)計(jì)中,并通過實(shí)時(shí)商業(yè)空中交通驗(yàn)證了系統(tǒng)的功能。最終結(jié)果是一個(gè)設(shè)計(jì)過程,該過程使用 MathWorks 的建模和代碼生成工具以及 Zynq SDR 平臺來創(chuàng)建功能齊全的 SDR 系統(tǒng)。
本示例系統(tǒng)表明,與傳統(tǒng)設(shè)計(jì)方法相比,基于模型的設(shè)計(jì)工作流程與ADI公司AD9361/AD9364集成RF捷變收發(fā)器?可編程無線電硬件相結(jié)合,可以幫助設(shè)計(jì)團(tuán)隊(duì)更快、更便宜地開發(fā)工作無線電原型。這個(gè)原型是由作者在相對較短的時(shí)間內(nèi)以最小的障礙構(gòu)建的,并利用了以下資源:
能夠在 MATLAB 和 Simulink 中構(gòu)建 ADS-B 接收器模型,該模型可以生成可用的 C 和 HDL 源代碼。
HDL 工作流顧問中的功能,可自動(dòng)執(zhí)行許多硬件/軟件集成步驟。
庫(如 libiio),用于協(xié)助部署 SDR 原型的其余集成步驟。
MathWorks 和 ADI 提供的產(chǎn)品幫助和技術(shù)支持。
ADS-B 是一個(gè)相對簡單的標(biāo)準(zhǔn),它提供了一個(gè)很好的測試用例來演示這種構(gòu)建 SDR 原型的方法。采用基于模型的設(shè)計(jì)和 Zynq SDR 平臺的工程師應(yīng)該能夠按照本系列文章中介紹的工作流程開發(fā)更復(fù)雜、更強(qiáng)大的基于 QPSK、QAM 和 LTE 的 SDR 系統(tǒng)。
審核編輯:郭婷
-
編碼器
+關(guān)注
關(guān)注
45文章
3673瀏覽量
135308 -
接收器
+關(guān)注
關(guān)注
14文章
2482瀏覽量
72253 -
Simulink
+關(guān)注
關(guān)注
22文章
536瀏覽量
62718
發(fā)布評論請先 登錄
相關(guān)推薦
ADI發(fā)布首款同步射頻收發(fā)器快速原型制作套件AD-FMCOMMS5-EBZ
利用基于模型的設(shè)計(jì)開發(fā)軟件定義無線電,通往量產(chǎn)的四步
MATLAB和Simulink算法原型如何在FPGA上適配?
在FPGA上建立MATLAB和Simulink算法原型的四種最佳方法
Simulink是什么?Simulink的工作流程是怎樣進(jìn)行的?
淺析MATLAB和Simulink嵌入式視覺應(yīng)用
使用USRP E310和MATLAB和Simulink進(jìn)行原型設(shè)計(jì)和測試軟件定義的無線電
Simulink 自動(dòng)代碼生成原理分享
快速原型中SIMULINK模型的代碼自動(dòng)生成
在Zynq SDR快速原型開發(fā)平臺上進(jìn)行研發(fā)
采用Zynq SDR套件的DDS HLS IP
業(yè)界首款采用射頻收發(fā)器SDR快速原型制作套件
在FPGA上部署5G NR無線通信:MATLAB與Simulink工作流程
![在FPGA上部署5G NR無線通信:MATLAB與<b class='flag-5'>Simulink</b><b class='flag-5'>工作流程</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
在FPGA上部署5G NR無線通信:MATLAB與Simulink工作流程
![在FPGA上部署5G NR無線通信:MATLAB與<b class='flag-5'>Simulink</b><b class='flag-5'>工作流程</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
simulink自動(dòng)生成ROS代碼
![<b class='flag-5'>simulink</b>自動(dòng)<b class='flag-5'>生成</b>ROS<b class='flag-5'>代碼</b>](https://file1.elecfans.com/web2/M00/AE/66/wKgaomVUlQ6AdMtWAAI8Hz8F4I8542.jpg)
評論