999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Matlab和C混合編程的火炮精度數據處理軟件實現

2014-11-07 11:07:31胡春曉石巖
現代電子技術 2014年21期

胡春曉+石巖

摘 要: 為解決某火炮動態精度試驗數據處理任務急需,綜合Matlab和C兩種編程語言的優勢,采用MEX文件實現Matlab和C混合編程的方法,通過在Matlab中調用解彈道積分和目標解相遇兩個C程序模塊,高效方便地完成了火炮動態精度試驗數據處理軟件的開發。測試和應用結果表明該方法可以顯著提高編程效率、程序代碼復用率和程序執行效率,具有很強的應用參考價值。

關鍵詞: 火炮; 動態精度試驗; 數據處理軟件; Matlab; C編程語言; 混合編程

中圖分類號: TN919.5?34 文獻標識碼: A 文章編號: 1004?373X(2014)21?0035?03

Implementation of gun accuracy data processing software

based on mixed programming of Matlab and C

HU Chun?xiao, SHI Yan

(94 Detachment, Unit 92941 of PLA, Huludao 125000, China)

Abstract: In order to fulfill the urgent task of gun dynamic accuracy test data processing, the mixed programming method was realized with MEX file by compositing the advantages of the Matlab and C programming language. The development of the gun dynamic accuracy test data processing software was achieved efficiently and easily by calling two C program modules for solution trajectory integral and meeting solution. The testing and application results show that this method can improve the efficiency of programming, program code reuse rate and the execution efficiency, and it has a strong reference value for application.

Keywords: gun; dynamic accuracy test; data processing software; Matlab; C programming language; mixed programming

0 引 言

動態精度是火炮武器系統設計定型階段的一項重要考核指標,一般由靶場根據武器對典型目標的校飛試驗數據解算得出[1],其結果情況往往是決定后續射擊精度等試驗能否順利開展的重要參照。而隨著靶場試驗通信指揮和綜合測控裝備信息化程度的不斷提高,武器裝備試驗呈現出任務急、節奏快、周期短、要求嚴等發展趨勢[2],因此能否根據不同試驗任務需求,選擇合適的編程語言和方法,快速高效地完成數據處理軟件的編制和測試工作顯得尤為重要。

Matlab是一款優秀的科技應用數學軟件,具有強大的矩陣運算、數值計算、圖形顯示和數據分析處理功能,另外它包含了眾多專業領域的分析函數庫和工具包,在很多實際編程應用中具有簡單實用、方便高效的優勢,但由于Matlab是一種解釋性腳本語言,在執行大規模重復性循環迭代運算時存在效率低下的不足[3]。而C作為目前應用最廣泛的編譯性語言,具有執行效率高的特點,特別是在進行多層嵌套循環運算時其優勢更加明顯。但由于C語言缺乏豐富的數學函數庫和各工程領域應用工具箱等,讀取數據、顯示圖形等也不方便,這使得其在科學計算及工程應用領域的開發比較復雜,代價較高[4]。采用Matlab和C混合編程方法,通過Matlab的GUIDE開發設計軟件用戶界面,利用Matlab中豐富的數據處理函數和圖形顯示庫完成精度數據的處理分析,而對計算效率要求較高的彈道積分、解命中迭代等解算模塊則通過C語言編制MEX接口函數交由Matlab調用實現。這樣可以綜合兩種編程語言的優點,大大提高編程和程序運行效率,方便高效地編制出實用的數據處理軟件。

1 Matlab和C混合編程方法概述

Matlab和C混合編程主要解決兩種語言程序互相調用的問題。常見的方法主要有以下幾種[5]:

(1) Matlab引擎。采用客戶機和服務器計算方式,C程序作為前端客戶機,通過調用Matlab引擎,與后臺Matlab服務器連接,實現動態通信。

(2) MCC編譯器,是Matlab自帶的編譯器,作用是將M文件轉化成C代碼,再將代碼用C編譯器編譯鏈接成可供C調用的動態鏈接庫或獨立的應用程序。

(3) Matlab數學函數LIB庫。Matlab提供了可供C語言調用的數學函數庫和庫函數的接口函數,有助于在C程序中快速實現Matlab已有的算法調用。

(4) MEX文件。MEX文件是用C語言按照一定格式編寫后,用C編譯器編譯成的動態鏈接庫。Matlab直接把MEX文件視為它的內建函數進行調用并執行。

2 基于MEX接口函數實現解彈道積分模塊

解彈道微分方程組是火炮動態精度數據處理軟件解理論諸元中最重要的一環,一般通過龍格?庫塔數值積分法解算,由于計算量較大,直接采用Matlab編寫的程序運行速度非常慢,通過把耗時長的函數用C語言實現并編譯成MEX函數,可以不必在每次運行循環中的語句時都對它們進行解釋,從而加快執行速度[6],而且每型火炮在設計定型階段都有經過充分驗證的解彈道積分C程序模塊,可以直接調用,減少重復性工作。本文通過編寫MEX接口函數實現在Matlab程序中對已有解彈道積分C程序模塊的調用,實現步驟如下:

2.1 編譯器的安裝與配置

由于Matlab默認不帶C語言編譯器,要編譯MEX函數,用戶計算機上應該事先安裝適配的ANSI C編譯器,下面是安裝與配置Matlab編譯器應用程序MEX的設置的步驟[7]:

(1) 在Matlab 命令窗口中運行mex?setup,出現下列提示:

Please choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers [y]/n?

(2) 選擇y,Matlab將自動搜索計算機上已安裝的外部編譯器的類型、版本及所在路徑,并列出來讓用戶選擇:

Select a compiler:

[1] Borland C++Builder version 6.0 in C:\Program Files\Borland

[2] Lcc C version 2.4 in D:\Matlab7.1\sys\lcc

[3] Microsoft Visual C version 6.0 in C:\Program Files\Microsoft Visual Studio

[0] None

Compiler:

(3) 選擇其中一種(這里選擇2)進行確認:

Please verify your choices:

Compiler: Microsoft Visual C version 6.0

Location: C:\Program Files\Microsoft Visual Studio

Are these correct?([y]/n):

(4) 選擇y,結束Matlab 編譯器的配置。

2.2 編寫彈道積分模塊MEX接口文件

MEX接口文件是由原C代碼加上MEX接口函數組成,它實現了一種接口,把在Matlab中調用函數時輸入的自變量通過特定的接口調入了C函數,得出的結果再通過該接口調回Matlab[8]。按照Matlab的MEX接口規范[9],在原解彈道積分C程序模塊的基礎上編寫MEX接口文件BallIntegral.c如下:

#include "mex.h"

#include "ball_integral.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

{

double

*Bullet; /* 彈種: 0?榴彈, 1? 穿甲彈 */

*Gam, /* 方位角(rad) */

*Phi, /* 射角(rad) */

*dfTf, /* 彈丸飛行時間(s) */

*dfW, /* 風速(m/s) */

*dfBw, /* 風向(rad) */

*dfKv0, /* 初速修正量(%) */

*dfKtz, /* 藥溫修正量("C)*/

*dfT0, /* 地面溫度("C) */

*dfP0, /* 地面氣壓(百帕) */

*dfH0; /* 地面相對濕度(%) */

double *dfX,*dfY,*dfZ; /* 地面坐標系彈道點坐標位置 */

Bullet=mxGetPr(prhs[0]);

Gam=mxGetPr(prhs[1]);

Phi=mxGetPr(prhs[2]);

dfTf=mxGetPr(prhs[3]);

dfW=mxGetPr(prhs[4]);

dfBw=mxGetPr(prhs[5]);

dfKv0=mxGetPr(prhs[6]);

dfKtz=mxGetPr(prhs[7]);

dfT0=mxGetPr(prhs[8]);

dfP0=mxGetPr(prhs[9]);

dfH0=mxGetPr(prhs[10]);

plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL);

plhs[1]=mxCreateDoubleMatrix(1,1,mxREAL);

plhs[2]=mxCreateDoubleMatrix(1,1,mxREAL);

dfX=mxGetPr(plhs[0]);

dfY=mxGetPr(plhs[1]);

dfZ=mxGetPr(plhs[2]);

BallIntegral(&dfX,&dfY,&dfZ,*Bullet,*Gam,*Phi,*dfTf,*dfW,*dfBw,*dfKv0,*dfKtz,*dfT0,*dfP0,*dfH0);

/*解彈道積分模塊 */

}

以上代碼中mex.h為使用MEX文件必須包含的頭文件;

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])為Matlab的MEX接口函數,負責完成C語言函數與Matlab之間的參數傳遞,其中nlhs為輸出參數數目,plhs為指向輸出參數的指針,nrhs為輸入參數數目,prhs為指向輸入參數的指針。

BallIntegral()為原解彈道積分程序模塊,包含在ball_integral.h頭文件中。

2.3 編譯MEX接口文件

將C文件mex BallIntegral.c,ball_integral.h放入Matlab工作空間,在命令窗口輸入命令:mex BallIntegral.c,即可完成MEX文件的編譯,生成可被Matlab直接調用的文件BallIntegral.mexw32。

3 火炮精度數據處理軟件實現與應用

根據某火炮系統精度數據處理任務需求,應用Matlab圖形用戶界面開發環境GUIDE提供的界面設計工具集設計火炮動態精度數據處理軟件界面如圖1所示,界面中包含真值和錄取數據讀取、跟蹤雷達精度處理、火炮系統精度處理三個板塊,跟蹤雷達和火炮系統精度處理板塊中又分別包含基線參數和彈道氣象參數輸入區、精度結果統計顯示區和處理、查看、統計、保存操作按鈕區三部分。

圖1 火炮動態精度數據處理軟件界面

分別用常用的Matlab庫函數編寫好各按鈕、文本框和選擇框的回調函數,完成數據文件讀入、坐標變換、基線修正、插值、精度統計、繪圖等函數,并在求解火炮理論諸元時調用之前編譯好的解彈道積分和解相遇MEX函數模塊,最終完成精度數據處理軟件,應用此數據處理軟件繪制的某航次的動態精度試驗結果曲線如圖2所示。

利用完成的精度數據處理軟件對歷次火炮武器系統靶場動態精度試驗數據進行處理,得到的結果與以前試驗數據處理結果相一致,而且在解理論諸元時軟件執行效率明顯提高。

圖2 火炮動態精度結果曲線

4 結 語

MEX文件提供了Matlab調用C語言程序的接口,使得Matlab調用C函數和調用Matlab的內置函數一樣方便,當已經有用C編寫的大型程序時,大可不必在Matlab中重寫,只需寫個MEX接口函數做成MEX文件,另外,針對Matlab程序中的部份計算瓶頸(如循環、迭代等),通過MEX文件用C語言實現,可以大大提高運行效率。本文把用MEX文件實現Matlab和C語言混合編程的方法應用到某火炮動態精度試驗數據處理軟件中,將已有的解彈道積分程序模塊(C程序)和要做迭代處理的解相遇模塊通過C語言編寫MEX文件實現,不僅提高了編程效率,而且提高了代碼的復用率和執行速度,取得了非常好的應用效果。

參考文獻

[1] 黃守訓,楊榜林,田穎,等.艦炮武器系統試驗與鑒定[M].北京:國防工業出版社,2005.

[2] 楊榜林,岳全發.軍事裝備試驗學[M].北京:國防工業出版社,2002.

[3] 陳杰.Matlab寶典[M].北京:電子工業出版社,2007.

[4] 譚浩強.C程序設計[M].北京:清華大學出版社,1999.

[5] 穆以東,趙嶺.VC++與Matlab混合編程方法研究[J].測控技術,2013,32(9):111?116.

[6] 李天昀,葛臨東.綜述Matlab與VC++的交互編程[J].計算機仿真,2004,21(9):193?196.

[7] 楊高波,亓波.精通Matlab 7.0混合編程[M].北京:電子工業出版社,2006.

[8] 袁寶吉,周寶林,吳猛猛.基于Matlab接口編程的天體視位置解算[J].四川兵工學報,2011,32(12):65?67.

[9] 劉維.精通Matlab與C/C++混合程序設計[M].北京:北京航空航天大學出版社,2008.

BallIntegral()為原解彈道積分程序模塊,包含在ball_integral.h頭文件中。

2.3 編譯MEX接口文件

將C文件mex BallIntegral.c,ball_integral.h放入Matlab工作空間,在命令窗口輸入命令:mex BallIntegral.c,即可完成MEX文件的編譯,生成可被Matlab直接調用的文件BallIntegral.mexw32。

3 火炮精度數據處理軟件實現與應用

根據某火炮系統精度數據處理任務需求,應用Matlab圖形用戶界面開發環境GUIDE提供的界面設計工具集設計火炮動態精度數據處理軟件界面如圖1所示,界面中包含真值和錄取數據讀取、跟蹤雷達精度處理、火炮系統精度處理三個板塊,跟蹤雷達和火炮系統精度處理板塊中又分別包含基線參數和彈道氣象參數輸入區、精度結果統計顯示區和處理、查看、統計、保存操作按鈕區三部分。

圖1 火炮動態精度數據處理軟件界面

分別用常用的Matlab庫函數編寫好各按鈕、文本框和選擇框的回調函數,完成數據文件讀入、坐標變換、基線修正、插值、精度統計、繪圖等函數,并在求解火炮理論諸元時調用之前編譯好的解彈道積分和解相遇MEX函數模塊,最終完成精度數據處理軟件,應用此數據處理軟件繪制的某航次的動態精度試驗結果曲線如圖2所示。

利用完成的精度數據處理軟件對歷次火炮武器系統靶場動態精度試驗數據進行處理,得到的結果與以前試驗數據處理結果相一致,而且在解理論諸元時軟件執行效率明顯提高。

圖2 火炮動態精度結果曲線

4 結 語

MEX文件提供了Matlab調用C語言程序的接口,使得Matlab調用C函數和調用Matlab的內置函數一樣方便,當已經有用C編寫的大型程序時,大可不必在Matlab中重寫,只需寫個MEX接口函數做成MEX文件,另外,針對Matlab程序中的部份計算瓶頸(如循環、迭代等),通過MEX文件用C語言實現,可以大大提高運行效率。本文把用MEX文件實現Matlab和C語言混合編程的方法應用到某火炮動態精度試驗數據處理軟件中,將已有的解彈道積分程序模塊(C程序)和要做迭代處理的解相遇模塊通過C語言編寫MEX文件實現,不僅提高了編程效率,而且提高了代碼的復用率和執行速度,取得了非常好的應用效果。

參考文獻

[1] 黃守訓,楊榜林,田穎,等.艦炮武器系統試驗與鑒定[M].北京:國防工業出版社,2005.

[2] 楊榜林,岳全發.軍事裝備試驗學[M].北京:國防工業出版社,2002.

[3] 陳杰.Matlab寶典[M].北京:電子工業出版社,2007.

[4] 譚浩強.C程序設計[M].北京:清華大學出版社,1999.

[5] 穆以東,趙嶺.VC++與Matlab混合編程方法研究[J].測控技術,2013,32(9):111?116.

[6] 李天昀,葛臨東.綜述Matlab與VC++的交互編程[J].計算機仿真,2004,21(9):193?196.

[7] 楊高波,亓波.精通Matlab 7.0混合編程[M].北京:電子工業出版社,2006.

[8] 袁寶吉,周寶林,吳猛猛.基于Matlab接口編程的天體視位置解算[J].四川兵工學報,2011,32(12):65?67.

[9] 劉維.精通Matlab與C/C++混合程序設計[M].北京:北京航空航天大學出版社,2008.

BallIntegral()為原解彈道積分程序模塊,包含在ball_integral.h頭文件中。

2.3 編譯MEX接口文件

將C文件mex BallIntegral.c,ball_integral.h放入Matlab工作空間,在命令窗口輸入命令:mex BallIntegral.c,即可完成MEX文件的編譯,生成可被Matlab直接調用的文件BallIntegral.mexw32。

3 火炮精度數據處理軟件實現與應用

根據某火炮系統精度數據處理任務需求,應用Matlab圖形用戶界面開發環境GUIDE提供的界面設計工具集設計火炮動態精度數據處理軟件界面如圖1所示,界面中包含真值和錄取數據讀取、跟蹤雷達精度處理、火炮系統精度處理三個板塊,跟蹤雷達和火炮系統精度處理板塊中又分別包含基線參數和彈道氣象參數輸入區、精度結果統計顯示區和處理、查看、統計、保存操作按鈕區三部分。

圖1 火炮動態精度數據處理軟件界面

分別用常用的Matlab庫函數編寫好各按鈕、文本框和選擇框的回調函數,完成數據文件讀入、坐標變換、基線修正、插值、精度統計、繪圖等函數,并在求解火炮理論諸元時調用之前編譯好的解彈道積分和解相遇MEX函數模塊,最終完成精度數據處理軟件,應用此數據處理軟件繪制的某航次的動態精度試驗結果曲線如圖2所示。

利用完成的精度數據處理軟件對歷次火炮武器系統靶場動態精度試驗數據進行處理,得到的結果與以前試驗數據處理結果相一致,而且在解理論諸元時軟件執行效率明顯提高。

圖2 火炮動態精度結果曲線

4 結 語

MEX文件提供了Matlab調用C語言程序的接口,使得Matlab調用C函數和調用Matlab的內置函數一樣方便,當已經有用C編寫的大型程序時,大可不必在Matlab中重寫,只需寫個MEX接口函數做成MEX文件,另外,針對Matlab程序中的部份計算瓶頸(如循環、迭代等),通過MEX文件用C語言實現,可以大大提高運行效率。本文把用MEX文件實現Matlab和C語言混合編程的方法應用到某火炮動態精度試驗數據處理軟件中,將已有的解彈道積分程序模塊(C程序)和要做迭代處理的解相遇模塊通過C語言編寫MEX文件實現,不僅提高了編程效率,而且提高了代碼的復用率和執行速度,取得了非常好的應用效果。

參考文獻

[1] 黃守訓,楊榜林,田穎,等.艦炮武器系統試驗與鑒定[M].北京:國防工業出版社,2005.

[2] 楊榜林,岳全發.軍事裝備試驗學[M].北京:國防工業出版社,2002.

[3] 陳杰.Matlab寶典[M].北京:電子工業出版社,2007.

[4] 譚浩強.C程序設計[M].北京:清華大學出版社,1999.

[5] 穆以東,趙嶺.VC++與Matlab混合編程方法研究[J].測控技術,2013,32(9):111?116.

[6] 李天昀,葛臨東.綜述Matlab與VC++的交互編程[J].計算機仿真,2004,21(9):193?196.

[7] 楊高波,亓波.精通Matlab 7.0混合編程[M].北京:電子工業出版社,2006.

[8] 袁寶吉,周寶林,吳猛猛.基于Matlab接口編程的天體視位置解算[J].四川兵工學報,2011,32(12):65?67.

[9] 劉維.精通Matlab與C/C++混合程序設計[M].北京:北京航空航天大學出版社,2008.

主站蜘蛛池模板: 一级毛片在线免费视频| 亚洲中文字幕97久久精品少妇| 亚洲成人www| 亚洲成人一区二区三区| 国产成人三级| 色婷婷狠狠干| 国产精品999在线| 无码福利日韩神码福利片| 无码电影在线观看| 国产91精选在线观看| 伊人久久久久久久久久| 在线免费观看a视频| 亚洲美女久久| 456亚洲人成高清在线| 国产亚洲精品资源在线26u| 伊人久久婷婷| www成人国产在线观看网站| 久久综合九色综合97婷婷| 亚洲大学生视频在线播放| 97久久超碰极品视觉盛宴| 国产精品无码作爱| 国产黄在线观看| 日韩色图在线观看| 热99re99首页精品亚洲五月天| 亚洲不卡影院| 91极品美女高潮叫床在线观看| 亚洲国产精品不卡在线| 亚洲国产成人无码AV在线影院L| 久无码久无码av无码| 亚洲一区无码在线| 国产精品男人的天堂| 在线五月婷婷| 国产午夜人做人免费视频中文| 天天躁夜夜躁狠狠躁图片| 国产精品hd在线播放| 一区二区三区在线不卡免费| 91精品综合| P尤物久久99国产综合精品| 免费在线a视频| 免费看美女自慰的网站| 在线观看亚洲精品福利片| 久久综合伊人77777| 日韩经典精品无码一区二区| 亚洲午夜18| 亚洲国产在一区二区三区| 亚洲国产天堂久久综合226114| 激情综合网激情综合| 亚洲妓女综合网995久久| 国产精品性| 孕妇高潮太爽了在线观看免费| 欧美成人看片一区二区三区 | 在线a视频免费观看| 欧美在线一二区| 国产亚洲欧美日本一二三本道| 青青操视频在线| 91精品人妻一区二区| 久久综合色播五月男人的天堂| 亚洲av无码成人专区| 国产视频 第一页| 国产精品香蕉在线| 午夜国产不卡在线观看视频| 美女扒开下面流白浆在线试听 | 99热最新网址| yjizz视频最新网站在线| 国产日韩丝袜一二三区| 国产成人凹凸视频在线| 麻豆国产精品一二三在线观看| 色综合天天娱乐综合网| 成人年鲁鲁在线观看视频| 国产成人永久免费视频| 美女裸体18禁网站| 久久精品国产亚洲AV忘忧草18| 丁香六月综合网| 国产va免费精品| 婷婷六月激情综合一区| 日韩精品高清自在线| 91视频青青草| 国产视频久久久久| 成人在线不卡| 就去色综合| jizz在线观看| 亚洲男人的天堂久久精品|