解莹解剑(中国电子科技集团公司第五十四研究所,河北石家庄050081)
导航信号质量监测的混合编程实现与应用
解莹解剑(中国电子科技集团公司第五十四研究所,河北石家庄050081)
针对导航信号质量监测算法计算量大、编程复杂和开发周期长的问题,分析了Matlab软件等开发工具的优缺点,提出了3种混合编程的方法以实现导航信号质量监测系统的开发,包括基于引擎的方法、基于组件的方法以及基于动态链接库的方法,分析了各自的特点,并采用基于动态链接库的方法,简化了导航信号质量监测算法的设计和开发工作,缩短了项目的研发周期。
导航信号质量监测 Matlab混合编程 动态链接库
基于上述分析,在导航信号质量监测中,可以采用混合编程的方法,以充分利用不同软件的优点,从而既可以缩短开发周期,又能够提高软件的质量。下面主要介绍VC++和Matlab混合编程的3种方法[4]。
VC++和Matlab混合编程最简单的实现方式就是调用Matlab引擎。Matlab允许用户通过调用Matlab引擎的方法来调用Matlab函数完成计算功能,并提供了一系列操作Matlab引擎的应用程序接口(API)函数,通过这些函数用户可以实现Matlab和VC++之间的交互。这样可以把运算任务交给Matlab来完成,而用户界面部分则用VC++来实现,列出了一些常用的应用程序接口函数如表1所示。
表1 应用程序接口函数库
通过调用Matlab引擎的方法实现混合编程,需要首先把Matlab对应的包含文件和库文件包含到VC++路径中,具体方法如下:进入VC++的tools/options/directories,在include file中添加D:MATLABR2007AEXTERNINCLUDE,在library file中添加D:MATLABR2007AEXTERNLIBWIN32MICROSOFT。编写VC++程序时,需要包含Matlab引擎头文件#include“engine.h”。在调用Matlab引擎之前需要首先定义Matlab引擎变量,并调用engOpen函数开启引擎,在计算完毕后,需要调用engClose函数关闭Matlab引擎。程序中可以开启多个Matlab引擎,但是同时只能有一个引擎处于运行状态。
基于这个方法,就可以简化信号监测中的算法开发任务。基于引擎的方式实现简单,但是执行效率较低,设计起来不够灵活,在工程中应用不广泛。
组件对象模型(COM)是以组件为发布单元的对象模型,它是建立在二进制级别上的规范,所以组件对象之间的交互规范不依赖于任何特定的开发语言[5]。采用这种方法开发模式可以实现跨语言的编程,也使得软件升级换代更加简单。
把Matlab程序编译为COM组件的方法如下所示:①首先建立一个新的工程;②编写Matlab函数,并把函数添加到新建的组件类中;③添加函数,实现对COM组件属性的访问;④对工程进行编译,得到COM组件。得到COM组件以后,就可以在采用VC++中调用COM组件的方式,来简化工程中的编程任务。
基于COM组件的方法虽然能够很好的实现VC++和Matlab混合编程,但是具体实现起来步骤比较繁琐,还需要算法设计人员具备COM组件的相关知识,因此实际中应用不多。
动态链接库(DLL)可以使程序设计更加灵活,可以很好地实现代码共享,采用一种语言设计的动态链接库,可以很好的在其他语言中进行调用,而不会增加设计复杂度。Matlab也提供了把m文件编译为动态链接库的方法,以利于使用不同编程语言的程序员调用。使用matlab编译器之前,需要对其进行设置,运行mbuild setup,选择安装VC++对应的编译器,然后就可以用通过mcc命令,把相应的Matlab文件编译成动态链接库。
VC++调用Matlab动态链接库的实现步骤具体如下:
只有把品质、把质量看作生命的企业,才能更好地服务于质量检测市场。对于这一点,凌云不仅做到了,而且还将做得更好。
①编写Matlab函数文件,取名为myplot.m;
②运行mcc B csharedlib:libmycplot myplot.m,将m文件编译为动态链接库。编译产生的文件中,对VC++调用动态链接库libmyplot.h,libmyplot.lib,libmyplot.ctf,libmyplot.dll文件;
③ 创建 VC工程,取名为 testmyplot,然后选择project|settings,在link|input选项中,添加链接过程中需要的库文件;
④将libmyplot.dll复制到Windows系统目录(system或者system32)后者testmyplot工程的debug目录中,将libmyplot.h,libmyplot.lib复制到testmyplot工程目录中,将libmyplot.ctf复制到testmyplot工程的debug目录中。
然后就可以在工程中调用libmyplot的动态链接库,实现相应的功能了。
在VC++中调用Matlab动态链接库,每一个动态链接库都对应一个MCR实例。在每一个应用中需要对MCR进行初始化,调用动态链接库之前,要对链接库进行初始化。调用结束后要关闭相应的动态链接库。当不需要调用matlab动态链接库时,要释放调用的MCR资源。
另外还可以通过FindWindow,ModifyStyle,MoveWindow函数将生成的Matlab图形绘制窗口其纳入到VC的界面中,这样可以使得整个程序的运行风格更加协调。是基于动态链接库的混合编程计算得到的导航信号功率谱[6],如图1所示,其中实线是基带信号码片延迟0.06个码片时的功率谱,虚线是理想基带信号功率谱。
图1 卫星导航基带信号功率谱(平滑谱)
基于动态链接库的混合编程方法实现起来比较灵活,能够很好的结合VC++和Matlab的优点,有效地简化系统设计,缩短设计周期,提高了效率和可靠性,可以很好地满足工程应用的需求。此外采用这种方法,编程人员只需要提供动态链接库和相应的调用说明,有利于软件模块化的实现。
导航信号质量监测算法计算量大,编程复杂,采用混合编程的方法能够充分利用VC++的图形用户界面设计能力和Matlab软件的数值计算能力,有效地简化了系统设计,缩短了开发周期。此外,在运算量比较大,算法比较密集的工程设计,如信号处理、图像处理、声音处理、数学建模和数据挖掘等领域中,混合编程方法也具有很好的应用前景。
[1]Elliott D,Kaplan,Christopher J,Hegarty.Understanding GPS Principles and Applications,Second Edition.[M].寇艳红,译.北京:电子工业出版社,2007:111-171
[2]Mitelman A M.Signal Quality Monitoring for GPS Augmentation Systems[D].USA:Stanford University,2004.
[3]陈路路.VC++和Matlab集成应用的研究[J].无线电工程,2006,36(5):55-58.
[4]刘 维.精通Matlab与C/C++混合程序设计[M].北京:北京航空航天大学出版社,2008:138-253.
[5]谭思云,陈红波,李志明.Matlab和VC联合编程的方法及实现[J].计算机应用.2004,23(1)26-29.
[6]高 成,金 涛.MATLAB信号处理与应用[M].北京:国防工业出版社,2005:28-82.
Implement and Application of Mixed Co-programming of Navigation Signal Quality Monitoring
XIE Ying,XIE Jian
(The 54th Research Institute of CETC,Shijiazhuang Hebei 050081,China)
In view of complex computation,complex programming and long development period of navigation signal quality monitoring algorithm,this paper analyzes the advantages and disadvantages of development tools such as Matlab.The three co-programming methods are proposed to implement the development of navigation signal quality monitoring system,such as engine-based method,component-based method and DLL-based method,and their characteristics are analyzed.The DLL-based method is used to simplify the design and development of navigation signal quality monitoring algorithm and shorten the development period.
navigation signal quality monitoring;Matlab;Co-programming;Dynamic Link Library(DLL)
TP311
A
1008-1739(2015)24-58-3
定稿日期:2015-11-26