【編者按】很好地利用了VC 和Matlab語(yǔ)言各自所表現(xiàn)出來(lái)的優(yōu)勢(shì)存站,巧妙地解決了VC 和Matlab語(yǔ)言的接口實(shí)現(xiàn)問(wèn)題萌小,利用混合編程的思想開(kāi)發(fā)了基于HMM的機(jī)床切削顫振趨勢(shì)預(yù)報(bào)軟件。實(shí)際應(yīng)用證明滚曾,該軟件具有一定的理論價(jià)值和較強(qiáng)的實(shí)用性狱心。
1 概述
HMM是一個(gè)概率統(tǒng)計(jì)模型,推理過(guò)程很復(fù)雜制依,涉及大量的矩陣運(yùn)算音诫。而Matlab在矩陣運(yùn)算方面具有卓越的性能,因此可以考慮用Matlab工具來(lái)開(kāi)發(fā)HMM的主體程序雪位。但Matlab是基于解釋性的語(yǔ)言竭钝,執(zhí)行效率不高。于是考慮到C的執(zhí)行效率雹洗,巧妙地解決了C和Matlab語(yǔ)言的接口實(shí)現(xiàn)方法香罐,利用混合編程的思想開(kāi)發(fā)了基于HMM的機(jī)床切削顫振趨勢(shì)預(yù)報(bào)軟件。在程序設(shè)計(jì)時(shí),利用MicrosoftVisualC來(lái)設(shè)計(jì)界面庇茫,調(diào)用Matlab中的程序來(lái)完成相關(guān)的計(jì)算功能港粱。
2 VC與Matlab的接口實(shí)現(xiàn)方法
atlab附有功能強(qiáng)大的工具(五金工具產(chǎn)業(yè))箱,它的函數(shù)性能是非常完善和穩(wěn)定的旦签,但Matlab主要是面向分析運(yùn)算而不是綜合型的開(kāi)發(fā)查坪。于是人們便利用Matlab和C各自所表現(xiàn)出來(lái)的優(yōu)勢(shì)來(lái)開(kāi)發(fā)高質(zhì)量的軟件。Matlab提供了C/C數(shù)學(xué)庫(kù)宁炫,其中的C數(shù)學(xué)庫(kù)的功能很強(qiáng)偿曙,使用它可以用類(lèi)似Matlab語(yǔ)言的語(yǔ)法編寫(xiě)C程序,十分方便淋淀。雖然在速度上仍然比普通的C/C程序慢馁胁,但由此帶來(lái)的高的開(kāi)發(fā)效率和計(jì)算可靠性是值得的。
在VisualC的集成開(kāi)發(fā)環(huán)境中使用Matlab萍卑,可以利用Mat-lab的數(shù)學(xué)庫(kù)將Matlab的程序編譯成VisualC編譯器所能識(shí)別的源代碼,并嵌入到VisualC 環(huán)境架看。如果熟悉Matlab的C/C數(shù)學(xué)庫(kù)爬韧,則可以直接在VisualC環(huán)境下編寫(xiě)代碼。將VisualC和Matlab集成進(jìn)行軟件開(kāi)發(fā)一般有如下幾種方法:
2.1 通過(guò)Matlab引擎將VC和Matlab集成
Matlab引擎采用客戶和服務(wù)器計(jì)算方式锦列,在運(yùn)用中奏喜,VC的C語(yǔ)言或C 語(yǔ)言的程序作為前端客戶機(jī),它向Matlab引擎?zhèn)鬟f命令和數(shù)據(jù)信息誊预,并從Matlab引擎接收數(shù)據(jù)信息效益,它提供了下列幾個(gè)函數(shù):engOpen,engGetArray寡瘩,engPutArray缔道,engEvaString,en-gOutputBuffer管书,engClose與客戶機(jī)進(jìn)行交互享甸。
下面例程是在VC下建一個(gè)基于對(duì)話框的應(yīng)用程序,在對(duì)話框中設(shè)置一個(gè)Button控件OnMatlabEngine梳侨,在對(duì)話框蛉威。Cpp文件中加入"engine.h"和"Math.h"頭文件(程序清單略略)。程序在VC下編譯需要將libeng.dll和 libMx.dll兩個(gè)動(dòng)態(tài)庫(kù)利用以下的命令:lib/def:<自己的Matlab的安裝路徑走哺,下同>d:\MAT-LAB6p5 \extern\include\.def/Machine:ix86/out:蚯嫌。lib來(lái)生成程序所需的靜態(tài)連接庫(kù)libeng.lib和 libMx.lib,將libeng.lib和libMx.lib所在的目錄加入VC project/link/object /libraryModules下即可丙躏。
2.2 利用Matlab自身的編譯器
Matlab的編譯器可將Matlab的M文件轉(zhuǎn)換為C或C 的源代碼以產(chǎn)生完全脫離Matlab運(yùn)行環(huán)境的獨(dú)立的運(yùn)用程序择示,當(dāng)Matlab的編譯器MCC加入適當(dāng)?shù)膮?shù)-e(MCC-e.)或 -p(MCC-p.)就可生成將輸入的M文件轉(zhuǎn)換為適用于特定運(yùn)用的C或C 源代碼。這樣如果要在VC下編譯通過(guò),還需連入以下幾個(gè)庫(kù) libMMfile.dll对妄,libMatlb.dll湘今,libMCC.dll,libMat.dll剪菱,libMx.dll摩瞎,libMibut.dll以及MatlabCmath庫(kù),建議采用前述的方法將動(dòng)態(tài)連接改為靜態(tài)連接渗某。對(duì)于C/C 編譯環(huán)境的設(shè)置磕糙,在Matlabcommand窗口下運(yùn)行 mex-setup然后依提示操作,而對(duì)于C/C 連接環(huán)境的設(shè)置折焙,運(yùn)行mbuild-setup依提示操作即可晶睦。
下面給出利用編譯器將Matlab工具箱中psd.m文件生成可供VC調(diào)用的函數(shù)。
(1)將psd.m文件拷貝一份至MATLAB6p5\bin目錄下层漠,改寫(xiě)相應(yīng)調(diào)用的M文件如nargchk.m爱茫,hanning.m等。為生成的代碼簡(jiǎn)潔涨旨,對(duì)于采集數(shù)據(jù)處理輸入?yún)?shù)很明了的情況下可作大量的刪減慰沸,最終使psd.m成為一個(gè)不依賴于其它M文件的獨(dú)立的M文件,注意要注釋掉作圖代碼槽叮。
(2)假設(shè)上述代碼重新存為testwin.m磷像,在Matlabcommand窗口下設(shè)置好環(huán)境參數(shù)運(yùn)行mcc-etestwin,則可在MATLAB6p5\bin下生成testwin.c津贩,如運(yùn)行mcc-ptestwin則生成testwin.cpp.
(3)VC下建立一個(gè)基于對(duì)話框的文件邦匆,然后在對(duì)話框里加一個(gè)Button控件OnButtonPsd,將上述生成的尝江。c文件的頭文件加入到工程的涉波。cp.
2.3 利用MATCOM和VC集成
MATCOM編譯M文件,先將M文件按照與MATCOM的cpp庫(kù)的對(duì)應(yīng)關(guān)系翻譯為cpp源代碼茂装,然后用對(duì)應(yīng)版本的C編譯器將cpp文件編譯成相應(yīng)的 exe或dll文件怠蹂,所以第一次運(yùn)行要指定C編譯器的路徑,否則無(wú)法編譯少态,指定好的編譯信息就寫(xiě)在MATCOM\bin\matcom.ini文件中城侧,不過(guò)這一步在安裝MATCOM時(shí),它自動(dòng)尋找編譯器并將其寫(xiě)入matcom.ini文件中彼妻,MAT-COM4.5版中使用TeeChart3.0.OCX控件嫌佑,因而它支持圖形操作。
我們依然用上述的testwin.m文件侨歉,不要將圖形函數(shù)注釋掉屋摇,利用Mideva來(lái)生成可被VC調(diào)用的信號(hào)處理程序。
(1)運(yùn)行Mideva在主界面上直打開(kāi)M文件,在菜單中選擇compiletodll炮温,輸入testwin.在matcomdebug目錄下可以找到這樣的幾個(gè)文件:testwin.c火脉,testwin.h,testwin.cpp茸汇,estwin.lib品糯,testwin.dll,testwin.exp等;(2)將上述testwin.cpp和testwin.h加入工程中居饵,project/addtoproject/files并且在相應(yīng)的文件中加入"stdafx.h";(3)加連接庫(kù):Tools\option\directory\蛔交,選include選項(xiàng),加入d:\MATCOM45 \lib(包含MATCOM.h)library選項(xiàng)减严,加入d:\MAT-COM45\lib;(4)選擇project\addtoproject在 files文件類(lèi)型選項(xiàng)選(镐访。lib)將d:\MATCOM45\lib\v4501.lib加入工程中編譯運(yùn)行。
可見(jiàn)利用MATCOM進(jìn)行 M文件轉(zhuǎn)換非常容易肮碗,生成的代碼可讀性很好限榆,以上的轉(zhuǎn)換同時(shí)生成了可供VC調(diào)用的動(dòng)態(tài)連接庫(kù),其使用和一般的動(dòng)態(tài)庫(kù)一樣使用贰往。同時(shí)需指明MATCOM不僅可轉(zhuǎn)換獨(dú)立的不依賴于其它M文件的M文件赵椰,同時(shí)可轉(zhuǎn)換調(diào)用其它M文件的M文件嵌套。條件是這些M文件要在同一個(gè)目錄下面伊厉。
3 切削顫振趨勢(shì)預(yù)報(bào)軟件的基本功能
HMM切削顫振預(yù)報(bào)軟件混合Matlab和C 語(yǔ)言編寫(xiě)而成。
它能完成數(shù)據(jù)可視化處理坦冠,F(xiàn)FT變換以及HMM的訓(xùn)練形耗,機(jī)床切削狀態(tài)監(jiān)控等基本功能。
3.1 HMM顫振預(yù)報(bào)軟件工作流程
程序流程圖辙浑。監(jiān)控工作開(kāi)始時(shí)激涤,程序前臺(tái)將采集到的實(shí)時(shí)信號(hào)波形顯示,而后臺(tái)的HMM工作線程對(duì)數(shù)據(jù)進(jìn)行濾波判呕,F(xiàn)FT變換倦踢,特征特取獲得特征向量,將該特征向量作為觀測(cè)值O侠草,然后將O帶入到在離線狀態(tài)下已經(jīng)訓(xùn)練好的各態(tài)HMM模型λi(i=1辱挥,2,3边涕,分別代表穩(wěn)定切削晤碘,過(guò)渡切削和顫振切削三種切削狀態(tài))中分別進(jìn)行計(jì)算得到觀察概率P(O|λi),其中最大的P(O|λi)第6期胡耀斌等:基于隱Markov的機(jī)床切削顫振趨勢(shì)預(yù)報(bào)軟件的開(kāi)發(fā)研究 166對(duì)應(yīng)的狀態(tài)即代表了當(dāng)前的切削裝態(tài)功蜓。如果顫振將要發(fā)生园爷,即對(duì)應(yīng)的顫振過(guò)渡切削狀態(tài)出現(xiàn)時(shí),發(fā)出預(yù)報(bào)信號(hào)。達(dá)到切削顫振預(yù)報(bào)目的卷芜。
3.2 HMM顫振預(yù)報(bào)主程序界面
HMM顫振預(yù)報(bào)主程序界面夷朽。開(kāi)始工作前,首先進(jìn)行采集設(shè)置元粹,其中包括采集信道數(shù)選擇熄朴,雙緩沖或DMA選擇,信號(hào)的輸入極性嫡境,采樣頻率贯森,采集點(diǎn)數(shù),數(shù)據(jù)保存褒饱,電荷放大器輸出倍率沛目,切削力范圍,加速度范圍以及屏幕顯示等方面的設(shè)置援儡。由于本試驗(yàn)有三個(gè)方向的切削力信號(hào)和一個(gè)加速度信號(hào)莲赐,所以選擇了前四個(gè)信道。同時(shí)酿装,考慮到采樣頻率不算太高访递,沒(méi)有選用DMA方式。
3.3 FFT分析功能
它主要完成當(dāng)前數(shù)據(jù)的特征提取功能同辣。他通過(guò)對(duì)采集到的原始數(shù)據(jù)進(jìn)行FFT.找到特定頻率點(diǎn)對(duì)應(yīng)的幅值拷姿,經(jīng)過(guò)量化后形成當(dāng)前的特征矢量。"原始頻率"顯示的是該原始數(shù)據(jù)當(dāng)時(shí)采集的頻率旱函。"分析點(diǎn)數(shù)"設(shè)定了快速傅立葉變換的點(diǎn)數(shù)响巢,一般為2n,(n=1棒妨,2踪古,…)右邊的旋鈕可以快速設(shè)定其大小。"抽樣頻率"可以設(shè)定當(dāng)前分析頻率券腔,它通過(guò)對(duì)原始數(shù)據(jù)然不同間隔抽樣達(dá)到目的伏穆。"信號(hào)類(lèi)型"指定了當(dāng)前分析的是加速度信號(hào)或某個(gè)切削力方向的信號(hào)。"顯示方式"設(shè)定了結(jié)果是按原分析值顯示還是按Llyods方式進(jìn)行量化編碼后顯示纷纫。通過(guò)兩者可以切換比較枕扫。本文的信號(hào)特征向量都是整數(shù),所以在實(shí)際分析時(shí)涛酗,選擇了量化編碼净处。FFT分析的工作界面。
3.4 HMM濾波功能
HMM濾波器主要是通過(guò)中的Viterbi算法進(jìn)行的居鸳,在濾波之前要通過(guò)Baum-Welch算法進(jìn)行模型訓(xùn)練婉固,以準(zhǔn)確獲得該序列模式下的特性吠童,進(jìn)而用Viterbi準(zhǔn)確濾波。稼乃,是其效果圖输奢。
3.5 輔助工具
本軟件設(shè)定了一些輔助功能,數(shù)據(jù)轉(zhuǎn)換功能軟件可以將采集到的二進(jìn)制文件轉(zhuǎn)換成文本文件之仍,工作界面屉韧。
信號(hào)發(fā)生器可以產(chǎn)生正弦波,鋸齒波楔答,方波以及白噪聲等常用信號(hào)谆藐,這些信號(hào)用于驗(yàn)證HMM濾波功能。信號(hào)發(fā)生器效果圖更假。
聲明:本網(wǎng)站所收集的部分公開(kāi)資料來(lái)源于互聯(lián)網(wǎng)监灌,轉(zhuǎn)載的目的在于傳遞更多信息及用于網(wǎng)絡(luò)分享,并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)击胜,也不構(gòu)成任何其他建議亏狰。本站部分作品是由網(wǎng)友自主投稿和發(fā)布、編輯整理上傳偶摔,對(duì)此類(lèi)作品本站僅提供交流平臺(tái)暇唾,不為其版權(quán)負(fù)責(zé)。如果您發(fā)現(xiàn)網(wǎng)站上所用視頻辰斋、圖片策州、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)第一時(shí)間告知宫仗,我們將根據(jù)您提供的證明材料確認(rèn)版權(quán)并按國(guó)家標(biāo)準(zhǔn)支付稿酬或立即刪除內(nèi)容抽活,以保證您的權(quán)益!聯(lián)系電話:010-58612588 或 Email:editor@mmsonline.com.cn锰什。
- 暫無(wú)反饋
編輯推薦
- 2025新年特刊:打造新質(zhì)生產(chǎn)力无牵,智啟未來(lái)新篇章
- 定義制造業(yè)未來(lái)的數(shù)控加工中心技術(shù)專(zhuān)題
- 航空航天及交通領(lǐng)域先進(jìn)制造技術(shù)應(yīng)用專(zhuān)題
- 解碼消費(fèi)電子產(chǎn)品生產(chǎn)的數(shù)字化之路技術(shù)專(zhuān)題
- 精密智能機(jī)床厂抖,助力制造升級(jí)技術(shù)專(zhuān)題
- 汽車(chē)輕量化驅(qū)動(dòng)下的零部件加工應(yīng)用專(zhuān)題
- 高性能銑刀實(shí)現(xiàn)高精加工生產(chǎn)技術(shù)專(zhuān)題
- 航空航天發(fā)動(dòng)機(jī)解決方案專(zhuān)題
- 高效齒輪加工生產(chǎn)技術(shù)方案專(zhuān)題
- 金屬加工液的性能不止?jié)櫥夹g(shù)應(yīng)用專(zhuān)題