第三部分—利用硬件在環驗證S模式信號解碼算法 作者:Di Pu和Andrei Cozma 簡介 在MATLAB或Simulink中實現信號處理算法之后,合乎邏輯的下一步是利用從實際要使用的SDR硬件平臺獲得的真實數據驗證算法的功能。首先是利用從系統獲得的不同輸入數據集來驗證算法。這樣做有助于驗證算法的功能,但不能保證算法在其它環境條件下也能像預期那樣工作,也不能確定對于SDR系統模擬前端和數字模塊的不同設置,算法的行為和性能會如何。為了驗證所有這些方面,如果能讓算法在線運行以接收實時數據作為輸入,并且調整SDR系統設置以實現最佳性能,將是非常有好處的。本系列文章的這一部分討論ADI公司提供的軟件工具,其支持MATLAB和Simulink模型與FMCOMMSx SDR平臺直接互動;此外還會說明如何利用這些工具驗證第二部分所述的ADS-B模型2。2 MATLAB和Simulink IIO系統對象 ADI公司提供了完整的軟件基礎設施來支持MATLAB和Simulink模型與FMCOMMSx SDR平臺(其連接到運行Linux的FPGA/SoC系統)實時互動。這之所以可能,有賴于IIO System Object 3(系統對象),它設計用于通過TCP/IP與硬件系統交換數據,從而發送(接收)數據至(自)目標,控制目標的設置,并監測RSSI等不同目標參數。圖1顯示了該軟件基礎設施的基本架構以及系統組件之間的數據流。 ![]() 圖1. 軟件基礎設施框圖 IIO系統對象基于MathWorks系統對象規范4,其公開了數據和控制接口,MATLAB/Simulink模型通過這些接口與基于IIO的系統通信。這些接口在一個配置文件中指定,配件文件將系統對象接口鏈接到IIO數據通道或IIO屬性。這樣便可實現通用型IIO系統對象,只需修改配置文件,它便能配合任何IIO平臺工作。ADI GitHub庫5提供了一些平臺的配置文件和示例,包括AD-FMCOMMS2-EBZ/AD-FMCOMMS3-EBZ/AD-FMCOMMS4- EBZ/AD-FMCOMMS5-EBZ SDR板和高速數據采集板AD-FMCDAQ2-EBZ。IIO系統對象與目標之間的通信是通過libiio服務器/客戶端基礎設施來完成。服務器運行于Linux下的嵌入式目標上,管理目標與本地/遠程客戶端之間的實時數據交換。libiio庫是硬件低層細節的抽象,提供了簡單但完整的編程接口,可用于綁定各種語言(C、C++、C#、Python)的高級項目。 本文接下來將通過一些實際例子說明如何利用IIO系統對象來驗證ADS-B MATLAB和Simulink模型。一個連接到ZedBoard7且運行Analog Devices Linux發行版的AD-FMCOMMS3-EBZ SDR平臺6用作SDR硬件平臺,以驗證ADS-B信號檢測與解碼算法是否正常工作,如圖2所示。 ![]() 圖2. ADS-B算法驗證的硬件設置 利用IIO系統對象驗證MATLAB ADS-B算法 為了利用從AD-FMCOMMS3-EBZ SDR平臺獲得的實時數據驗證MATLAB ADS-B解碼算法,開發了一個MATLAB腳本來執行如下操作: 根據用戶輸入計算地球帶 創建并配置IIO系統對象 通過IIO系統對象配置AD-FMCOMMS3-EBZ模擬前端和數字模塊 利用IIO系統對象從SDR平臺接收數據幀 檢測并解碼ADS-B數據 顯示解碼的ADS-B信息 構建IIO系統對象之后,必須利用SDR系統的IP地址、目標設備名稱、輸入/輸出通道的大小和數目對其進行配置。圖3給出了一個創建并配置MATLAB IIO系統對象的例子。 ![]() 圖3. MATLAB IIO系統對象的創建和配置 然后,利用IIO系統對象設置AD9361屬性并接收ADS-B信號。AD9361屬性基于以下考量而設置: ![]() 圖4. MATLAB libiio設置AD9361屬性 利用基于AD9361的平臺,采樣速率相當容易確定。發送數據速率一般等于接收數據速率,最終取決于基帶算法。本例中,解碼算法是針對12.5 MSPS的采樣速率而設計,AD9361采樣速率據此設置。這樣,接收到的樣本便可直接應用于解碼算法,無需其它抽取或插值操作。 RF帶寬控制設置AD9361 RX模擬基帶低通濾波器的帶寬,以提供抗混疊和帶外信號抑制。為了成功解調收到的信號,系統必須最大程度地提高信噪比 (SNR)。因此,在滿足平坦度和帶外抑制要求的同時,RF帶寬必須設置得盡可能窄,以使帶內噪聲和雜散信號電平最小。如果RF帶寬設置得較寬,ADC線性動態范圍就會因為額外的噪聲而縮小。同樣,ADC無雜散動態范圍也會因為較低的帶外信號抑制而縮小,導致接收器的整體動態范圍縮小。因此,將RF帶寬設置為最優值對于接收所需的帶內信號并抑制帶外信號非常重要。通過觀察接收信號的頻譜,我們發現4 MHz是一個合適的RF帶寬值。 除了通過RF帶寬屬性設置AD9361的模擬濾波器之外,我們還可以通過IIO系統對象使能AD9361的數字FIR濾波器以改善解碼性能,如圖5所示。根據ADS-B信號的頻譜特性,我們設計一個數據速率為12.5 MSPS、通帶頻率為3.25 MHz、阻帶頻率為4 MHz的FIR濾波器。這樣,我們就能進一步聚焦于目標帶寬。 ![]() 圖5. 通過libiio使能AD9361的適當FIR濾波器 Adsb.ftr文件包含FIR濾波器的系數,該FIR濾波器利用ADI公司AD9361濾波器向導MATLAB應用程序設計8。此工具不僅能完成通用低通濾波器設計,還能為信號路徑中的其它級提供幅度和相位均衡。 ![]() 圖6. 利用MATLAB AD9361濾波器向導設計的用于ADS-B信號的FIR濾波器 多功能且高度可配置的AD9361收發器具有多種增益控制模式,適合很多不同的應用。IIO系統對象的Gain Mode(增益模式)參數選擇可用模式之一:manual、slow_attack、hybrid和fast_attack。最常用的模式是manual、slow_attack和fast_attack。Manual增益控制模式允許基帶處理器 (BBP) 控制增益。Slow_attack模式主要用于慢速變化的信號,fast_attack模式主要用于"突發"開啟和關閉的波形。增益模式在很大程度上取決于接收信號的強度。如果信號太強或太弱,建議使用manual或slow_attack模式。否則,fast_attack是不錯的選擇。ADS-B信號具有突發性,因此fast_ attack增益模式可實現最佳效果。這種波形要求使用fast_attack模式,因為其存在前同步碼,并且AGC需要以足夠快的速度響應以便捕捉第一位。沒有信號時,啟動時間(增益斜坡下降所需的時間)與衰減時間(提高增益所需的時間)存在差異。目標是快速調低增益,以便能在第一位看到一個有效的1,但不提高位時間之間的增益。 最后,根據您對TX_LO_FREQ和RX_LO_FREQ的設置,該模型有兩種使用方式:使用預先捕捉的數據(RF回送)和使用從空中獲得的實時數據。 預先捕捉數據 這種情況下,我們利用AD-FMCOMMS3-EBZ發送和接收預先捕捉到的一些ADS-B信號。這些信號保存在一個名為"newModeS"的變量中。 ![]() 圖7. 利用預先捕捉的ADS-B信號定義輸入 這種情況要求TX_LO_FREQ = RX_LO_FREQ,它可以是AD-FMCOMMS3-EBZ支持的任意LO頻率值。預先捕捉的數據中有大量ADS-B有效數據,因此,這是驗證硬件設置是否合適的好方法。 實時數據 這種情況下,我們接收空中的實時ADS-B信號,而不是AD-FMCOMMS3-EBZ發送的信號。根據ADS-B規范,它以1090 MHz的中心頻率發送,因此,這種情況的要求是: RX_LO_FREQ=1090 MHz,TX_LO_FREQ遠離1090 MHz,以免產生干擾。 在接收側使用一根適當的天線,它能覆蓋1090 MHz頻段,例如ADS-B雙半波移動天線9;使用調諧不佳或制作不良的天線會導致空中雷達探測距離不夠。 一切設置妥當之后,使用如下命令便可運行MATLAB模型: [rssi1,rssi2]=ad9361_ModeS('ip','data source',channel); 其中,ip為FPGA板的IP地址,data source指定接收信號的數據源。目前,該模型支持"預先捕捉"的數據源和"實時"數據源。 Channel指定信號是利用AD-FMCOMMS3-EBZ的通道1還是通道2進行接收。 例如,發出以下命令時,系統將通過通道2接收預先捕捉的數據: [rssi1,rssi2]=ad9361_ModeS('192.168.10.2','pre-captured',2); 在仿真結束時,您會得到兩個通道的RSSI值以及下表所示的結果: ![]() 圖8. 仿真結束時顯示的結果表格 此結果表格顯示了仿真期間出現的航空器信息。借助適當的天線,此模型利用AD-FMCOMMS3-EBZ能夠捕捉并解碼80英里范圍內的航空器信號。S模式消息有兩類(56 μs和112 μs),因此,某些消息包含的信息比其它消息要多。 利用實際ADS-B信號測試此模型時,解碼能否成功,信號強度非常重要,務必把天線放在對準航空器的良好位置上。接收信號強度可通過查看兩個通道的RSSI值來了解。例如,若通過通道2接收信號,通道2的RSSI應顯著高于通道1的RSSI。通過查看頻譜分析儀,可以判斷是否存在有用數據。 RF信號質量 任何RF信號都需要一個質量指標。例如,對于QPSK等信號,我們有誤差矢量幅度 (EVM)。對于ADS-B信號,查看分隔器輸出還不足以獲得正確消息,如圖8所示。我們需要一個指標來定義ADS-B/脈沖位置調制的質量,以便判斷哪種設置更好。 ModeS_BitDecode4.m函數中有一個變量diffVals,它就可以用作這樣的指標。此變量是一個112 × 1矢量。對于一條S模式消息中的每個解碼位,它都會顯示該位距離閾值有多遠。也就是說,每個解碼位相對于正確判斷有多少裕量。顯而易見,一個位的裕量越大,解碼結果的置信度就越高。另一方面,若裕量很小,則意味著判斷處于邊緣區,解碼位很有可能是錯誤的。 下面兩幅圖比較了有和沒有FIR濾波器兩種情況下從ADS-B接收器獲得的diffVals值。注意y軸,我們發現,使用FIR濾波器時,無論處于最高點、最低點還是平均值,diffVals都較大。然而,當沒有FIR濾波器時,幾個位的diffVals都非常接近0,意味著解碼結果可能不正確。因此,我們可以得出結論,使用適當的FIR濾波器可改善解碼的信號質量。 ![]() 圖9. 使用FIR濾波器時從ADS-B接收器獲得的diffVals值 ![]() 圖10. 無FIR濾波器時從ADS-B接收器獲得的diffVals值 采用IIO系統對象的MATLAB ADS-B算法可從ADI GitHub庫下載10。10 利用IIO系統對象驗證Simulink ADS-B算法 Simulink模型基于本系列文章第二部分介紹的模型2。解碼器和解碼模塊直接來自該模型,我們增加了Simulink IIO系統對象以開展信號接收和硬件在環仿真。 原始模型以采樣時間 = 1且幀大小 = 1的設置工作。然而,Simulink IIO系統對象以緩沖模式工作,它會積累若干樣本,然后進行處理。為了讓原始模型配合系統對象工作,我們在其間增加了兩個模塊:解除緩沖以使幀大小 = 1,轉換速率以使采樣時間 = 1。這樣,原始模型便可保持不變。 ![]() 圖11. Simulink模型捕捉和解碼ADS-B信號 Simulink IIO系統對象設置如下。與MATLAB實例相同,它創建一個系統對象,然后定義與此系統對象相關的IP地址、設備名稱、輸入/輸出通道數目和大小。 ![]() 圖12. Simulink IIO系統對象 與IIO系統對象相對應,此Simulink模塊的輸入輸出端口通過對象模塊的屬性對話框以及目標ADI SDR平臺特定的配置文件來定義。輸入和輸出端口按數據和控制端口分類。數據端口以幀處理模式發送(接收)連續數據緩沖至(自)目標系統,而控制端口則用于配置和監控不同的目標系統參數。數據端口的數目和大小通過該模塊的配置對話框進行配置,而控制端口則在配置文件中定義。AD9361屬性設置所依據的因素與MATLAB模型所述相同。MATLAB模型運用的所有理論和方法在這里都適用。 根據您對TX_LO_FREQ和RX_LO_FREQ的設置,Simulink模型有兩種運行模式:使用預先捕捉的數據"DataIn"和使用實時數據。以預先捕捉的數據為例,在仿真結束時,我們可以在命令窗口中看到如下結果: ![]() 圖13. 使用預先捕捉數據的仿真結束時在命令窗口中顯示的結果 這里的結果以文本格式顯示,而不像在MATLAB模型中以表格形式顯示。 采用IIO系統對象的Simulink ADS-B模型可從ADI GitHub庫下載11。11 結論 本文討論了利用ADI公司提供的libiio基礎設施進行的硬件在環仿真。采用這種基礎設施,便可利用實際信號和硬件驗證MATLAB和Simulink ADS-B信號檢測與解碼算法。屬性設置高度依賴于應用和波形,適合一個波形的設置并不一定適合另一個波形。這是關鍵的一步,可確保SDR系統的模擬前端和數字模塊針對目標算法和波形調諧妥當,并且算法足夠魯棒,對于不同環境條件下獲得的實際數據,它都能像預期的那樣處理。有了經過驗證的算法之后,便可開始下一步,即利用MathWorks代碼自動生成工具將算法轉換為HDL和C代碼,并將此代碼集成到實際SDR系統的可編程邏輯和軟件當中。本系列文章的下一部分將說明如何生成代碼并將其部署到生產硬件中,還會談談該平臺在機場利用實際ADS-B信號運行所獲得的結果。這樣便介紹完了SDR系統從原型開發到生產的所有步驟。 參考文獻 1Andrei Cozma、Di Pu和Tom Hill。"Dialogue/china/archives/49-09/four-step-sdr-01.html" target="_blank">快速通往量產的四個步驟:利用基于模型的設計開發軟件定義無線電—第一部分"。模擬對話,第49卷第3期,2015年。 2Mike Donovan、Andrei Cozma和Di Pu。"快速通往量 產的四個步驟:利用基于模型的設計開發軟件定義無線電—第二部分" 模擬對話,第49卷第3期,2015年。 3ADI公司。"IIO系統對象"。 4MathWorks。"什么是系統對象?" 5ADI公司,"Mathworks_tools"。GitHub庫 6ADI公司。AD-FMCOMMS3-EBZ用戶指南。 7ZedBoard。 8ADI公司。MATLAB AD9361濾波器設計向導。 致謝 感謝MathWorks公司的Mike Donovan,他幫助開發了本文所用的MATLAB和Simulink ADS-B信號檢測與解碼算法。 作者 Di Pu [di.pu@analog.com]是ADI公司系統建模應用工程師,負責支持軟件定義無線電平臺和系統的設計與開發。她與MathWorks密切合作解決雙方共同客戶的難題。加入ADI公司之前,她于2007年獲得南京理工大學 (NJUST) 電氣工程學士學位,于2009年和2013年分別獲得伍斯特理工學院 (WPI) 電氣工程碩士學位和博士學位。她是WPI 2013年博士論文Sigma Xi研究獎獲得者。 Andrei Cozma[andrei.cozma@analog.com]是ADI公司工程設計經理,負責支持系統級參考設計的設計與開發。他擁有工業自動化與信息技術學士學位及電子與電信博士學位。他參與過電機控制、工業自動化、軟件定義無線電和電信等不同行業領域的項目設計與開發。 |