李丹丹,馬金全,楊平平
(信息工程大學 信息系統(tǒng)工程學院,鄭州 450001)
隨著不同的信號帶寬、調制方式等多種通信體制的不斷涌現(xiàn),對通信裝備平臺的快速研發(fā)、系統(tǒng)靈活性等方面提出了更高要求,使得基于軟件無線電技術的新型平臺成為了研究熱點[1]。為了解決不同異構平臺之間的互連互通,以及各種標準通信體制之間的靈活切換等問題,各種新型的軟件無線電平臺憑借其良好的可移植性、可重構性和可擴展性等優(yōu)點得到廣泛的應用?,F(xiàn)有的平臺中,加泰羅尼亞大學提出的ALOE[2]、中國微軟研究院的SORA[3]和愛爾蘭圣三一學院研發(fā)的Iris[4]等平臺在信號處理方面應用較少;弗吉尼亞理工學院研究的OSSIE[5]和被譽為“黑客無線電”的GNU Radio[6]只能用來完成通信系統(tǒng)的建模和仿真學習。針對不同裝備平臺的系統(tǒng)軟件不兼容、應用組件接口不統(tǒng)一、不同板卡間平臺應用組件相互調用的實時性差等一系列問題,為了滿足通信設備新的要求,基于軟件組件服務技術的智能化信號處理平臺已成為了軟件無線電領域的研究熱點。
傳統(tǒng)的通用組件技術有OMG的CORBA[7]、微軟的COM/DCOM[8]和SUN的EBJ[9]等。其中,CORBA采用一種標準的通信模型,可在不同操作系統(tǒng)、網絡協(xié)議和硬件結構的客戶和服務器中實現(xiàn)應用層之間的交互運行,使得CORBA具有語言無關性、可擴展性和平臺無關性等優(yōu)點,從而使得基于對象的軟件組件在分布式異構環(huán)境中實現(xiàn)可重用、可移植和互操作功能;COM技術具有語言平臺無關性、可重用性、封裝性、進程透明性等優(yōu)點,利用其技術開發(fā)的可重構組件可以支持多種編程語言的混合編程,在組件接口和代碼實現(xiàn)中間建立一種松耦合的交互環(huán)境,提高了組件的重用性和擴展性;EJB的體系結構完全獨立于任何特定的平臺、協(xié)議和中間件等基礎設施,實現(xiàn)了應用程序的跨平臺移植。但CORBA技術的規(guī)范沒有標準化,降低了組件的互操作性和可移植性;COM的專用性比較強,只局限于Windows平臺,不利于實現(xiàn)組件的跨平臺和可重構功能;而EJB的開發(fā)語言比較單一,只能通過虛擬機才能實現(xiàn)組件的跨平臺互操作。
為了解決傳統(tǒng)通用組件技術存在的不足,本文提出一種新型的基于軟件重構技術的組件設計方法。該方法先將軟件模塊封裝成可重構組件,使組件之間具有統(tǒng)一的接口定義規(guī)范,解決不同軟件系統(tǒng)和硬件平臺中功能相同或相似的組件重復開發(fā)問題,實現(xiàn)組件的跨平臺、可重構性、共享性和可移植性等功能。
1.1.1 軟件架構
異構信號處理平臺的硬件體系架構由CPCI、VPX、ATCA、mTCA、專用PC平臺,以及DSP、GPU和FPGA等處理器組成。軟件體系架構采用軟件組件服務技術,解決了ATCA、CPCI、VPX等異構信號處理平臺之間的互連互通,以及FPGA和DSP等混合計算板卡的軟件開發(fā)和應用組件之間的共享性弱等問題。為了屏蔽硬件、系統(tǒng)、語言等因素引起的各層之間的差異性,該架構采用分層結構的方式進行歸類。把軟件體系架構分為硬件層、板級支持包層、操作系統(tǒng)與驅動層、硬件抽象層、核心服務層和應用層[10],軟件體系結構如圖1所示。
圖1 軟件體系架構
1.1.2 組件的關鍵技術
異構信號處理平臺采用操作系統(tǒng)抽象層技術屏蔽了操作系統(tǒng)之間的差異,集成了網口和電口等多種接口,為DSP和FPGA等處理器提供標準統(tǒng)一的數(shù)據訪問接口,同時為各種異構硬件平臺提供統(tǒng)一的可視化開發(fā)環(huán)境與底層支撐,最終實現(xiàn)通信裝備平臺的網絡化和一體化。為了解決可重構組件在異構平臺中跨平臺操作和可移植性等難點,異構信號處理平臺中的組件設計主要涉及到操作系統(tǒng)抽象層技術、代碼自動生成技術和雙腳本引擎機制等關鍵技術。
1)代碼自動生成技術。主要完成硬件驅動函數(shù)的注冊和函數(shù)框架生成、可視化配置文件向導、平臺描述要素的宏定義、軟件組件源程序數(shù)據處理框架等生成,以及自動生成可執(zhí)行的腳本文件等工作。而實現(xiàn)代碼自動生成的關鍵是建模抽象技術[11]、復用技術[12]和python引擎技術[13]。該技術提高軟件開發(fā)的效率,減少了開發(fā)者的任務量,降低異構平臺互操作的難度。
2)雙腳本引擎機制。利用Python腳本文件和文本的雙腳本解析引擎,對應用裝配腳本文件進行解析執(zhí)行,提高了異構信號處理平臺的跨平臺性、可移植性和可擴展性。利用Python腳本文件可實現(xiàn)與C/C++程序的無縫交互,充分利用C/C++快速的計算速度,以此提高程序的運行速度,同時兼?zhèn)銹ython的簡單流模式,增加代碼的可讀性。以文本作為應用裝配腳本文件可擴展腳本的應用范圍,提高了操作系統(tǒng)的適應性,增加了系統(tǒng)的可移植性。形成應用時可以根據引擎機制選擇何種腳本類型對平臺應用進行描述。運行應用時雙腳本解析引擎機制根據用戶選擇的腳本格式選擇對應的解析機制,雙腳本解析引擎機制如圖2所示。
圖2 雙腳本解析引擎機制
文本文件是各系統(tǒng)的通用文件,易于被各大系統(tǒng)識別。文本的記錄方式通俗易懂,對開發(fā)者和用戶修改文本內容提供了很大的方便。根據應用模型中的應用裝配文件編寫腳本文件,方便文本引擎提取應用流程圖中的有效信息,對運行程序進行解析。文本以“XWINRES3.0”開始識別文件是否為項目應用裝配腳本文件,又以“END”結束文本解析。該腳本采用按行讀取的方式執(zhí)行應用程序,一行語句以回車符結束,代表執(zhí)行一次函數(shù),以“//”注釋右側一行內容,正文中各參數(shù)之間用“,”隔開,文本腳本文件格式如圖3所示。Python驅動引擎參考GNU Rado平臺中的詳細介紹。
圖3 文本腳本文件格式
3)操作系統(tǒng)抽象層技術。屏蔽了網絡協(xié)議、硬件平臺、操作系統(tǒng)、處理器和數(shù)據庫等底層之間的差異性,對操作系統(tǒng)要素進行抽象化,把平臺有關的部分與平臺不相關的部分完全分離,使開發(fā)的應用與平臺無關,實現(xiàn)組件的跨平臺操作,降低對軟件組件代碼的修改,縮短開發(fā)時間。
1.2.1 GNU Radio軟件結構
由Eric Blossom開發(fā)的GNU Radio[14]軟件無線電平臺主要用于通信系統(tǒng)的建模和仿真,其標準庫包括各種調制/解調組件、濾波器組件和信號處理組件等,還可以擴展編寫新的組件。一般情況下,流圖由信號源、信號接收器和一般信號處理組件3種組件組成,根據應用的需求把組件連接起來,搭建一個完整的應用流圖[15],如圖4所示。其中,應用程序中的組件是由C++語言編寫的各種高速數(shù)據處理組件,它主要負責完成基帶信號的調制/解調、編碼/譯碼和濾波等高速操作。SWIG[16]即簡化的封裝和接口生成器,可以實現(xiàn)C++編程語言和Python腳本語言之間的接口轉換,使得Python可以直接調用Block組件。
圖4 GNU Radio軟件結構
1.2.2 GNU Radio關鍵技術
GNU Radio采用wxPython的GUI流圖連接機制實現(xiàn)代碼自動生成,以便用戶搭建應用流程圖,并與底層系統(tǒng)建立連接關系。在圖形應用界面中以可視化方式雙擊或拖拽選中的組件搭建應用流程圖,然后編譯流程圖自動生成應用腳本,完成應用的實現(xiàn)。在GNU Radio平臺中可重構組件的設計主要涉及到代碼自動生成技術、Python驅動引擎等關鍵技術。
1)代碼自動生成技術。利用gr_modtool工具按照特定的文本設計模式,生成規(guī)范的模塊源代碼模板,并且能夠被計算機識別的代碼程序。采用該技術生成信號處理模塊框架代碼,并完成對模塊端口定義的流程如圖5所示。
圖5 代碼自動生成的流程
2)Python驅動引擎技術。Python引擎是一個加載、解釋執(zhí)行應用腳本的平臺,同時也是一個負責與外界進行交互的程序。在C/C++和Python混合編程中,實現(xiàn)語言交互的方式主要分為嵌入和擴展2種形式。其中,嵌入就是把Python解釋器嵌入到用C/C++匯編語言開發(fā)的應用程序中,使應用程序可以解釋執(zhí)行Python腳本語言編寫的腳本程序;擴展指用C/C++等語言調用Python第三庫中的擴展模塊,然后利用Python實現(xiàn)這些擴展模塊的功能。C/C++和Python主要是通過數(shù)據格式之間的轉換和異常處理的方式進行交互。嵌入和擴展都是通過Python的C/C++語言應用程序接口API進行的,基于Python的混合語言編程的軟件結構如圖6所示。
圖6 基于Python的混合語言編程軟件結構
當運行應用流程圖時,利用Python驅動引擎技術對腳本進行解釋執(zhí)行。根據用戶搭建的應用流程圖,系統(tǒng)框架自動調用提取的功能代碼,然后構建系統(tǒng)自動識別的應用流程框架,把組合的功能代碼組件重新歸入系統(tǒng)應用,生成可執(zhí)行的代碼。
GNU Radio與異構信號處理平臺的性能對比分析如表1所示。
表1 GNU Radio與異構信號處理平臺的對比分析
由表1可知,異構信號處理平臺在GNU Radio平臺的基礎之上,又利用操作系統(tǒng)抽象層技術屏蔽底層硬件差異,利用Python和文本雙腳本引擎機制,增加了組件的跨平臺性。通過網絡連接各硬件平臺,充分利用各平臺的優(yōu)勢,實現(xiàn)不同平臺之間的互操作,提高組件的共享性、可移植性和靈活性。
“可重構”這一概念由美國加利福尼亞大學的Geraid Estrin在20世紀60年代末提出。重構技術通過修改系統(tǒng)內部的代碼或結構,提高系統(tǒng)對應用需求不斷改變的適應性并且降低開發(fā)成本[17]?;谲浖貥嫾夹g的組件研發(fā),不需要深入了解底層硬件技術,而是根據應用功能的需求,利用現(xiàn)有的軟件框架、組件、算法等研究成果,重點關注在組件功能的復用、改進等實現(xiàn)上。
一般情況下,基于軟件無線電平臺的可重構組件開發(fā)流程大致分為應用需求分析、組件建模、組件開發(fā)、應用開發(fā)和應用測試5個步驟[18],如圖7所示。
圖7 可重構組件的開發(fā)流程
本文以Tracz提出的3C模型[19]為基礎,借鑒SCA規(guī)范中波形組件的建模思想,提出了信號處理應用的組件模型,如圖8所示。
圖8 可重構組件建模視圖
該模型由組件描述信息、組件實現(xiàn)部分和組件的實例化對象模型3大部分組成。其中,組件描述信息規(guī)定了組件的內部屬性、端口屬性和參數(shù)屬性,但沒有規(guī)定組件功能的具體實現(xiàn);組件的實現(xiàn)部分是在組件描述信息的基礎上,根據對應的運行開發(fā)環(huán)境來選擇編程語言和不同功能的實現(xiàn)方法,最終生成組件可執(zhí)行的二進制文件,這里稱之為軟件包;組件的實例化對象模型是組件部署于硬件環(huán)境后實例化的組件對象,根據組件描述信息部分生成,并獲取組件實現(xiàn)部分中的函數(shù)句柄,組件對象運行后完成組件的信號處理功能。
組件建模設計完成之后,把單個組件連接起來組成一個完整的應用。進行組件之間數(shù)據傳輸?shù)妮斎攵丝诘膶崿F(xiàn)如圖9所示。
圖9 組件數(shù)據端口實現(xiàn)
由圖9可知,根據輸入數(shù)據的數(shù)據類型選擇對應的端口類型,在端口開辟相應的內存空間,然后以數(shù)據包的形式在組件之間進行數(shù)據傳輸,并以事件消息觸發(fā)的形式完成每一個數(shù)據包輸入和輸出等操作,能夠避免數(shù)據長時間滯留導致緩存溢出,同時也有效提高了組件端口的吞吐量。
把單個組件連接起來組成一個完整的應用后,加載應用時系統(tǒng)調度組件在接收到消息創(chuàng)建命令后,首先調用Xsfa_CreateComponentObj()函數(shù)來創(chuàng)建組件對象,然后從組件軟件包中獲取組件信息初始化ComName_Init()的函數(shù)指針,并調用該函數(shù)完成組件參數(shù)數(shù)據結構的創(chuàng)建和注冊,同時實現(xiàn)其他組件函數(shù)接口向組件對象的注冊。完成應用加載后,用戶通過遠程消息調用組件參數(shù)配置函數(shù)ComName_Config(),完成整個應用中的參數(shù)重配置。當運行應用時,系統(tǒng)調用ComName_DataProcess()函數(shù)完成信號處理。在該函數(shù)中又先調用Xsfa_RectData()函數(shù)獲取組件輸入端口的數(shù)據,然后用功能代碼完成數(shù)據處理,再調用Xsfa_SendData()函數(shù)把處理完的數(shù)據寫入輸出端口的緩存區(qū)中。同時用戶通過調用組件參數(shù)查詢ComName_Query()函數(shù)實現(xiàn)對組件參數(shù)的實時查詢和反饋。最后,對應用卸載時調用ComName_Release()函數(shù)完成對組件對象的析構。組件的數(shù)據處理基本流程如圖10所示。
圖10 組件數(shù)據處理基本流程
在異構信號處理平臺中需要開發(fā)各種各樣的組件實現(xiàn)具體的應用。要在通信領域中完成對信號的分析處理就需要開發(fā)對應的調制/解調、編碼/譯碼、同步、均衡等信號處理組件,參數(shù)估計組件在通信領域中也是比較常用的。接下來以計算簡單的包絡平方譜估計為例,來驗證信號處理組件的有效性和可移植性。
3.1.1 基本原理
相移鍵控(Phase Shift Keying,PSK)[20]是利用載波的相位變化來傳遞數(shù)字信息,而振幅和頻率保持不變。設MPSK信號的時域表達式為:
(1)
其中,g(t)是脈沖寬度為Ts的成形脈沖,A是信號的幅度,fc是信號的載波,m=0,1,…,M-1。
信號x(t)的希爾伯特變換表示為:
(2)
信號x(t)的解析形式為:
(3)
(4)
(5)
其中,u(t)是正弦時鐘信號波形,其頻譜是離散譜,ns(t)是噪聲,其頻譜是連續(xù)譜。
對u(t)做N點離散傅里葉變換DFT可以得到:
(6)
其中,G(f)是成形濾波g(t)的傅里葉變換,*表示卷積運算。由于G(f)是帶限的,即|f|>1/Ts時G(f)=0,只有當U(f)的離散譜線出現(xiàn)時,對應的頻率值為直流分量和碼元速率分量。因此,可以通過檢測信號的包絡平方譜中的碼元速率離散譜線來估計信號的碼元速率[21]。
3.1.2 組件設計
為了盡可能減小碼間串擾,可以采用矩形脈沖濾波器或者升余弦脈沖濾波器對調制信號進行濾波,把頻譜集中在傳輸帶寬內。本文以平方根升余弦脈沖濾波器為例,根據PSK信號產生的原理,以及對現(xiàn)有參數(shù)估計算法的研究分析,選擇以計算簡單的包絡平方譜估計為例實現(xiàn)對信號參數(shù)的估計。利用包絡平方譜估計信號碼元速率功能實現(xiàn)的邏輯框圖以及平臺中對應的信號處理組件如圖11所示。
圖11 包絡平方譜邏輯框圖及對應的信號處理組件
可重構組件是組件化應用開發(fā)的基礎,同時也是異構信號處理平臺框架的重要組成部分。以圖11中的Square組件為例,開發(fā)組件應用的具體流程如下:
步驟1利用可視化或者人工方式對Square組件建模,生成組件描述信息、組件實現(xiàn)部分等信息。
步驟2根據組件輸入端口的實現(xiàn)方式設計Square組件的輸入輸出端口以及對應的內存空間,以便數(shù)據進行傳輸。
步驟3對Square組件的ComName_DataProcess()、Xsfa_RectData()、Xsfa_SendData()等函數(shù)中編寫功能實現(xiàn)代碼,重復前3步編寫FFT組件、Envelope Square Spectrum組件等組件。
步驟4根據圖11中的邏輯框圖修改應用裝配腳本文件,實現(xiàn)應用的編譯、測試和運行等操作。
3.2.1 參數(shù)估計均方誤差分析
設計完信號處理組件并在運行環(huán)境中搭建應用流程圖,為了驗證組件的有效性,就采用參數(shù)估計均方誤差對比分析。
本文采用歸一化均方誤差(Normalized Mean Square Error,NMSE)nNMSE來衡量信號的參數(shù)估計性能,定義為:
(7)
設置信號源參數(shù)如下:隨機產生N=1 024個二進制比特數(shù),采樣率fs=20 MHz,載頻fc=4 MHz,采樣點數(shù)為10個點,平方根升余弦脈沖濾波器的滾降因子為0.35,噪聲模型為加性高斯白噪聲。分別在GNU Radio平臺和異構信號處理平臺中編寫信號處理組件,利用搭建的信號參數(shù)估計流程圖對每一信噪比進行500次獨立蒙特卡洛仿真實驗,記錄信號碼元速率的估計值,然后在Matlab工具中利用式(16)計算出信號碼元速率的均方誤差,如表2所示。
表2 各平臺的參數(shù)估計均方誤差比較
實驗結果表明,在GNU Radio平臺和異構信號處理平臺中得到的參數(shù)估計均方誤差與Matlab中的參數(shù)估計均方誤差基本吻合,驗證了GNU Radio平臺和異構信號處理平臺中信號處理組件的有效性。
3.2.2 可重構組件的可移植性分析
采用模塊再設計方法修改GNU Radio平臺中的程序,把不符合異構信號處理平臺語法規(guī)則的代碼加以修改,而保證其功能和外部行為不變[22]。采用該方法把GNU Radio平臺中的組件移植到異構信號處理平臺中,然后對比分析驗證結果的正確性,最終實現(xiàn)組件的跨平臺移植。其具體步驟如下:
步驟1分析GNU Radio與異構信號處理平臺之間的差異,找出兩平臺之間的接口映射關系,以便進行代碼修改。
步驟2結合異構信號處理平臺中的規(guī)范對源代碼的函數(shù)接口、組件接口等進行修改,保證組件的函數(shù)功能不變。
步驟3配置應用環(huán)境,獲得可用的應用系統(tǒng)。設置并修改編譯環(huán)境、環(huán)境變量和異構信號處理平臺中的應用裝配腳本文件。
步驟4編譯試運行,跟蹤調試異常錯誤的代碼,修改錯誤直到程序在異構信號處理平臺上能夠正常運行。
步驟5進行組件的功能測試,以包絡平方譜參數(shù)估計算法為例,將異構信號處理平臺中的測試結果與GNU Radio中的結果比較分析,確保移植后的代碼功能不變。利用3.2.1節(jié)中的方法估計GNU Radio和異構信號處理平臺中的碼元速率均方誤差,如表3所示。
表3 各平臺的參數(shù)估計均方誤差比較
實驗結果表明,在異構信號處理平臺中得到的碼元速率估計的均方誤差與GNU Radio平臺中碼元速率估計的均方誤差基本吻合,驗證了可重構組件的跨平臺可移植性。
本文提出一種基于軟件重構技術的組件設計方法,實現(xiàn)組件的可復用和可重構功能,避免了組件的重復開發(fā),縮短了組件開發(fā)時間,降低了研發(fā)成本。隨著通信技術的迅速發(fā)展,多平臺協(xié)同操作、組件的跨平臺移植、組件可重構以及對信號實時處理等操作是未來通信裝備的發(fā)展趨勢。異構信號處理平臺中可重構組件在未來通信領域中具有廣闊的應用前景。
[1] 劉建勛.基于軟件無線電的高速信號處理平臺設計與實現(xiàn)[D].西安:西安電子科技大學,2014.
[2] MEZ I,MAROJEVIC V,SALAZAR J,et al.A lightweight operating environment for next generation cognitive radios[C]//Proceedings of the 11th Euromicro Conference on Digital System Design Architectures,Methods and Tools.Washington D.C.,USA:IEEE Press,2008:47-52.
[3] TAN Kun,ZHANG Jiansong,FANG Ji,et al.Sora:high-performance software radio using general-purpose multi-core processors[J].Communications of the ACM,2011,54(1):99-107.
[4] SUTTON P D,LOTZE J,LAHLOU H,et al.Iris:an architecture for cognitive radio networking testbeds[J].IEEE Communications Magazine,2010,48(9):114-122.
[5] CHEN Duyun,VANHOY G,BEAUFAIT M,et al.OSSIE/GNU radio generic component[C]//Proceedings of Wireless Telecommunications Symposium.Washington D.C.,USA:IEEE Press,2011:1-5.
[6] GNU Radio[EB/OL].[2017-03-30].http://www.gnu.org.
[7] VINOSKIS.CORBA:integrating diverse applications within distributed heterogeneous environments[J].IEEE Communications Magazine,1997,35(2):46-55.
[8] INVERARDI P,TIVOLI M.Deadlock-free software architectures for COM/DCOM applications[J].Journal of Systems and Software,2002,65(3):173-183.
[9] 張 健,王衛(wèi)紅,夏 添.基于EJB的組件開發(fā)技術[J].計算機工程,2002,28(3):89-91.
[10] 杜 虹,彭 華,馬金全,等.基于異構信號處理平臺的自動代碼生成工具[J].電子技術應用,2016,42(9):118-121.
[11] CHEN Qiang,TIRUMALA S,JAIN A.Integrated circuit optimization modeling technology:US,US8271931[P].2012.
[12] HONG Yun-seok,SONG Ho-uk.Refresh period signal generator with digital temperature information generation function:US,US 7859931 B2[P].2010.
[13] MUSHTAQ A,OLAUSSEN K.Automatic code generator for higher order integrators[J].Computer Physics Communications,2013,185(5):1461-1472.
[14] 黃 凌.基于GNU Radio和USRP的認知無線電平臺研究[D].廣州:華南理工大學,2010.
[15] 江 超,李宗伯.軟件無線電GNU Radio和USRP的分析與研究[C]//亞太青年通信與技術學術會議論文集.昆明:[出版者不詳],2010:419-422.
[16] BEAZLEY D M.SWIG:an easy to use tool for integrating scripting languages with C and C++[C]//Proceedings of the 4th Conference on USENIX Tcl/Tk Workshop.New York,USA:ACM Press,1996:15.
[17] FOWLER M.重構:改善既有代碼的設計[M].熊 節(jié),譯.北京:人民郵電出版社,2015.
[18] 張 帆.可重構軟件平臺構建原理與應用研究[D].武漢:武漢理工大學,2012.
[19] 王志堅,費玉奎,婁淵清.軟件構件技術及其應用[M].北京:科學出版社,2005.
[20] 樊昌信,曹麗娜.通信原理[M]北京:國防工業(yè)出版社,2007.
[21] 蔡巧戀.常用數(shù)字通信信號的參數(shù)估計研究[D].成都:電子科技大學,2013.
[22] 劉 悅.基于UNIX和Linux平臺的軟件移植原理[D].西安:西北工業(yè)大學,2006.