<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 設計應用 > 機泵群智能巡檢系統之數據處理模塊的開(kāi)發(fā)研究

機泵群智能巡檢系統之數據處理模塊的開(kāi)發(fā)研究

——
作者:作者:徐春林 馬波 時(shí)間:2007-01-26 來(lái)源:《今日電子》 收藏

引言

在機泵群智能監測預知維修系統平臺的開(kāi)發(fā)中,需要對旋轉機械設備的運行狀態(tài)進(jìn)行診斷。目前國內外普遍采用的行之有效的方法是共振解調法,又稱(chēng)高頻共振法或包絡(luò )分析法。這就需要將采集的振動(dòng)信號通過(guò)希爾伯特變換進(jìn)行包絡(luò )。其基本原理為,對采集的振動(dòng)信號進(jìn)行解調處理,獲得富含故障信息的解調波,通過(guò)對此解調波的振幅和頻譜的分析,從而確定故障發(fā)生的部位。
整個(gè)的系統開(kāi)發(fā)是在Visual C++平臺上實(shí)現的,然而Visual C++在數據處理上遠不如MATLAB方便、快捷,所以在編寫(xiě)VC++應用程序時(shí),為了利用MATLAB的強大的數值計算和處理功能來(lái)完成信號處理,采用了MATLAB的C++數學(xué)庫來(lái)進(jìn)行計算。

VC++中調用MATLAB函數

MATLAB中的大多數函數都是基于MATLAB的數學(xué)庫函數,若數學(xué)庫中沒(méi)有需要的函數,則通過(guò)編寫(xiě).m文件,并調用數學(xué)庫中相應的函數來(lái)實(shí)現。Matlab的數學(xué)庫可以把大部分.m文件寫(xiě)成應用程序編譯成可執行的exe程序,脫離MATLAB環(huán)境,也可以通過(guò)mcc編譯為C/C++文件。

在使用MATLAB函數過(guò)程中,存在兩種情況,一是數學(xué)庫中有的函數,二是數學(xué)庫中沒(méi)有的函數。下面對這兩種情況進(jìn)行分別介紹。

● 調用數學(xué)庫中的函數

在VC++中調用數學(xué)庫中的函數可以進(jìn)行直接的調用。但是由于MATLAB和C++之間的調用方式不盡相同。在MATLAB中的變量都是數組形式,因而VC++中調用都是通過(guò)MATLAB中的mwArray類(lèi)型變量來(lái)進(jìn)行賦值和傳遞變量的。一般使用的轉換函數有hozcat、row2cat、ExtractScalar和ExtractData等。

在調用MATLAB數學(xué)庫函數的VC++文件中加入頭文件“matlab.hpp”,就可以直接使用MATLAB數學(xué)庫函數,其方式與使用VC++中的函數相同,只是傳遞的參數類(lèi)型不同。還需要對VC++環(huán)境和工程進(jìn)行設置。

● 調用數學(xué)庫沒(méi)有的函數

MATLAB數學(xué)庫中沒(méi)有的函數基本上都是.m文件。調用這些函數時(shí),要使用mcc-t-L Cpp name把.m文件編譯為相應的.hpp和.cpp文件。把生成的相應.hpp和.cpp文件加入到VC++工程中,在工程中使用這個(gè)函數的文件中加入相應的頭文件(.hpp文件)。

在MATLAB中大部分.m文件不是獨立的,有許多一個(gè).m文件中嵌套調用別的.m文件。在這種情況下,需要把在這個(gè).m文件中嵌套調用的其他.m文件代碼復制到這個(gè).m文件??傊?,在這個(gè).m文件沒(méi)有嵌套調用別的.m文件,僅僅只有數學(xué)庫中函數和一些基本算法,是個(gè)獨立的.m文件。有一點(diǎn)需要注意的是,將所需要的函數的在這個(gè).m文件中的部分代碼,一定要放到最前面,即在這個(gè).m文件中可能包括多個(gè)子程序。

如果不知道這個(gè).m文件中是否調用了別的.m文件,通過(guò)mcc編譯即可被發(fā)現。沒(méi)有調用其他.m文件的文件,編譯后只生成以這個(gè)文件命名的.hpp和.cpp文件,而如果調用了其他.m文件,則生成三個(gè)文件,分別是以這個(gè)文件命名的.hpp、.cpp文件和嵌套調用的那個(gè).m文件命名的.hpp文件。

本文引用地址:http://dyxdggzs.com/article/20943.htm

如何脫離MATLAB環(huán)境運行

上面介紹了VC++中調用MATLAB函數的方法,此時(shí)應用程序需要和MATLAB環(huán)境同時(shí)運行,并且通過(guò)MATLAB的執行程序路徑,調用了MATLAB的動(dòng)態(tài)連接庫,實(shí)際上并沒(méi)有完全脫離MATLAB,這是由于mcc功能上的限制。

如何真正脫離MATLAB呢?MATLAB提供了一個(gè)發(fā)行程序包,位于externlibwin32 mglinstaller.exe,執行它后將在指定目錄下解壓縮出bin和toolbox兩個(gè)子目錄,其中在binwin32目錄下就是數學(xué)庫和圖形庫脫離MATLAB運行所需的所有動(dòng)態(tài)連接庫,共有37個(gè)。重新啟動(dòng)之后,應用程序就可以在沒(méi)有安裝MATLAB的環(huán)境下運行了。

應用例程

在機泵群智能監測預知維修系統平臺的開(kāi)發(fā)中,利用共振解調技術(shù)對設備振動(dòng)的低頻沖擊所激起的高頻共振波進(jìn)行包絡(luò )檢波和低通濾波,即解調,獲得一個(gè)對應于低頻沖擊的,而又放大并展寬了的共振解調波;通過(guò)此共振解調波的幅值和頻譜分析,就可以在故障特征頻率及其倍頻處看到清晰的譜峰,而不含故障沖擊的信號缺不會(huì )在共振解調波的頻譜圖中出現譜峰,因此很容易確定故障發(fā)生的部位。

由上所述,在系統開(kāi)發(fā)的數據處理中,需要對采集的振動(dòng)信號進(jìn)行包絡(luò )分析,這一數據分析過(guò)程是通過(guò)調用MATLAB中的希爾伯特變換函數來(lái)實(shí)現。
建立的工程文件名為T(mén)est。

(1)在MATLAB的安裝目錄下找到hilbert.m文件和shiftdim.m文件(hilbert.m文件中嵌套調用了shiftdim),然后在shiftm.m文件中的代碼復制到hilbert.m文件中,并另存為hilbert1.m文件。

(2)在MATLAB的Command Window下使用命令mcc -t -L Cpp hilbert1,生成hilbert1.hpp和hilbert1.cpp兩個(gè)文件,編譯完后生成的函數名就是hilbert1(即文件名)。

(3)在VC++中建立工程test,并按照2.1中進(jìn)行相關(guān)設置,使用hibert1函數
#include "stdafx.h"
#include "matlab.hpp"
#include "hilbert1.hpp"
void mccDemo()
{mwArray m3,m1,m2,t1;
double *dd=new double[1024];
double *d2=new double[1024];
for(int i=1;i<=1024;i++)
t[i]=i/1000.0;
t1=row2mat(1,1024,t);//把生成的時(shí)間序列賦給mwArray數組變量
m1=100*sin(50*t1);
m1.ExtractData(dd);
m3=hilbert1(m1,1024);//進(jìn)行希爾伯特變換
m2=abs(m3); //MATLAB數學(xué)庫函數,進(jìn)行求模運算
m2.ExtractData(d2); //把mwArray的數據轉換為double數組中
delete dd;
delete d2;
}

運行結果如圖1所示,軸承振動(dòng)信號的包絡(luò )幅值譜圖。測點(diǎn)的轉速頻率為15Hz,當軸承內圈有故障時(shí),該軸承的采樣信號的時(shí)域波形經(jīng)包絡(luò )分析后,對其進(jìn)行相應的頻譜分析,得出軸承的內圈故障特征頻率。其中,對時(shí)域波形的包絡(luò )分析,就是通過(guò)上述的調用過(guò)程實(shí)現的。

從圖1可以看出最大幅值處的頻率為88.87Hz,而理論上,用特征頻率計算公式求得的故障特征頻率為88.6Hz。因此,可以說(shuō)明此方法是可行的。

結論

利用VC++來(lái)完成智能巡檢系統的界面設計、數據管理、底層I/O等功能,而利用MATLAB來(lái)完成數據處理分析核心算法的設計,兩者的有機結合降低了程序的開(kāi)發(fā)難度和周期,提高了開(kāi)發(fā)效率。該方法對其他領(lǐng)域如系統仿真、圖像處理等專(zhuān)業(yè)領(lǐng)域也有很強的指導意義和推廣價(jià)值。

c++相關(guān)文章:c++教程




關(guān)鍵詞: 模塊

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>