• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      王益民

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

      0 引言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      2.1 C-MEX方式簡介

      所謂 MEX,是 MATLAB Executable的縮寫,即MATLAB的可執(zhí)行程序。在 Windows環(huán)境中,它是擴(kuò)展名為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ù)源代碼由兩部分組成:

      第一部分,稱為計(jì)算子程序(computational routine),它是要鏈接的外部子程序,用于完成用戶定義的一些特定功能,如:數(shù)值計(jì)算、數(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)用計(jì)算子程序等。

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

      #include“mex.h”

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

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

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

      在入口程序中,用戶主要完成兩個方面的任務(wù):一方面,從輸入的mxArray結(jié)構(gòu)體中獲得計(jì)算所需的數(shù)據(jù),然后再調(diào)用用戶的計(jì)算子程序加以使用;另一方面,用戶同樣可以將計(jì)算結(jié)果返回給用于輸出的mx-Array結(jié)構(gòu)體,這樣MATLAB系統(tǒng)就能夠獲得用戶計(jì)算子程序的結(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)鍵點(diǎn)是輸入輸出接口參數(shù)的設(shè)置,只有保證驅(qū)動程序中定義的數(shù)據(jù)類型與MATLAB中的數(shù)據(jù)類型相匹配,才能進(jìn)行正確的數(shù)據(jù)傳輸。

      2)計(jì)算子程序的編程實(shí)現(xiàn)

      計(jì)算子程序,主要完成硬件設(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ù)組,通過這兩個指針,可以在計(jì)算子程序中使用這些變量進(jìn)行計(jì)算。plhs指向空的數(shù)組是由于輸出ad_data在子程序執(zhí)行前尚未產(chǎn)生,入口程序的作用就是創(chuàng)建輸出數(shù)組并分配指針plhs[0]指向該數(shù)組。MATLAB調(diào)用MEX函數(shù)的運(yùn)行流程,如圖3所示。

      2.2.3 試驗(yàn)測試

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

      圖3 MEX文件的編譯運(yùn)行流程

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

      3 結(jié)束語

      本文結(jié)合一種A/D性能測試設(shè)備的研制,論述了采用MATLAB和C語言混合編程的MEX函數(shù)技術(shù),編寫對VME總線的硬件讀寫程序,解決了MATLAB不能支持硬件底層驅(qū)動的問題,擴(kuò)展了MATLAB的功能。本文所提出的方法不僅適用于此類硬件與MATLAB軟件的接口,還可實(shí)現(xiàn)MATLAB進(jìn)行網(wǎng)絡(luò)通信,進(jìn)而用于MATLAB與其他應(yīng)用程序之間通信,有助于發(fā)揮不同軟件各自的優(yōu)勢,降低開發(fā)難度,達(dá)到簡化編程的目的,從而縮短軟件開發(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ò)接口的實(shí)現(xiàn)[J].計(jì)算機(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] 禹 倩,白 雪.雷達(dá)信號分析虛擬儀器的設(shè)計(jì)與實(shí)現(xiàn)[J]. 現(xiàn)代雷達(dá),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ù)在雷達(dá)接收機(jī)中的應(yīng)用[J].現(xiàn)代雷達(dá),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)用
      核電項(xiàng)目物項(xiàng)調(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ù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
      簡化編程與子程序嵌套的應(yīng)用
      科技傳播(2011年24期)2011-08-29 05:39:46
      驅(qū)動程序更新與推薦
      驅(qū)動程序更新與推薦
      虹口区| 清涧县| 库尔勒市| 湖北省| 翁牛特旗| 虎林市| 密山市| 板桥市| 溧水县| 饶平县| 柘城县| 普安县| 凭祥市| 汕尾市| 临潭县| 铜鼓县| 宁强县| 莒南县| 宣威市| 滨海县| 正宁县| 砀山县| 太和县| 英超| 枝江市| 宜都市| 股票| 桐庐县| 共和县| 秀山| 琼中| 富宁县| 南平市| 收藏| 嫩江县| 仙桃市| 府谷县| 昂仁县| 海伦市| 乌鲁木齐市| 沙河市|