摘 要:針對(duì)雷達(dá)系統(tǒng)抽象復(fù)雜的特征,利用Matlab的圖形用戶界面開發(fā)設(shè)計(jì)出一套包含密碼登陸界面、雷達(dá)系統(tǒng)主界面和各子界面的軟件包,以方便教師教學(xué)和學(xué)生自學(xué)。在實(shí)現(xiàn)過程中引入Matlab,VC混合編程方法,以充分利用兩種語(yǔ)言的各自優(yōu)勢(shì)。在VC環(huán)境下編寫mexrun函數(shù)并通過混合編程生成MEX文件,編譯后產(chǎn)生的動(dòng)態(tài)鏈接庫(kù)文件可以供Matlab調(diào)用。在Matlab平臺(tái)的實(shí)驗(yàn)界面設(shè)計(jì)中提高了軟件運(yùn)行效率,精簡(jiǎn)了程序代碼。運(yùn)行結(jié)果表明,該軟件包具有友好的用戶界面、詳細(xì)的雷達(dá)系統(tǒng)分析實(shí)例和強(qiáng)大的人機(jī)交互功能。關(guān)鍵詞:雷達(dá)系統(tǒng); Matlab; 混合編程; GUI; MEX
中圖分類號(hào):TN955-34文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)16-0023-03
Design and Implementation of Radar System Simulation Software Package Based on Matlab
CHEN Hong-fei, WANG Ying, DUAN Liu-yun, YIN Zhong, ZONG Jie-bao
(School of Electronic Information, Whuhan University, Whuhan 430072, China)
Abstract: Considering the abstract and complex characteristics of radar systems, a radar system simulation software package including the password login interface, the main interface and the various sub-interfaces of radar systems is developed and designed with the graphical user interface of Matlab to facilitate teachers′ teaching and students′ self-learning. Matlab and VC hybrid programming approach are introduced in the implementation process to make full use of their advantages. A Mexrun function is compiled in the VC environment, the MEX file is generated through the hybrid programming, and then the dynamic link library files generated after compiling can be provided for Matlab′s call. The efficiency of the software running was improved and the program code was streamlined in the experimental interface design on MSTLAB platform. The running results show that the simulation software has friendly user interfaces, detailed examples of the radar system analysis and powerful human-computer interaction function.Keywords:radar system; Matlab; VC; hybrid programming; GUI; MEX
0 引 言
近些年來國(guó)際上相繼發(fā)展了一些雷達(dá)仿真系統(tǒng)[1-2],而國(guó)內(nèi)相控陣?yán)走_(dá)系統(tǒng)和脈沖壓縮雷達(dá)系統(tǒng)仿真軟件的研究已經(jīng)成為一個(gè)熱點(diǎn)[3-5]。對(duì)于一個(gè)復(fù)雜的雷達(dá)系統(tǒng),系統(tǒng)建模與仿真技術(shù)是雷達(dá)系統(tǒng)設(shè)計(jì)和研究的一個(gè)重要方向和發(fā)展趨勢(shì)[6]。這些仿真軟件系統(tǒng)主要是為工程設(shè)計(jì)人員服務(wù)的,具有較高的實(shí)用參考價(jià)值。基于此,本文參考了上述雷達(dá)系統(tǒng)的仿真思想,利用Matlab圖形用戶界面開發(fā)出一套供學(xué)生自學(xué)、教師教學(xué)的雷達(dá)系統(tǒng)分析輔助教學(xué)軟件包。該軟件包主要立足于教學(xué)自學(xué)輔助軟件,供學(xué)習(xí)者高效理解和掌握雷達(dá)系統(tǒng)分析的相關(guān)知識(shí)。
在各種教學(xué)實(shí)驗(yàn)軟件中,往往只限于Matlab的編程實(shí)現(xiàn),而在貼近學(xué)習(xí)者需求和多媒體學(xué)習(xí)中尚有不足之處[7-8]。Matlab具有非常強(qiáng)大的數(shù)值計(jì)算、數(shù)據(jù)分析處理等功能,然而Matlab 程序是一種解釋執(zhí)行程序,不用編譯等預(yù)處理,導(dǎo)致程序運(yùn)行速度較慢。VC具有很高的編碼效率, 可對(duì)操作系統(tǒng)和應(yīng)用程序以及硬件進(jìn)行直接操作[9-10]。因此,該軟件包利用Matlab和VC混合編程,提高了代碼的運(yùn)行效率,發(fā)揮了兩種語(yǔ)言的長(zhǎng)處。運(yùn)行結(jié)果表明,該軟件包具有良好的人機(jī)交互功能、較高的軟件運(yùn)行速率和豐富的多媒體學(xué)習(xí)方式。
1 利用VC和Matlab混合編程實(shí)現(xiàn)MEX文件
在Matlab和VC混合編程中,它們可分為在Matlab中調(diào)用VC程序和在VC中調(diào)用Matlab兩個(gè)方面。前者旨在彌補(bǔ)Matlab程序所不能實(shí)現(xiàn)的軟件功能或者解決Matlab運(yùn)行速度過慢的缺陷;后者一般是為了在VC環(huán)境下調(diào)用Matlab程序,充分利用Matlab在矩陣計(jì)算、數(shù)據(jù)分析方面的強(qiáng)大優(yōu)勢(shì)。
在Matlab 與VC混合編程之前,首先要對(duì)Matlab的編譯應(yīng)用程序mex 和編譯器mbuild 進(jìn)行正確的設(shè)置。對(duì)MEX編譯器進(jìn)行設(shè)置并生成配置文件即一個(gè)后綴為bat的批處理文件,它是通過在Matlab命令窗口輸入命令:mex-setup,然后按照輸出信息提示選擇編譯器和路徑實(shí)現(xiàn)的。Matlab調(diào)用VC的方式主要有兩種:利用MEX技術(shù)和VC動(dòng)態(tài)鏈接庫(kù)。本文通過調(diào)用VC動(dòng)態(tài)鏈接庫(kù)來編寫mexrun文件。實(shí)際上,在Matlab環(huán)境中就可以方便地編輯MEX文件,但對(duì)于大型的MEX程序,可能會(huì)比較復(fù)雜,容易出錯(cuò),這時(shí)就可以利用Visual C++強(qiáng)大的調(diào)試功能。圖1給出在VC環(huán)境中建立MEX文件的過程。
圖1 VC中建立MEX文件過程
Matlab提供了對(duì)動(dòng)態(tài)鏈接庫(kù)DLL文件的接口,且其接口支持VC編寫的DLL文件,因此在對(duì)m文件進(jìn)行編譯后會(huì)產(chǎn)生一個(gè)與mexrun.cpp同名的mexrun.dll?jiǎng)討B(tài)鏈接庫(kù)文件。這樣在Matlab的m文件中就可以直接回調(diào)mexrun()函數(shù)。通過VC來編寫mexrun文件是因?yàn)樾枰贛atlab中直接運(yùn)行諸如MP3,MP4,CHM和TXT等格式的文件,而用Matlab本身來實(shí)現(xiàn)這一過程的執(zhí)行效率較低,代碼具有重復(fù)性,對(duì)每種格式還需要區(qū)別對(duì)待。因而,考慮到VC語(yǔ)言和操作系統(tǒng)及硬件之間的直接聯(lián)系,通過VC來編寫程序并提供給Matlab調(diào)用,無疑會(huì)提高運(yùn)行效率。
在mexrun.cpp文件中需要包含如下頭文件:
#include
#include
#include
#include \"mex.h\"http://適用于混合編程的MEX頭文件
C語(yǔ)言的MEX文件源程序主要由兩個(gè)部分組成:第一部分是算法程序,用于完成實(shí)際工作;另一部分是入口子程序,它是算法程序與Matlab的接口。入口子程序?qū)崿F(xiàn)接口功能是通過在輸入指針數(shù)組中獲得算法程序所需的數(shù)據(jù),同時(shí)也能把計(jì)算結(jié)果返回到輸出指針數(shù)組。在這里mexFunction有著輸入/輸出與變量轉(zhuǎn)換的作用[11]。參照本文編寫的mexrun.cpp文件,需要注意以下幾點(diǎn):
(1) void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray*prhs[])。函數(shù)頭中nlhs 是Matlab 命令行方式下輸出參數(shù)的個(gè)數(shù);*plhs[]是一個(gè)mxArray結(jié)構(gòu)體類型指向所有輸出參數(shù)的指針數(shù)組;*prhs[]也是是一個(gè)mxArray結(jié)構(gòu)體類型指向所有輸入?yún)?shù)的指針數(shù)組;nrhs是輸入?yún)?shù)的個(gè)數(shù)。
(2) 還需定義以下幾個(gè)變量:char *inputarg1,*inputarg2;int len1,len2,status1,status2。其中:*inputarg1,*inputarg2是兩個(gè)字符指針;len1,len2表示分配空間長(zhǎng)度;status1,status2是兩個(gè)數(shù)據(jù)空間變量。
(3) 輸入的必須是單行字符串,行矢量,如下:
if(mxIsChar(prhs[1])!=1)/* 檢查輸入?yún)?shù)的類型 */
mexErrMsgTxt(\"Input must be string.\");/* 輸入的必須是單行字符串*/
if(mxGetM(prhs[1])!=1)
mexErrMsgTxt(\"Input must be a row vector.\");/* 輸入的必須是行矢量*/
(4) 把輸入的字符串拷貝到C字符串里面,如下所示:
status1=mxGetString(prhs[0],inputarg1,len1);
status2=0;
if(nrhs==2)
status2=mxGetString(prhs[1],inputarg2,len2);
if (status1‖status2)
mexWarnMsgTxt(\"Not enough space.String is truncated.\");
if(nrhs==1)
MyShell(inputarg1,\"nowait\");
else
MyShell(inputarg1,inputarg2);
按照上述流程設(shè)置好編譯環(huán)境和源程序后就可以編譯此工程,編譯成功后,在debug文件夾中會(huì)生成mexrun.dll鏈接庫(kù)文件。實(shí)驗(yàn)結(jié)果表明,只要把mexrun.dll鏈接庫(kù)文件放在Matlab的當(dāng)前工作區(qū)中,就可以在GUI設(shè)計(jì)中的m文件編寫中直接調(diào)用。
2 系統(tǒng)模塊的設(shè)計(jì)與實(shí)現(xiàn)
雷達(dá)系統(tǒng)軟件包的總體結(jié)構(gòu)采用分離式的多模塊結(jié)構(gòu),即各功能模塊彼此相互獨(dú)立,分別完成一定的功能。從方便用戶的角度出發(fā),設(shè)計(jì)的雷達(dá)系統(tǒng)軟件包采用多層次的分級(jí)菜單驅(qū)動(dòng)形式,先由主菜單選擇進(jìn)入各功能模塊的子菜單,在每一個(gè)功能模塊的菜單下,可以選擇參數(shù)設(shè)置、程序運(yùn)行、獲取幫助和返回上級(jí)菜單等操作。
2.1 系統(tǒng)實(shí)現(xiàn)方法
圖形用戶界面(graphical user interfaces,GUI)是用戶與計(jì)算機(jī)進(jìn)行信息交流的方式。計(jì)算機(jī)在屏幕顯示圖形和文本,用戶通過輸入設(shè)備如鍵盤、鼠標(biāo)等與計(jì)算機(jī)通信。GUI中包含各種控件,通過對(duì)控件設(shè)置一些事件響應(yīng)函數(shù),這些函數(shù)可以在控件創(chuàng)建或刪除等事件發(fā)生時(shí)執(zhí)行,從而實(shí)現(xiàn)特定事件觸發(fā)下需要的某些功能。這些事件響應(yīng)函數(shù)即是句柄圖形對(duì)象的回調(diào)函數(shù)。
本文使用GUIDE界面來對(duì)各種控件進(jìn)行布局,并利用屬性編輯器對(duì)每個(gè)控件進(jìn)行設(shè)置。軟件包的實(shí)驗(yàn)界面主要有登陸界面、主界面和各部分子界面。下面以登陸界面為例,說明圖形用戶界面的設(shè)計(jì)過程。
2.2 登陸界面設(shè)置
圖2表示GUIDE界面下對(duì)登錄界面進(jìn)行設(shè)置,其中包含了按鈕、靜態(tài)文本框、編輯框和坐標(biāo)軸。在對(duì)每種控件的屬性編輯器進(jìn)行編輯時(shí),Matlab對(duì)于每個(gè)控件都會(huì)在其相應(yīng)的m文件中初始化出一個(gè)回調(diào)函數(shù)。
圖2 登陸界面
首先,可以通過調(diào)用混合編程實(shí)現(xiàn)的mexrun.dll庫(kù)文件打開help文檔、MP3文件和MP4文件。以video按鈕為例,打開它的屬性編輯器可以看到其對(duì)應(yīng)的Tag屬性pushbutton1,在其回調(diào)函數(shù)中加入如下代碼。video按鈕打開后是關(guān)于軟件包使用說明的一段簡(jiǎn)單視頻。
function pushbutton1Callback(hObject,eventdata,handles)
mexrun(′introduction.MP4′);
其次,編寫坐標(biāo)軸控件的屬性和構(gòu)造函數(shù),這里的坐標(biāo)軸函數(shù)是用來顯示一張JPEG格式的靜態(tài)圖片。Matlab提供imread()函數(shù)和imshow()函數(shù)來讀取和存放靜態(tài)圖片,函數(shù)中的X是一個(gè)矩陣。
function axes1CreateFcn(hObject,eventdata,handles)
X=imread(′radar.jpg′);
imshow(X);
最后,關(guān)于登陸界面的密碼設(shè)置,需要對(duì)OpeningFcn函數(shù)進(jìn)行初始化設(shè)置,也即是軟件包默認(rèn)的用戶賬號(hào)和密碼。這里需要使用函數(shù)set()來設(shè)置編輯框中輸入的字符串即用戶賬號(hào)和密碼,并對(duì)該賬戶和密碼進(jìn)行初始化賦值。
handles.output=hObject;
set(handles.kehucode,′String′,″);
set(handles.kehuuser,′String′,″);
handles.xinghao=″;
handles.user=′Dorothy′;%預(yù)先設(shè)定的登錄賬號(hào)
handles.code=′19901125′;%預(yù)先設(shè)定的登錄密碼
guidata(hObject,handles);%保存對(duì)handles和hObject的操作
3 仿真結(jié)果
雷達(dá)系統(tǒng)分析包含各個(gè)部分仿真結(jié)果分析,這里選擇雷達(dá)天線中典型的線性天線陣列仿真結(jié)果進(jìn)行分析。仿真界面實(shí)例如圖3所示,這里選擇的實(shí)例是線性天線陣列的增益方向圖。其中,陣列中的單元數(shù)為19,可以看到當(dāng)單元間距為1.5個(gè)波長(zhǎng)、掃描角度為-38°、使用Hamming窗進(jìn)行幅度加權(quán)、并用23量化電平時(shí),相應(yīng)地在-38°處有主瓣產(chǎn)生,并且第一副瓣的電平約為-13.4 dB。若在面板中選擇不同的設(shè)置值,則可以得到在不同的陣列天線(即陣列中的單元數(shù)不同或單元間距不同)、不同的掃描角度、不同的加窗函數(shù)、不同量化電平時(shí)的增益方向圖。
圖3 線性天線陣列的方向圖
通過該系統(tǒng)進(jìn)行模擬仿真,并將仿真結(jié)果進(jìn)行對(duì)比,可以清晰地了解天線在各個(gè)轉(zhuǎn)向角處的增益方向是如何隨天線陣列的單元間距、掃描角度、加窗函數(shù)、量化電平這些參量的變化而變化的,從而形成對(duì)線性陣列天線增益方向圖的直觀感受。
4 結(jié) 語(yǔ)
雷達(dá)系統(tǒng)分析課程理論性強(qiáng),抽象難懂,如何幫助學(xué)習(xí)者理解課程中的基本概念、基本分析方法等是該課程教學(xué)中所要解決的關(guān)鍵問題。考慮到Matlab的圖形用戶界面非常形象,本文采用VC和Matlab混合編程充分發(fā)揚(yáng)了兩種語(yǔ)言的優(yōu)勢(shì),開發(fā)實(shí)現(xiàn)了該課程教學(xué)實(shí)驗(yàn)GUI軟件包。實(shí)驗(yàn)表明,該雷達(dá)系統(tǒng)仿真軟件包界面友好,參數(shù)設(shè)置靈活,并且在仿真的過程中能隨時(shí)看到雷達(dá)信號(hào)發(fā)射、接收和信號(hào)處理等各方面的文字或圖形描述。
參考文獻(xiàn)
[1]SEVGI L, SANAL A S. Surface wave HF radar simulator[C]//Radar Conference. Edinburgh: SPEC, 1997: 181-184.
[2]PALMER J, HOMER J, MARTORELLA M, et al. Target height estimation in an emulated bistatic radar via interferometric processing[C]//2005 1st IEEE International Workshop on Computational Advances in Multi-sensor Adaptive Processing.[S.l.]: IEEE, 2005: 20-23.
[3]楊立柱,郭英,齊立峰.脈沖壓縮雷達(dá)系統(tǒng)分析與仿真研究[J].現(xiàn)代防御技術(shù),2007,35(3):90-94.
[4]李欽富,許小劍.相控陣?yán)走_(dá)系統(tǒng)仿真模型研究[J].中國(guó)電子科學(xué)研究院學(xué)報(bào),2007(2):239-243.
[5]康蓬,趙正予,倪彬彬.人工擾動(dòng)電離層仿真系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].武漢大學(xué)學(xué)報(bào):理學(xué)版,2006,52(1):119-123.
[6]董英凝,張寧.高頻地波雷達(dá)系統(tǒng)性能仿真軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代雷達(dá),2009,31(10):30-34.
[7]李強(qiáng),明艷,陳前斌,等.基于Matlab的數(shù)字信號(hào)處理實(shí)驗(yàn)仿真系統(tǒng)的實(shí)現(xiàn)[J].實(shí)驗(yàn)技術(shù)與管理,2006,23(5):81-83.
[8]沈捷,王莉.數(shù)字信號(hào)處理教學(xué)實(shí)驗(yàn)軟件包的GUI設(shè)計(jì)與實(shí)現(xiàn)[J].實(shí)驗(yàn)技術(shù)與管理,2008,25(2):88-91.
[9]戢小亮.基于Matlab和VC混合編程的數(shù)字信號(hào)處理的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2007,30(15):107-108.
[10]潘大夫,汪渤,周志強(qiáng).Matlab與C/C++混合編程技術(shù)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(2):465-468.