解瑩解劍(中國電子科技集團公司第五十四研究所,河北石家莊050081)
導航信號質(zhì)量監(jiān)測的混合編程實現(xiàn)與應用
解瑩解劍(中國電子科技集團公司第五十四研究所,河北石家莊050081)
針對導航信號質(zhì)量監(jiān)測算法計算量大、編程復雜和開發(fā)周期長的問題,分析了Matlab軟件等開發(fā)工具的優(yōu)缺點,提出了3種混合編程的方法以實現(xiàn)導航信號質(zhì)量監(jiān)測系統(tǒng)的開發(fā),包括基于引擎的方法、基于組件的方法以及基于動態(tài)鏈接庫的方法,分析了各自的特點,并采用基于動態(tài)鏈接庫的方法,簡化了導航信號質(zhì)量監(jiān)測算法的設計和開發(fā)工作,縮短了項目的研發(fā)周期。
導航信號質(zhì)量監(jiān)測 Matlab混合編程 動態(tài)鏈接庫
基于上述分析,在導航信號質(zhì)量監(jiān)測中,可以采用混合編程的方法,以充分利用不同軟件的優(yōu)點,從而既可以縮短開發(fā)周期,又能夠提高軟件的質(zhì)量。下面主要介紹VC++和Matlab混合編程的3種方法[4]。
VC++和Matlab混合編程最簡單的實現(xiàn)方式就是調(diào)用Matlab引擎。Matlab允許用戶通過調(diào)用Matlab引擎的方法來調(diào)用Matlab函數(shù)完成計算功能,并提供了一系列操作Matlab引擎的應用程序接口(API)函數(shù),通過這些函數(shù)用戶可以實現(xiàn)Matlab和VC++之間的交互。這樣可以把運算任務交給Matlab來完成,而用戶界面部分則用VC++來實現(xiàn),列出了一些常用的應用程序接口函數(shù)如表1所示。
表1 應用程序接口函數(shù)庫
通過調(diào)用Matlab引擎的方法實現(xiàn)混合編程,需要首先把Matlab對應的包含文件和庫文件包含到VC++路徑中,具體方法如下:進入VC++的tools/options/directories,在include file中添加D:MATLABR2007AEXTERNINCLUDE,在library file中添加D:MATLABR2007AEXTERNLIBWIN32MICROSOFT。編寫VC++程序時,需要包含Matlab引擎頭文件#include“engine.h”。在調(diào)用Matlab引擎之前需要首先定義Matlab引擎變量,并調(diào)用engOpen函數(shù)開啟引擎,在計算完畢后,需要調(diào)用engClose函數(shù)關閉Matlab引擎。程序中可以開啟多個Matlab引擎,但是同時只能有一個引擎處于運行狀態(tài)。
基于這個方法,就可以簡化信號監(jiān)測中的算法開發(fā)任務。基于引擎的方式實現(xiàn)簡單,但是執(zhí)行效率較低,設計起來不夠靈活,在工程中應用不廣泛。
組件對象模型(COM)是以組件為發(fā)布單元的對象模型,它是建立在二進制級別上的規(guī)范,所以組件對象之間的交互規(guī)范不依賴于任何特定的開發(fā)語言[5]。采用這種方法開發(fā)模式可以實現(xiàn)跨語言的編程,也使得軟件升級換代更加簡單。
把Matlab程序編譯為COM組件的方法如下所示:①首先建立一個新的工程;②編寫Matlab函數(shù),并把函數(shù)添加到新建的組件類中;③添加函數(shù),實現(xiàn)對COM組件屬性的訪問;④對工程進行編譯,得到COM組件。得到COM組件以后,就可以在采用VC++中調(diào)用COM組件的方式,來簡化工程中的編程任務。
基于COM組件的方法雖然能夠很好的實現(xiàn)VC++和Matlab混合編程,但是具體實現(xiàn)起來步驟比較繁瑣,還需要算法設計人員具備COM組件的相關知識,因此實際中應用不多。
動態(tài)鏈接庫(DLL)可以使程序設計更加靈活,可以很好地實現(xiàn)代碼共享,采用一種語言設計的動態(tài)鏈接庫,可以很好的在其他語言中進行調(diào)用,而不會增加設計復雜度。Matlab也提供了把m文件編譯為動態(tài)鏈接庫的方法,以利于使用不同編程語言的程序員調(diào)用。使用matlab編譯器之前,需要對其進行設置,運行mbuild setup,選擇安裝VC++對應的編譯器,然后就可以用通過mcc命令,把相應的Matlab文件編譯成動態(tài)鏈接庫。
VC++調(diào)用Matlab動態(tài)鏈接庫的實現(xiàn)步驟具體如下:
只有把品質(zhì)、把質(zhì)量看作生命的企業(yè),才能更好地服務于質(zhì)量檢測市場。對于這一點,凌云不僅做到了,而且還將做得更好。
①編寫Matlab函數(shù)文件,取名為myplot.m;
②運行mcc B csharedlib:libmycplot myplot.m,將m文件編譯為動態(tài)鏈接庫。編譯產(chǎn)生的文件中,對VC++調(diào)用動態(tài)鏈接庫libmyplot.h,libmyplot.lib,libmyplot.ctf,libmyplot.dll文件;
③ 創(chuàng)建 VC工程,取名為 testmyplot,然后選擇project|settings,在link|input選項中,添加鏈接過程中需要的庫文件;
④將libmyplot.dll復制到Windows系統(tǒng)目錄(system或者system32)后者testmyplot工程的debug目錄中,將libmyplot.h,libmyplot.lib復制到testmyplot工程目錄中,將libmyplot.ctf復制到testmyplot工程的debug目錄中。
然后就可以在工程中調(diào)用libmyplot的動態(tài)鏈接庫,實現(xiàn)相應的功能了。
在VC++中調(diào)用Matlab動態(tài)鏈接庫,每一個動態(tài)鏈接庫都對應一個MCR實例。在每一個應用中需要對MCR進行初始化,調(diào)用動態(tài)鏈接庫之前,要對鏈接庫進行初始化。調(diào)用結束后要關閉相應的動態(tài)鏈接庫。當不需要調(diào)用matlab動態(tài)鏈接庫時,要釋放調(diào)用的MCR資源。
另外還可以通過FindWindow,ModifyStyle,MoveWindow函數(shù)將生成的Matlab圖形繪制窗口其納入到VC的界面中,這樣可以使得整個程序的運行風格更加協(xié)調(diào)。是基于動態(tài)鏈接庫的混合編程計算得到的導航信號功率譜[6],如圖1所示,其中實線是基帶信號碼片延遲0.06個碼片時的功率譜,虛線是理想基帶信號功率譜。
圖1 衛(wèi)星導航基帶信號功率譜(平滑譜)
基于動態(tài)鏈接庫的混合編程方法實現(xiàn)起來比較靈活,能夠很好的結合VC++和Matlab的優(yōu)點,有效地簡化系統(tǒng)設計,縮短設計周期,提高了效率和可靠性,可以很好地滿足工程應用的需求。此外采用這種方法,編程人員只需要提供動態(tài)鏈接庫和相應的調(diào)用說明,有利于軟件模塊化的實現(xiàn)。
導航信號質(zhì)量監(jiān)測算法計算量大,編程復雜,采用混合編程的方法能夠充分利用VC++的圖形用戶界面設計能力和Matlab軟件的數(shù)值計算能力,有效地簡化了系統(tǒng)設計,縮短了開發(fā)周期。此外,在運算量比較大,算法比較密集的工程設計,如信號處理、圖像處理、聲音處理、數(shù)學建模和數(shù)據(jù)挖掘等領域中,混合編程方法也具有很好的應用前景。
[1]Elliott D,Kaplan,Christopher J,Hegarty.Understanding GPS Principles and Applications,Second Edition.[M].寇艷紅,譯.北京:電子工業(yè)出版社,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聯(lián)合編程的方法及實現(xiàn)[J].計算機應用.2004,23(1)26-29.
[6]高 成,金 濤.MATLAB信號處理與應用[M].北京:國防工業(yè)出版社,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