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

C#與MATLAB混合編程在AE信號分析中的應用

2021-11-17 12:04:34劉玉德
計算機仿真 2021年9期
關鍵詞:程序信號分析

秦 政,劉玉德

(北京工商大學材料與機械工程學院,北京 100048)

1 引言

材料中局域源能量快速釋放而產生瞬態彈性波的現象稱為聲發射(acoustic emission,AE)。受聲發射信號自身特性、檢測儀器以及外界環境的影響,檢測到的聲發射電信號往往與真實信號有很大差距。因此,在聲發射技術發展中,各種可能的信號處理方法都曾在聲發射信號處理上進行嘗試。目前,在實驗和工程實踐中最常選用的聲發射信號分析方法是聲發射參數分析法,而快速準確的對聲發射信號中的持續時間、上升時間、振鈴計數、能量、RMS、ASL等特征參數進行提取和分析是聲發射信號研究的重要先決條件[1]。

目前,聲發射信號檢測系統通常將聲發射原始波形信號分割為離散的撞擊信號(Hit),存儲在文本文件中。后續的聲發射信號研究主要通過對這些撞擊文件分析來完成。而一段聲發射原始波形信號會被分割為成千上萬甚至幾十萬個撞擊文件。針對數量如此龐大的聲發射撞擊文件,提出使用混合編程的的方法完成對聲發射信號的存儲、顯示、處理和分析。

MATLAB是由MathWorks公司開發的一種高級編程語言,主要用于數值計算,編程和可視化。它支持包括C,C++,C#,Fortran,Java等其它編程語言進行接口連接。得益于MATLAB語言豐富的庫函數、強大的矩陣運算能力和數據繪制功能,其在聲發射信號處理方面相較于其它編程語言更加靈活,便捷。雖然MATLAB提供的一些制作交互界面的方法,如MATLAB GUI 等,能夠滿足一些簡單圖形用戶界面的需求,但在開發更加復雜的軟件方面稍顯力不從心[2-5]。

C#語言是一種現代的,通用的,面向對象的編程語言。作為由C/C++衍生出來的編程語言,C#能夠在快速開發的同時調用底層平臺的所有功能,使得編程人員可以快速編寫各種基于.NET平臺的應用程序,在編寫桌面應用程序方面有著簡單高效的特點[6,7]。同時,利用C#語言編寫的桌面應用程序可以利用ADO.NET技術同SQL Server數據庫進行數據通信,針對大量聲發射信號撞擊文件的存儲有得天獨厚的優勢。在信號處理分析方面,C#多依賴于各種第三方數值計算庫。這些第三方類庫編寫水平參差不齊,無法同MATLAB豐富的庫函數相比擬。

C#和MATLAB在各自領域都有著巨大優勢,通過MATLAB強大的數值計算能力進行聲發射信號處理核心算法的實現,并使用C#進行用戶界面設計并與數據庫進行通信,實現聲發射信號的可視化和數據庫存儲。二者取長補短能夠提高聲發射信號處理和分析的效率[8]。

2 C#與MATLAB混合編程的常用方法研究

目前,常用的MATLAB與C#混合編程的方法有以下三種:

第一種是利用.NET程序集[11]。MATLAB Complier能夠將要調用的M函數文件生成擴展名為*.dll的.NET程序集,用戶可以在C#項目中添加對該程序集的引用,調用程序集內部方法[13]。需要注意的是,如果運行程序的計算機中未安裝MATLAB軟件,還需要在計算機中安裝MATLAB組件運行環境(MATLAB Component Runtime,MCR),它可以分析用戶程序,自動實現一個運行該程序的最小環境而不需要安裝完整的MATLAB。這種方法可以將含有聲發射信號特征參數提取和分析算法的MATLAB函數編譯為適用于C#項目的.NET組件,將聲發射信號算法“融合”進C#窗體應用程序中,使得聲發射信號分析處理更加靈活,簡便。

第二種是利用MATLAB引擎(Engine)。MATLAB引擎是指MATLAB提供的一組接口函數,用戶可以通過MATLAB引擎實現對MATLAB程序的控制。這種方式將MATLAB作為計算引擎服務器,而外部應用程序作為客戶端,用戶向客戶端發出數據請求,客戶端通過MATLAB引擎向MATLAB服務器端發出數據參數和MATLAB命令,MATLAB服務器端經過計算后將計算結果經MATLAB引擎返回給客戶端[9]。在Windows系統中,外部應用程序與計算引擎服務器是利用IEngine接口實現的。MATLAB計算引擎應用提供的MATLAB功能最為全面,包含MATLAB的全部函數,還可以執行MATLAB命令。這些功能有利于聲發射信號的小波分析、模態聲發射分析、人工神經網絡模式識別等方面的研究。由于調用引擎的時候需要在后臺啟動MATLAB進程,使用這種方法要求用戶必須安裝MATLAB軟件。這種情況反而使得聲發射特征參數分析變得更加繁瑣,也削弱了C#與MATLAB混合編程的優勢。

第三種是利用COM技術[10]。COM(Component Object Model,組件對象模型),是由微軟推出的一套接口規范,通過設定不同組件之間需要遵守的標準與協議,主要用來實現跨語言、跨進程之間的模塊通信。基于COM標準,可以開發不同的COM對象,而對象以接口的形式提供服務。一般地,COM對象與客戶之間是遵循控制器/服務器工作模式的。在COM的基礎上,COM自動化服務允許一個應用程序(控制器或客戶端)控制由另一個應用程序(服務器)導出的控件對象。其核心是采用統一的IDispatch接口。MATLAB是一款支持COM標準的軟件,它既可以作為自動化控制器控制其它應用程序,也可以由作為自動化控制器的其它應用程序控制。基于這一點,用戶可以在其它應用程序下運行MATLAB組件及MATLAB程序本身,這一方法類似于MATLAB引擎技術,使聲發射信號特征參數分析的變的稍顯復雜。不僅如此,還可以利用MATLAB Complier將M函數編譯為COM組件供其它應用程序調用,這一方法的效果在聲發射分析中類似于.NET組件法,但編譯的COM組件在使用時往往還需要進行注冊,并可能出現“DLL地獄”問題。

3 在聲發射信號處理分析中的應用

基于前一節的內容,本文著重研究.NET程序集的方法在進行聲發射信號處理分析混合編程時的應用.該方法的具體步驟包括:

1)在MATLAB中編寫可以運行的M函數。

2)利用MATLAB Complier 將M函數編譯成.NET程序集。

3)在C#項目中添加對生成的.NET程序集以及MWArray.dll的引用。

4)編寫C#代碼調用.NET程序集中的方法。

3.1 在聲發射信號特征參數分析中的應用

3.1.1 聲發射信號特征參數提取算法實現

以聲發射信號參數中的持續時間為例,持續時間是信號第一次越過門檻至最終降至門檻所經歷的時間間隔,用μs表示,可用于對特殊波源類型和噪聲的鑒別[12]。為實現上述功能,運行MATLAB R2018a,編寫如下M函數:

function duration=Duration(data,threshold,pregain)

beginTime=1;

while ~(beginTime>=length(data)-1‖ data(beginTime)>(10^((threshold+pregain)/20))*(10^-6))

beginTime=beginTime+1;

end

endIndex=1;

flipData=flipud(data);

while ~(endIndex>=length(flipData)-1‖ flipData(endIndex)>(10^((threshold+pregain)/20))*(10^-6))

endIndex=endIndex+1;

end

endTime=length(data)-endIndex+1;

duration=(endTime-beginTime);

if duration<0

duration=0;

end

M函數中包含三個輸入參數和一個輸出參數。三個輸入參數分別表示聲發射信號數據,設置的閾值以及前置放大增益,輸出參數表示聲發射信號的持續時間。

3.1.2 利用MATLAB Complier制作.NET組件

在MATLAB命令行窗口中運行deploytool命令,出現MATLAB Complier窗口,單擊Library Complier,出現標題為MATLAB Complier - untitled1.prj的窗口,如圖1所示。在工具欄TYPE中選擇.NET Assembly,在EXPORTED FUNCTIONS中添加編寫的M函數Duration.m。在Library information 中可以輸入工程文件的名字以及文件描述等相關信息。在Namespace中輸入方法所在的命名空間MatlabParameter.在Class Name中雙擊Class1修改類的名稱為Parameter,在Method Name中添加Duration.m作為Parameter類的方法。右擊方法名,點擊Delete可刪除已添加的方法。點擊Add Class可添加新的類。點擊Package進行編譯打包工作。編譯結束后MATLAB會在工程路徑下生成工程文件夾,在for_redistribution_files_only子文件夾中找到與命名空間名稱同名的動態鏈接庫文件MatlabParameter.dll,即所要加載的dll文件。

圖1 MATLAB Complier 工程窗口

3.1.3 在C#項目中使用.NET程序集

使用程序集前必須添加對程序集的引用,在C#項目中通過瀏覽找到Duration.dll的位置,添加至引用。因為C#與MATLAB之間的語言思路與計算方式不同, 數據間無法直接傳遞,.Net組件中運用MWArray類型作為中間類型, 使得C#中數據的類型與MATLAB中數據的類型皆可轉換至MWArry,從而達到相互轉換的目的。因此,需要添加MATLAB安裝路徑下MATLABR2018a oolboxdotnetbuilderinwin64v4.0中的MWArry.dll至引用以進行數據交換。同時添加命名空間MathWorks.MATLAB.NET.Arrays和MathWorks.MATLAB.NET.Utility。

具體的數據類型轉換原則如下:

1)將C#數據類型轉換為MATLAB適用的數據類型,如果C#數據類型為int,double等類型,可以直接隱式轉換為MWArray類型;如果C#數據類型為數組類型,需要先將數據類型轉換為MWArrry的子類,包括MWNumericArray,MWCharArray,MWLogicalArray等類型(其中MWNumericArray對應C#中double,float,int等類型,MWCharArray對應Char,String等類型,MWLogicalArray對應Boolean類型),再將子類型賦值給父類型MWArray。

2)將MATLAB類型轉換為C#類型,由MATLAB函數返回的數據均為MWArray類型,需要先強制轉換為子類型,再轉換為C#中相應的數據類型。

在界面的計算按鈕相應事件中添加如下代碼。

∥定義三個MWNumericArray類型的變量

MWNumericArray mwPregain=pregain;

MWNumericArray mwThreshold=threshold;

MWNumericArray mwData;

MatlabParameter matlabParameter=new MatlabParameter();

DataTable dt=new DataTable();

DataTable dtResult=new DataTable();

dtResult.Columns.Add("Duration",typeof(float));

dt=parameter.GetRawData(strWhere);

∥批量計算聲發射信號數據的持續時間

for (int i=0; i < dt.Rows.Count; i++)

{

∥將以string類型存儲的聲發射信號數據轉為double類型

string[]strAWave=@dt.Rows[i][1].ToString().Split(newstring[]{ " " },

StringSplitOptions.RemoveEmptyEntries);

double[] dAWave=new double[strAWave.Length];

for (int j=0; j < strAWave.Length; j++)

{

dAWave[j]=Convert.ToDouble(strAWave[j]);

}

mwData=dAWave;

DataRow item=dtResult.NewRow();

∥計算,將MWArray類型的數據轉換為double類型

item["Duration"]=@( (MWNumericArray)matlabParameter.Duration(mwData,mwThreshold,mwPregain)).ToScalDouble();

dtResult.Rows.Add(item);

}

return dtResult;

首先,定義了三個MWNumericArrary類型的輸入變量,并將閾值和前置放大增益賦值給對應的兩個變量;其次,在調用.NET程序集中方法前創建包含這個方法的實例;MatlabParameter matlabParameter=new MatlabParameter();

然后,對以string類型儲存的聲發射信號數據進行處理,分割字符串,得到每個數據并轉換為double類型,再將double類型的數據存入double類型數組中,通過賦值得到MWNumericArrary類型的聲發射信號數據;接著,調用.NET程序集中的方法matlabParameter.Duration()對聲發射信號數據進行計算:

item["Duration"]=@( (MWNumericArray)matlabParameter.Duration(mwData,mwThreshold,mwPregain)).ToScalarDouble();

由于返回值為MWArray類型,需先強制轉換為MWNumericArray類型,再轉換為Double類型,讀入DataTable中以便在C#窗體中顯示。

3.2 在聲發射信號分析可視化中的應用

聲發射信號的特征參數分析方法不僅要對單個特征參數進行提取和分析,還要對特征參數進行經歷分析、分布分析和關聯分析。最常用最直觀的分析方式是進行圖形分析,繪制相關的經歷分析圖、分布分析圖和關聯分析圖進行研究。

由MATLAB函數編譯的.NET組件不僅可以對矩陣進行操作,完成數值計算,還可以在MCR環境中調用MATLAB特有的句柄圖形系統,實現對圖形窗口對象的操作。

以聲發射信號的經歷分析m函數為例。

function HisVar(varargin)

narginchk(0,3)

if nargin==0

clf;

elseif nargin==3

clf;

x=varargin{1};

y=varargin{2};

flag=varargin{3};

switch flag

case 0

bar(x,y);

xlabel(′時間/s′)

title(′振鈴統計′)

ylabel(′振鈴計數′)

……

end

end

bar()函數為二維長條圖繪制函數。調用該函數會調用MATLAB圖形窗口Figure并在Figure中繪制長條圖。

在C#窗體應用程序中封裝一個用于捕捉窗口句柄的類,利用Windows操作系統的窗口函數捕捉Figure窗體句柄,可實現將獨立的Figure窗口嵌入C#窗體中,優化混合編程的融合性,增加用戶體驗度[14]。

4 軟件實例

運用.NET程序集的方法實現了聲發射信號分析處理軟件的開發。不僅實現對聲發射信號參數的提取,繪制聲發射信號參數的經歷分析圖,分布分析圖和關聯分析圖功能,還利用ADO.NET技術實現對聲發射信號撞擊文件以及特征參數的數據庫存儲。原始信號數據的撞擊波形文件如圖2所示。聲發射信號參數提取模塊如圖3所示,點擊“計算”可以實現對導入數據庫中的聲發射信號的參數提取,包括信號的振鈴計數,上升時間,持續時間,能量,幅值,RMS,ASL等。圖4是經歷分析模塊的界面[14-17],展示振鈴計數隨時間的變化。圖5是分布分析界面,展示了所有撞擊信號的幅度分布。圖6是關聯分析模塊界面,顯示了第四通道信號的RMS關聯圖。

圖2 聲發射信號文件

圖3 聲發射參數計算結果

圖4 經歷分析界面

圖5 分布分析界面

圖6 關聯分析界面

5 結束語

通過聲發射信號分析處理程序的實例,對一種基于.NET程序集的C#與MATLAB混合編程的方法進行了研究。其能夠將MATLAB函數轉換為.NET程序集后應用在C#程序中,既可以利用MATLAB強大的科學計算能力來降低聲發射信號處理算法的開發難度,又可以利用C#友好的界面設計模塊和代碼執行能力來提高聲發射信號處理分析的效率。給出的操作過程和代碼實例均說明此方法能夠結合MATLAB和C#優勢,高效完成聲發射信號特征參數分析的工作,具有簡單快捷,可實用性強的特點。

猜你喜歡
程序信號分析
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
隱蔽失效適航要求符合性驗證分析
完形填空二則
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
電力系統不平衡分析
電子制作(2018年18期)2018-11-14 01:48:24
基于FPGA的多功能信號發生器的設計
電子制作(2018年11期)2018-08-04 03:25:42
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
電力系統及其自動化發展趨勢分析
基于LabVIEW的力加載信號采集與PID控制
主站蜘蛛池模板: 欧洲高清无码在线| 国产草草影院18成年视频| 五月综合色婷婷| 国产99视频在线| 亚洲三级色| 人妻丰满熟妇AV无码区| 亚洲天堂在线视频| 亚洲永久精品ww47国产| 超碰色了色| 国产成熟女人性满足视频| 992Tv视频国产精品| 国产激爽爽爽大片在线观看| 青青国产在线| 日韩麻豆小视频| 波多野结衣久久高清免费| 精品久久久久久中文字幕女| 免费网站成人亚洲| 精品国产aⅴ一区二区三区| 一级毛片a女人刺激视频免费| 亚洲欧美日韩色图| 欧美激情综合一区二区| 国产性生大片免费观看性欧美| 欧美一级高清视频在线播放| 国产亚洲欧美日韩在线观看一区二区| 国产拍在线| 精久久久久无码区中文字幕| 一本色道久久88| 69国产精品视频免费| 亚洲五月激情网| 国产欧美综合在线观看第七页| 婷婷久久综合九色综合88| 国产超碰一区二区三区| 国产精品 欧美激情 在线播放| 大香伊人久久| 国产免费网址| 国产黄色爱视频| 永久在线精品免费视频观看| aⅴ免费在线观看| 久久中文无码精品| 在线精品亚洲国产| 亚洲无码高清免费视频亚洲| 久久免费视频播放| 在线看AV天堂| 狠狠色狠狠色综合久久第一次| 69av免费视频| 亚洲男人的天堂网| 在线99视频| 国产白浆一区二区三区视频在线| 欧美一区福利| 国产粉嫩粉嫩的18在线播放91| 欧美成人区| 人人澡人人爽欧美一区| 亚洲中文字幕国产av| 九色视频最新网址| 亚洲国产成人无码AV在线影院L| 国产精品偷伦在线观看| 国产午夜一级淫片| 亚洲经典在线中文字幕| 呦系列视频一区二区三区| 日韩毛片视频| 亚洲av无码人妻| 国产精品无码AV中文| 五月激情婷婷综合| 婷婷在线网站| 国国产a国产片免费麻豆| 国产精品hd在线播放| 一级毛片在线播放免费| 18黑白丝水手服自慰喷水网站| 亚洲精品无码日韩国产不卡| 99热这里只有精品5| 国产精品吹潮在线观看中文| 中文字幕乱码二三区免费| 日本不卡免费高清视频| 国产精品亚洲综合久久小说| 国产精品xxx| 日韩在线2020专区| 97在线视频免费观看| 亚洲Av综合日韩精品久久久| 国产在线精品美女观看| 亚洲综合网在线观看| 一级成人a做片免费| 国产无人区一区二区三区|