国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

MATLAB與C混合編程技術(shù)在A/D性能測試中的應(yīng)用

2015-01-01 03:18:54王益民
現(xiàn)代雷達 2015年6期
關(guān)鍵詞:驅(qū)動程序子程序調(diào)用

王益民

(南京電子技術(shù)研究所, 南京210039)

0 引言

MATLAB是一套高級的數(shù)學(xué)分析和計算軟件,具有科學(xué)計算與可視化功能、簡單易用的開放可擴展環(huán)境,以及多達30多個面向不同領(lǐng)域而擴展的工具箱支持,集計算機輔助設(shè)計、分析與仿真一體,功能強大和靈活,編程效率高,在需要快速驗證算法時,相比常見的通用編程平臺(如:Visual C++等)有很大優(yōu)勢。但MATLAB也存在以下4點不足:

1)程序執(zhí)行逐行解釋,在實時仿真中影響速度;

2)無規(guī)范完整的圖形用戶界面標(biāo)準(zhǔn);

3)不能直接訪問底層硬件;

4)用戶界面單調(diào)。

上述不足限制了它不能作為通用的軟件開發(fā)平臺,這給工程計算與應(yīng)用帶來很大的不便[1-3]。

而常見的通用編程平臺(如:Visual C++等),功能靈活,與硬件接口能力突出,但面對信號分析領(lǐng)域先進的理論和方法,如:時頻分析、小波變換、遺傳算法等,編程效率低。因此,實現(xiàn)MATLAB與Visual C++的混合編程,使其有機結(jié)合,優(yōu)勢互補,具有很強的應(yīng)用價值[4]。

MATLAB本身提供了多種外部接口,如:使用MATLAB自帶的MATLAB Compiler、利用MATLAB引擎、利用Active控件、利用MAT文件、C-MEX等,通過這些外部接口,實現(xiàn)MATLAB與其他編程環(huán)境的混合編程,可以擴充MATLAB的強大的數(shù)值計算和圖形顯示功能,而避開其缺點[1]。

在一種雷達接收機A/D性能測試設(shè)備的研制中,針對MATLAB與硬件設(shè)備的接口能力較差,不能直接訪問底層硬件設(shè)備的缺點,我們采用MATLAB外部接口混合編程技術(shù),利用C語言編寫自定義的MEX函數(shù),在MATLAB環(huán)境中實現(xiàn)了對計算機設(shè)備的讀寫驅(qū)動,可直接獲取A/D采集的數(shù)據(jù),進而對數(shù)據(jù)分析處理,簡化了系統(tǒng)軟件的設(shè)計,提高了實時性能,充分利用MATLAB編程效率高、數(shù)學(xué)計算功能強大的特點。

1 A/D性能測試設(shè)備簡介

在一種雷達接收機中,采用中頻數(shù)字化方案,對雷達四個窄帶通道和一個寬帶通道的中頻信號進行采樣、數(shù)字下變頻與正交相檢,形成數(shù)字化的A/D數(shù)據(jù),并完成數(shù)據(jù)的串行化和光纖傳輸,送往信號處理機進行后續(xù)處理,其信號數(shù)據(jù)率最大為320 MB/s,實時光纖傳輸速率為 2 Gb/s[5]。

A/D性能測試設(shè)備用于對接收機的A/D采樣性能進行測試。它以VME總線作為硬件平臺,包含了單板計算機、數(shù)據(jù)傳輸記錄模塊,系統(tǒng)構(gòu)成如圖1所示。

圖1 A/D性能測試設(shè)備的系統(tǒng)框圖

圖中,單板計算機是系統(tǒng)的控制核心,采用符合VME總線標(biāo)準(zhǔn)的計算機模塊,運行于Windows環(huán)境中。

數(shù)據(jù)傳輸記錄模塊用于實現(xiàn)與雷達接收機的點對點高速連接,將A/D送來的光纖數(shù)據(jù)串/并轉(zhuǎn)換變?yōu)椴⑿袛?shù)據(jù),存入板上存儲器暫存,當(dāng)存儲滿后,計算機讀取到系統(tǒng)內(nèi)存,由A/D性能測試軟件進行分析處理。

2 基于MATLAB與C混合編程的硬件驅(qū)動程序設(shè)計

A/D性能測試軟件運行在Windows環(huán)境中,其總體框架如圖2所示。它通過數(shù)據(jù)讀寫驅(qū)動程序?qū)崿F(xiàn)對VME總線的讀寫操作,將A/D送來的光纖數(shù)據(jù)讀入到內(nèi)存,再由數(shù)據(jù)顯示與分析程序?qū)?shù)據(jù)進行顯示并計算分析得出A/D的性能指標(biāo)。

圖2 A/D性能測試軟件框圖

由于MATLAB與硬件設(shè)備的接口能力較差,不支持訪問VME底層的硬件設(shè)備,常用的方法是通過VC++等通用軟件編寫數(shù)據(jù)讀寫程序,獲取外部數(shù)據(jù)后,再由MATLAB程序調(diào)用數(shù)據(jù)進行分析處理,使處理的實時性能降低,也給開發(fā)帶來一定難度。

在本文設(shè)計的系統(tǒng)中,我們結(jié)合MATLAB與C混合編程技術(shù),采用C-MEX方式編程,實現(xiàn)在MATLAB環(huán)境下對計算機VME總線的讀寫驅(qū)動,直接完成A/D數(shù)據(jù)讀取的底層操作,在此基礎(chǔ)上,對數(shù)據(jù)進行分析和處理。其實質(zhì)是在C框架下編寫硬件驅(qū)動程序,形成動態(tài)鏈接庫(DLL)函數(shù),并保證該DLL函數(shù)符合MATLAB函數(shù)的接口要求,使之可被MATLAB直接調(diào)用。

下面著重介紹如何在MATLAB環(huán)境中,實現(xiàn)A/D數(shù)據(jù)讀取的VME總線驅(qū)動設(shè)計。

2.1 C-MEX方式簡介

所謂 MEX,是 MATLAB Executable的縮寫,即MATLAB的可執(zhí)行程序。在 Windows環(huán)境中,它是擴展名為DLL的動態(tài)鏈接庫。MEX文件是MATLAB調(diào)用其他語言編寫的程序或算法的接口,它符合MATLAB的調(diào)用格式,可以在M程序中直接調(diào)用。

用戶可利用MATLAB的應(yīng)用程序編程接口,使用C語言、Fortran語言等編寫MEX函數(shù),編譯完成的MEX函數(shù)就可以像其他內(nèi)建的MATLAB函數(shù)一樣使用。MEX函數(shù)源代碼由兩部分組成:

第一部分,稱為計算子程序(computational routine),它是要鏈接的外部子程序,用于完成用戶定義的一些特定功能,如:數(shù)值計算、數(shù)據(jù)的輸入、輸出、對硬件的訪問和開發(fā)等,用戶想要將一些已經(jīng)編寫的程序和算法移植到MATLAB環(huán)境中使用,就需要將算法和程序整理成函數(shù)形式封裝。

第二部分,稱為入口子程序(gateway routine),相當(dāng)于C語言中的main函數(shù)。入口子程序的作用主要是在MATLAB系統(tǒng)與被調(diào)用的外部子程序之間建立通信聯(lián)系,也就是:定義被MATLAB調(diào)用的外部子程序的入口地址,定義MATLAB系統(tǒng)向子程序傳遞的參數(shù),還定義子程序向MATLAB系統(tǒng)返回的參數(shù),以及調(diào)用計算子程序等。

MEX函數(shù)源代碼的兩部分既可以分開,也可以組合在一起,但文件頭必須包含語句:

#include“mex.h”

2.2 硬件驅(qū)動程序的編程實現(xiàn)

按照MATLAB的混合編程框架,在本程序中,編寫MEX函數(shù)形式的驅(qū)動程序,分為兩個部分:

1)入口程序的編程實現(xiàn)

在入口程序中,用戶主要完成兩個方面的任務(wù):一方面,從輸入的mxArray結(jié)構(gòu)體中獲得計算所需的數(shù)據(jù),然后再調(diào)用用戶的計算子程序加以使用;另一方面,用戶同樣可以將計算結(jié)果返回給用于輸出的mx-Array結(jié)構(gòu)體,這樣MATLAB系統(tǒng)就能夠獲得用戶計算子程序的結(jié)果。

入口子程序的函數(shù)名必須是mexFunction,函數(shù)共有4個參數(shù),其中參數(shù)nrhs為MEX函數(shù)輸入?yún)?shù)的個數(shù),nlhs為MEX函數(shù)輸出參數(shù)的個數(shù),prhs是一個長度為nrhs的MEX函數(shù)輸入?yún)?shù)變量指針數(shù)組,plhs是一個長度為nlhs的MEX函數(shù)輸出參數(shù)變量指針數(shù)組。

源程序如下:

利用混合編程的關(guān)鍵點是輸入輸出接口參數(shù)的設(shè)置,只有保證驅(qū)動程序中定義的數(shù)據(jù)類型與MATLAB中的數(shù)據(jù)類型相匹配,才能進行正確的數(shù)據(jù)傳輸。

2)計算子程序的編程實現(xiàn)

計算子程序,主要完成硬件設(shè)備的VME總線讀寫,將A/D數(shù)據(jù)從板上數(shù)據(jù)存儲區(qū)讀入CPU內(nèi)存區(qū)。它由入口子程序調(diào)用。其源代碼如下:

/*向傳輸記錄板上的硬件基地址為JK_FIFOBASE,偏移量為0的硬件地址,發(fā)出寫總線命令,設(shè)置工作方式mode(寬帶方式或窄帶方式),并啟動采集。

2.2.1 驅(qū)動程序的編譯

上述兩段程序存于ad_sample.c中,在MATLAB的命令窗口中輸入:mex ad_sample.c,當(dāng)正確無誤,編譯通過,生成與C語言文件名相同的DLL文件,該文件與其他MATLAB內(nèi)嵌函數(shù)一樣,可由MATLAB調(diào)用ad_sample了。

2.2.2 MEX函數(shù)的執(zhí)行流程

當(dāng)MEX文件生成后,在MATLAB環(huán)境中調(diào)用形式為:

ad_data=ad_sample(mode)

則MATLAB編譯器使用下面的變量來調(diào)用mex-Function:

nlhs=1 nrhs=1

plhs=(pointer)->/unsigned*/

prhs=(pointer)->mode

在C語言的MEX文件中,參數(shù)nrhs為MEX函數(shù)輸入?yún)?shù)的個數(shù),nlhs為MEX函數(shù)輸出參數(shù)的個數(shù),借助這兩個參數(shù),MEX文件被調(diào)用。prhs是一個長度為nrhs的MEX函數(shù)輸入?yún)?shù)變量指針數(shù)組,plhs是一個長度為nlhs的MEX函數(shù)輸出參數(shù)變量指針數(shù)組,通過這兩個指針,可以在計算子程序中使用這些變量進行計算。plhs指向空的數(shù)組是由于輸出ad_data在子程序執(zhí)行前尚未產(chǎn)生,入口程序的作用就是創(chuàng)建輸出數(shù)組并分配指針plhs[0]指向該數(shù)組。MATLAB調(diào)用MEX函數(shù)的運行流程,如圖3所示。

2.2.3 試驗測試

基于上述生成的讀寫驅(qū)動程序,我們編寫了界面化MATLAB的A/D性能測試軟件,實現(xiàn)了數(shù)據(jù)讀取、數(shù)據(jù)顯示、數(shù)據(jù)分析等功能,配合測試系統(tǒng)完成了對以2 Gb/s速率光纖傳輸?shù)腁/D數(shù)據(jù)的采集與性能測試。圖4為測試軟件從光纖通道獲取的A/D數(shù)據(jù)波形,三組波形分別反映了接收機A/D輸出的正交分量、同相分量以及模值的數(shù)據(jù)。

圖3 MEX文件的編譯運行流程

圖4 A/D性能測試軟件的波形顯示界面

3 結(jié)束語

本文結(jié)合一種A/D性能測試設(shè)備的研制,論述了采用MATLAB和C語言混合編程的MEX函數(shù)技術(shù),編寫對VME總線的硬件讀寫程序,解決了MATLAB不能支持硬件底層驅(qū)動的問題,擴展了MATLAB的功能。本文所提出的方法不僅適用于此類硬件與MATLAB軟件的接口,還可實現(xiàn)MATLAB進行網(wǎng)絡(luò)通信,進而用于MATLAB與其他應(yīng)用程序之間通信,有助于發(fā)揮不同軟件各自的優(yōu)勢,降低開發(fā)難度,達到簡化編程的目的,從而縮短軟件開發(fā)周期。

[1] 楊高波,亓 波.精通 MATLAB 7.0混合編程[M].北京:電子工業(yè)出版社,2006.Yang Gaobo,Qi Bo.Mastering MATLAB 7.0 mixed programming[M].Beijing:Publishing House of Electronics Industry,2006.

[2] 黃志軍,戴余良,曾 斌,等.MATLAB外部網(wǎng)絡(luò)接口的實現(xiàn)[J].計算機與數(shù)字工程,2004,32(3):70-72.Huang Zhijun,Dai Yuliang,Zeng Bing,et al.Implementation of MATLAB external network interface[J].Computer and Digital Engineering,2004,32(3):70-72.

[3] 賴 娟.VC++與Matlab的混合編程[J].信息技術(shù),2006,30(6):123-126.Lai Juan.Hybrid programming between Matlab and VC++[J].Information Technology,2006,30(6):123-126.

[4] 禹 倩,白 雪.雷達信號分析虛擬儀器的設(shè)計與實現(xiàn)[J]. 現(xiàn)代雷達,2006,28(10):49-52.Yu Qian,Bai Xue.Design and implementation of radar signal analysis virtual instrument[J].Modern Radar,2006,28(10):49-52.

[5] 王益民.高速串行傳輸技術(shù)在雷達接收機中的應(yīng)用[J].現(xiàn)代雷達,2009,31(4):84-86.Wang Yimin.Application of high-speed serial transmission technology in radar receiver[J].Modern Radar,2009,31(4):84-86.

猜你喜歡
驅(qū)動程序子程序調(diào)用
核電項目物項調(diào)用管理的應(yīng)用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
淺談子程序在數(shù)控車編程中的應(yīng)用
子程序在數(shù)控車加工槽中的應(yīng)用探索
西門子840D系統(tǒng)JOG模式下PLC調(diào)用并執(zhí)行NC程序
利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
簡化編程與子程序嵌套的應(yīng)用
科技傳播(2011年24期)2011-08-29 05:39:46
驅(qū)動程序更新與推薦
驅(qū)動程序更新與推薦
崇仁县| 墨脱县| 绍兴县| 左云县| 博乐市| 罗田县| 嘉峪关市| 星子县| 佛坪县| 泰州市| 松滋市| 珠海市| 徐闻县| 渝中区| 务川| 聂拉木县| 杂多县| 奇台县| 乃东县| 彭山县| 凭祥市| 宾阳县| 固镇县| 霍林郭勒市| 海兴县| 古丈县| 明水县| 阿瓦提县| 南华县| 修水县| 商南县| 万全县| 马尔康县| 含山县| 安丘市| 宜宾县| 商南县| 天津市| 阜新| 镇原县| 奉节县|