李丹丹,马金全,杨平平
(信息工程大学 信息系统工程学院,郑州 450001)
随着不同的信号带宽、调制方式等多种通信体制的不断涌现,对通信装备平台的快速研发、系统灵活性等方面提出了更高要求,使得基于软件无线电技术的新型平台成为了研究热点[1]。为了解决不同异构平台之间的互连互通,以及各种标准通信体制之间的灵活切换等问题,各种新型的软件无线电平台凭借其良好的可移植性、可重构性和可扩展性等优点得到广泛的应用。现有的平台中,加泰罗尼亚大学提出的ALOE[2]、中国微软研究院的SORA[3]和爱尔兰圣三一学院研发的Iris[4]等平台在信号处理方面应用较少;弗吉尼亚理工学院研究的OSSIE[5]和被誉为“黑客无线电”的GNU Radio[6]只能用来完成通信系统的建模和仿真学习。针对不同装备平台的系统软件不兼容、应用组件接口不统一、不同板卡间平台应用组件相互调用的实时性差等一系列问题,为了满足通信设备新的要求,基于软件组件服务技术的智能化信号处理平台已成为了软件无线电领域的研究热点。
传统的通用组件技术有OMG的CORBA[7]、微软的COM/DCOM[8]和SUN的EBJ[9]等。其中,CORBA采用一种标准的通信模型,可在不同操作系统、网络协议和硬件结构的客户和服务器中实现应用层之间的交互运行,使得CORBA具有语言无关性、可扩展性和平台无关性等优点,从而使得基于对象的软件组件在分布式异构环境中实现可重用、可移植和互操作功能;COM技术具有语言平台无关性、可重用性、封装性、进程透明性等优点,利用其技术开发的可重构组件可以支持多种编程语言的混合编程,在组件接口和代码实现中间建立一种松耦合的交互环境,提高了组件的重用性和扩展性;EJB的体系结构完全独立于任何特定的平台、协议和中间件等基础设施,实现了应用程序的跨平台移植。但CORBA技术的规范没有标准化,降低了组件的互操作性和可移植性;COM的专用性比较强,只局限于Windows平台,不利于实现组件的跨平台和可重构功能;而EJB的开发语言比较单一,只能通过虚拟机才能实现组件的跨平台互操作。
为了解决传统通用组件技术存在的不足,本文提出一种新型的基于软件重构技术的组件设计方法。该方法先将软件模块封装成可重构组件,使组件之间具有统一的接口定义规范,解决不同软件系统和硬件平台中功能相同或相似的组件重复开发问题,实现组件的跨平台、可重构性、共享性和可移植性等功能。
1.1.1 软件架构
异构信号处理平台的硬件体系架构由CPCI、VPX、ATCA、mTCA、专用PC平台,以及DSP、GPU和FPGA等处理器组成。软件体系架构采用软件组件服务技术,解决了ATCA、CPCI、VPX等异构信号处理平台之间的互连互通,以及FPGA和DSP等混合计算板卡的软件开发和应用组件之间的共享性弱等问题。为了屏蔽硬件、系统、语言等因素引起的各层之间的差异性,该架构采用分层结构的方式进行归类。把软件体系架构分为硬件层、板级支持包层、操作系统与驱动层、硬件抽象层、核心服务层和应用层[10],软件体系结构如图1所示。
图1 软件体系架构
1.1.2 组件的关键技术
异构信号处理平台采用操作系统抽象层技术屏蔽了操作系统之间的差异,集成了网口和电口等多种接口,为DSP和FPGA等处理器提供标准统一的数据访问接口,同时为各种异构硬件平台提供统一的可视化开发环境与底层支撑,最终实现通信装备平台的网络化和一体化。为了解决可重构组件在异构平台中跨平台操作和可移植性等难点,异构信号处理平台中的组件设计主要涉及到操作系统抽象层技术、代码自动生成技术和双脚本引擎机制等关键技术。
1)代码自动生成技术。主要完成硬件驱动函数的注册和函数框架生成、可视化配置文件向导、平台描述要素的宏定义、软件组件源程序数据处理框架等生成,以及自动生成可执行的脚本文件等工作。而实现代码自动生成的关键是建模抽象技术[11]、复用技术[12]和python引擎技术[13]。该技术提高软件开发的效率,减少了开发者的任务量,降低异构平台互操作的难度。
2)双脚本引擎机制。利用Python脚本文件和文本的双脚本解析引擎,对应用装配脚本文件进行解析执行,提高了异构信号处理平台的跨平台性、可移植性和可扩展性。利用Python脚本文件可实现与C/C++程序的无缝交互,充分利用C/C++快速的计算速度,以此提高程序的运行速度,同时兼备Python的简单流模式,增加代码的可读性。以文本作为应用装配脚本文件可扩展脚本的应用范围,提高了操作系统的适应性,增加了系统的可移植性。形成应用时可以根据引擎机制选择何种脚本类型对平台应用进行描述。运行应用时双脚本解析引擎机制根据用户选择的脚本格式选择对应的解析机制,双脚本解析引擎机制如图2所示。
图2 双脚本解析引擎机制
文本文件是各系统的通用文件,易于被各大系统识别。文本的记录方式通俗易懂,对开发者和用户修改文本内容提供了很大的方便。根据应用模型中的应用装配文件编写脚本文件,方便文本引擎提取应用流程图中的有效信息,对运行程序进行解析。文本以“XWINRES3.0”开始识别文件是否为项目应用装配脚本文件,又以“END”结束文本解析。该脚本采用按行读取的方式执行应用程序,一行语句以回车符结束,代表执行一次函数,以“//”注释右侧一行内容,正文中各参数之间用“,”隔开,文本脚本文件格式如图3所示。Python驱动引擎参考GNU Rado平台中的详细介绍。
图3 文本脚本文件格式
3)操作系统抽象层技术。屏蔽了网络协议、硬件平台、操作系统、处理器和数据库等底层之间的差异性,对操作系统要素进行抽象化,把平台有关的部分与平台不相关的部分完全分离,使开发的应用与平台无关,实现组件的跨平台操作,降低对软件组件代码的修改,缩短开发时间。
1.2.1 GNU Radio软件结构
由Eric Blossom开发的GNU Radio[14]软件无线电平台主要用于通信系统的建模和仿真,其标准库包括各种调制/解调组件、滤波器组件和信号处理组件等,还可以扩展编写新的组件。一般情况下,流图由信号源、信号接收器和一般信号处理组件3种组件组成,根据应用的需求把组件连接起来,搭建一个完整的应用流图[15],如图4所示。其中,应用程序中的组件是由C++语言编写的各种高速数据处理组件,它主要负责完成基带信号的调制/解调、编码/译码和滤波等高速操作。SWIG[16]即简化的封装和接口生成器,可以实现C++编程语言和Python脚本语言之间的接口转换,使得Python可以直接调用Block组件。
图4 GNU Radio软件结构
1.2.2 GNU Radio关键技术
GNU Radio采用wxPython的GUI流图连接机制实现代码自动生成,以便用户搭建应用流程图,并与底层系统建立连接关系。在图形应用界面中以可视化方式双击或拖拽选中的组件搭建应用流程图,然后编译流程图自动生成应用脚本,完成应用的实现。在GNU Radio平台中可重构组件的设计主要涉及到代码自动生成技术、Python驱动引擎等关键技术。
1)代码自动生成技术。利用gr_modtool工具按照特定的文本设计模式,生成规范的模块源代码模板,并且能够被计算机识别的代码程序。采用该技术生成信号处理模块框架代码,并完成对模块端口定义的流程如图5所示。
图5 代码自动生成的流程
2)Python驱动引擎技术。Python引擎是一个加载、解释执行应用脚本的平台,同时也是一个负责与外界进行交互的程序。在C/C++和Python混合编程中,实现语言交互的方式主要分为嵌入和扩展2种形式。其中,嵌入就是把Python解释器嵌入到用C/C++汇编语言开发的应用程序中,使应用程序可以解释执行Python脚本语言编写的脚本程序;扩展指用C/C++等语言调用Python第三库中的扩展模块,然后利用Python实现这些扩展模块的功能。C/C++和Python主要是通过数据格式之间的转换和异常处理的方式进行交互。嵌入和扩展都是通过Python的C/C++语言应用程序接口API进行的,基于Python的混合语言编程的软件结构如图6所示。
图6 基于Python的混合语言编程软件结构
当运行应用流程图时,利用Python驱动引擎技术对脚本进行解释执行。根据用户搭建的应用流程图,系统框架自动调用提取的功能代码,然后构建系统自动识别的应用流程框架,把组合的功能代码组件重新归入系统应用,生成可执行的代码。
GNU Radio与异构信号处理平台的性能对比分析如表1所示。
表1 GNU Radio与异构信号处理平台的对比分析
由表1可知,异构信号处理平台在GNU Radio平台的基础之上,又利用操作系统抽象层技术屏蔽底层硬件差异,利用Python和文本双脚本引擎机制,增加了组件的跨平台性。通过网络连接各硬件平台,充分利用各平台的优势,实现不同平台之间的互操作,提高组件的共享性、可移植性和灵活性。
“可重构”这一概念由美国加利福尼亚大学的Geraid Estrin在20世纪60年代末提出。重构技术通过修改系统内部的代码或结构,提高系统对应用需求不断改变的适应性并且降低开发成本[17]。基于软件重构技术的组件研发,不需要深入了解底层硬件技术,而是根据应用功能的需求,利用现有的软件框架、组件、算法等研究成果,重点关注在组件功能的复用、改进等实现上。
一般情况下,基于软件无线电平台的可重构组件开发流程大致分为应用需求分析、组件建模、组件开发、应用开发和应用测试5个步骤[18],如图7所示。
图7 可重构组件的开发流程
本文以Tracz提出的3C模型[19]为基础,借鉴SCA规范中波形组件的建模思想,提出了信号处理应用的组件模型,如图8所示。
图8 可重构组件建模视图
该模型由组件描述信息、组件实现部分和组件的实例化对象模型3大部分组成。其中,组件描述信息规定了组件的内部属性、端口属性和参数属性,但没有规定组件功能的具体实现;组件的实现部分是在组件描述信息的基础上,根据对应的运行开发环境来选择编程语言和不同功能的实现方法,最终生成组件可执行的二进制文件,这里称之为软件包;组件的实例化对象模型是组件部署于硬件环境后实例化的组件对象,根据组件描述信息部分生成,并获取组件实现部分中的函数句柄,组件对象运行后完成组件的信号处理功能。
组件建模设计完成之后,把单个组件连接起来组成一个完整的应用。进行组件之间数据传输的输入端口的实现如图9所示。
图9 组件数据端口实现
由图9可知,根据输入数据的数据类型选择对应的端口类型,在端口开辟相应的内存空间,然后以数据包的形式在组件之间进行数据传输,并以事件消息触发的形式完成每一个数据包输入和输出等操作,能够避免数据长时间滞留导致缓存溢出,同时也有效提高了组件端口的吞吐量。
把单个组件连接起来组成一个完整的应用后,加载应用时系统调度组件在接收到消息创建命令后,首先调用Xsfa_CreateComponentObj()函数来创建组件对象,然后从组件软件包中获取组件信息初始化ComName_Init()的函数指针,并调用该函数完成组件参数数据结构的创建和注册,同时实现其他组件函数接口向组件对象的注册。完成应用加载后,用户通过远程消息调用组件参数配置函数ComName_Config(),完成整个应用中的参数重配置。当运行应用时,系统调用ComName_DataProcess()函数完成信号处理。在该函数中又先调用Xsfa_RectData()函数获取组件输入端口的数据,然后用功能代码完成数据处理,再调用Xsfa_SendData()函数把处理完的数据写入输出端口的缓存区中。同时用户通过调用组件参数查询ComName_Query()函数实现对组件参数的实时查询和反馈。最后,对应用卸载时调用ComName_Release()函数完成对组件对象的析构。组件的数据处理基本流程如图10所示。
图10 组件数据处理基本流程
在异构信号处理平台中需要开发各种各样的组件实现具体的应用。要在通信领域中完成对信号的分析处理就需要开发对应的调制/解调、编码/译码、同步、均衡等信号处理组件,参数估计组件在通信领域中也是比较常用的。接下来以计算简单的包络平方谱估计为例,来验证信号处理组件的有效性和可移植性。
3.1.1 基本原理
相移键控(Phase Shift Keying,PSK)[20]是利用载波的相位变化来传递数字信息,而振幅和频率保持不变。设MPSK信号的时域表达式为:
(1)
其中,g(t)是脉冲宽度为Ts的成形脉冲,A是信号的幅度,fc是信号的载波,m=0,1,…,M-1。
信号x(t)的希尔伯特变换表示为:
(2)
信号x(t)的解析形式为:
(3)
(4)
(5)
其中,u(t)是正弦时钟信号波形,其频谱是离散谱,ns(t)是噪声,其频谱是连续谱。
对u(t)做N点离散傅里叶变换DFT可以得到:
(6)
其中,G(f)是成形滤波g(t)的傅里叶变换,*表示卷积运算。由于G(f)是带限的,即|f|>1/Ts时G(f)=0,只有当U(f)的离散谱线出现时,对应的频率值为直流分量和码元速率分量。因此,可以通过检测信号的包络平方谱中的码元速率离散谱线来估计信号的码元速率[21]。
3.1.2 组件设计
为了尽可能减小码间串扰,可以采用矩形脉冲滤波器或者升余弦脉冲滤波器对调制信号进行滤波,把频谱集中在传输带宽内。本文以平方根升余弦脉冲滤波器为例,根据PSK信号产生的原理,以及对现有参数估计算法的研究分析,选择以计算简单的包络平方谱估计为例实现对信号参数的估计。利用包络平方谱估计信号码元速率功能实现的逻辑框图以及平台中对应的信号处理组件如图11所示。
图11 包络平方谱逻辑框图及对应的信号处理组件
可重构组件是组件化应用开发的基础,同时也是异构信号处理平台框架的重要组成部分。以图11中的Square组件为例,开发组件应用的具体流程如下:
步骤1利用可视化或者人工方式对Square组件建模,生成组件描述信息、组件实现部分等信息。
步骤2根据组件输入端口的实现方式设计Square组件的输入输出端口以及对应的内存空间,以便数据进行传输。
步骤3对Square组件的ComName_DataProcess()、Xsfa_RectData()、Xsfa_SendData()等函数中编写功能实现代码,重复前3步编写FFT组件、Envelope Square Spectrum组件等组件。
步骤4根据图11中的逻辑框图修改应用装配脚本文件,实现应用的编译、测试和运行等操作。
3.2.1 参数估计均方误差分析
设计完信号处理组件并在运行环境中搭建应用流程图,为了验证组件的有效性,就采用参数估计均方误差对比分析。
本文采用归一化均方误差(Normalized Mean Square Error,NMSE)nNMSE来衡量信号的参数估计性能,定义为:
(7)
设置信号源参数如下:随机产生N=1 024个二进制比特数,采样率fs=20 MHz,载频fc=4 MHz,采样点数为10个点,平方根升余弦脉冲滤波器的滚降因子为0.35,噪声模型为加性高斯白噪声。分别在GNU Radio平台和异构信号处理平台中编写信号处理组件,利用搭建的信号参数估计流程图对每一信噪比进行500次独立蒙特卡洛仿真实验,记录信号码元速率的估计值,然后在Matlab工具中利用式(16)计算出信号码元速率的均方误差,如表2所示。
表2 各平台的参数估计均方误差比较
实验结果表明,在GNU Radio平台和异构信号处理平台中得到的参数估计均方误差与Matlab中的参数估计均方误差基本吻合,验证了GNU Radio平台和异构信号处理平台中信号处理组件的有效性。
3.2.2 可重构组件的可移植性分析
采用模块再设计方法修改GNU Radio平台中的程序,把不符合异构信号处理平台语法规则的代码加以修改,而保证其功能和外部行为不变[22]。采用该方法把GNU Radio平台中的组件移植到异构信号处理平台中,然后对比分析验证结果的正确性,最终实现组件的跨平台移植。其具体步骤如下:
步骤1分析GNU Radio与异构信号处理平台之间的差异,找出两平台之间的接口映射关系,以便进行代码修改。
步骤2结合异构信号处理平台中的规范对源代码的函数接口、组件接口等进行修改,保证组件的函数功能不变。
步骤3配置应用环境,获得可用的应用系统。设置并修改编译环境、环境变量和异构信号处理平台中的应用装配脚本文件。
步骤4编译试运行,跟踪调试异常错误的代码,修改错误直到程序在异构信号处理平台上能够正常运行。
步骤5进行组件的功能测试,以包络平方谱参数估计算法为例,将异构信号处理平台中的测试结果与GNU Radio中的结果比较分析,确保移植后的代码功能不变。利用3.2.1节中的方法估计GNU Radio和异构信号处理平台中的码元速率均方误差,如表3所示。
表3 各平台的参数估计均方误差比较
实验结果表明,在异构信号处理平台中得到的码元速率估计的均方误差与GNU Radio平台中码元速率估计的均方误差基本吻合,验证了可重构组件的跨平台可移植性。
本文提出一种基于软件重构技术的组件设计方法,实现组件的可复用和可重构功能,避免了组件的重复开发,缩短了组件开发时间,降低了研发成本。随着通信技术的迅速发展,多平台协同操作、组件的跨平台移植、组件可重构以及对信号实时处理等操作是未来通信装备的发展趋势。异构信号处理平台中可重构组件在未来通信领域中具有广阔的应用前景。
[1] 刘建勋.基于软件无线电的高速信号处理平台设计与实现[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] 张 健,王卫红,夏 添.基于EJB的组件开发技术[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].熊 节,译.北京:人民邮电出版社,2015.
[18] 张 帆.可重构软件平台构建原理与应用研究[D].武汉:武汉理工大学,2012.
[19] 王志坚,费玉奎,娄渊清.软件构件技术及其应用[M].北京:科学出版社,2005.
[20] 樊昌信,曹丽娜.通信原理[M]北京:国防工业出版社,2007.
[21] 蔡巧恋.常用数字通信信号的参数估计研究[D].成都:电子科技大学,2013.
[22] 刘 悦.基于UNIX和Linux平台的软件移植原理[D].西安:西北工业大学,2006.