【编者按】很好地利用了VC 和Matlab语言各自所表现出来的优势,巧妙地解决了VC 和Matlab语言的接口实现问题,利用混合编程的思想开发了基于HMM的机床切削颤振趋势预报软件。实际应用证明,该软件具有一定的理论价值和较强的实用性。
1 概述
HMM是一个概率统计模型,推理过程很复杂,涉及大量的矩阵运算。而Matlab在矩阵运算方面具有卓越的性能,因此可以考虑用Matlab工具来开发HMM的主体程序。但Matlab是基于解释性的语言,执行效率不高。于是考虑到C的执行效率,巧妙地解决了C和Matlab语言的接口实现方法,利用混合编程的思想开发了基于HMM的机床切削颤振趋势预报软件。在程序设计时,利用MicrosoftVisualC来设计界面,调用Matlab中的程序来完成相关的计算功能。
2 VC与Matlab的接口实现方法
atlab附有功能强大的工具(五金工具产业)箱,它的函数性能是非常完善和稳定的,但Matlab主要是面向分析运算而不是综合型的开发。于是人们便利用Matlab和C各自所表现出来的优势来开发高质量的软件。Matlab提供了C/C数学库,其中的C数学库的功能很强,使用它可以用类似Matlab语言的语法编写C程序,十分方便。虽然在速度上仍然比普通的C/C程序慢,但由此带来的高的开发效率和计算可靠性是值得的。
在VisualC的集成开发环境中使用Matlab,可以利用Mat-lab的数学库将Matlab的程序编译成VisualC编译器所能识别的源代码,并嵌入到VisualC 环境。如果熟悉Matlab的C/C数学库,则可以直接在VisualC环境下编写代码。将VisualC和Matlab集成进行软件开发一般有如下几种方法:
2.1 通过Matlab引擎将VC和Matlab集成
Matlab引擎采用客户和服务器计算方式,在运用中,VC的C语言或C 语言的程序作为前端客户机,它向Matlab引擎传递命令和数据信息,并从Matlab引擎接收数据信息,它提供了下列几个函数:engOpen,engGetArray,engPutArray,engEvaString,en-gOutputBuffer,engClose与客户机进行交互。
下面例程是在VC下建一个基于对话框的应用程序,在对话框中设置一个Button控件OnMatlabEngine,在对话框。Cpp文件中加入"engine.h"和"Math.h"头文件(程序清单略略)。程序在VC下编译需要将libeng.dll和 libMx.dll两个动态库利用以下的命令:lib/def:<自己的Matlab的安装路径,下同>d:\MAT-LAB6p5 \extern\include\.def/Machine:ix86/out:。lib来生成程序所需的静态连接库libeng.lib和 libMx.lib,将libeng.lib和libMx.lib所在的目录加入VC project/link/object /libraryModules下即可。
2.2 利用Matlab自身的编译器
Matlab的编译器可将Matlab的M文件转换为C或C 的源代码以产生完全脱离Matlab运行环境的独立的运用程序,当Matlab的编译器MCC加入适当的参数-e(MCC-e.)或 -p(MCC-p.)就可生成将输入的M文件转换为适用于特定运用的C或C 源代码。这样如果要在VC下编译通过,还需连入以下几个库 libMMfile.dll,libMatlb.dll,libMCC.dll,libMat.dll,libMx.dll,libMibut.dll以及MatlabCmath库,建议采用前述的方法将动态连接改为静态连接。对于C/C 编译环境的设置,在Matlabcommand窗口下运行 mex-setup然后依提示操作,而对于C/C 连接环境的设置,运行mbuild-setup依提示操作即可。
下面给出利用编译器将Matlab工具箱中psd.m文件生成可供VC调用的函数。
(1)将psd.m文件拷贝一份至MATLAB6p5\bin目录下,改写相应调用的M文件如nargchk.m,hanning.m等。为生成的代码简洁,对于采集数据处理输入参数很明了的情况下可作大量的删减,最终使psd.m成为一个不依赖于其它M文件的独立的M文件,注意要注释掉作图代码。
(2)假设上述代码重新存为testwin.m,在Matlabcommand窗口下设置好环境参数运行mcc-etestwin,则可在MATLAB6p5\bin下生成testwin.c,如运行mcc-ptestwin则生成testwin.cpp.
(3)VC下建立一个基于对话框的文件,然后在对话框里加一个Button控件OnButtonPsd,将上述生成的。c文件的头文件加入到工程的。cp.
2.3 利用MATCOM和VC集成
MATCOM编译M文件,先将M文件按照与MATCOM的cpp库的对应关系翻译为cpp源代码,然后用对应版本的C编译器将cpp文件编译成相应的 exe或dll文件,所以第一次运行要指定C编译器的路径,否则无法编译,指定好的编译信息就写在MATCOM\bin\matcom.ini文件中,不过这一步在安装MATCOM时,它自动寻找编译器并将其写入matcom.ini文件中,MAT-COM4.5版中使用TeeChart3.0.OCX控件,因而它支持图形操作。
我们依然用上述的testwin.m文件,不要将图形函数注释掉,利用Mideva来生成可被VC调用的信号处理程序。
(1)运行Mideva在主界面上直打开M文件,在菜单中选择compiletodll,输入testwin.在matcomdebug目录下可以找到这样的几个文件:testwin.c,testwin.h,testwin.cpp,estwin.lib,testwin.dll,testwin.exp等;(2)将上述testwin.cpp和testwin.h加入工程中,project/addtoproject/files并且在相应的文件中加入"stdafx.h";(3)加连接库:Tools\option\directory\,选include选项,加入d:\MATCOM45 \lib(包含MATCOM.h)library选项,加入d:\MAT-COM45\lib;(4)选择project\addtoproject在 files文件类型选项选(。lib)将d:\MATCOM45\lib\v4501.lib加入工程中编译运行。
可见利用MATCOM进行 M文件转换非常容易,生成的代码可读性很好,以上的转换同时生成了可供VC调用的动态连接库,其使用和一般的动态库一样使用。同时需指明MATCOM不仅可转换独立的不依赖于其它M文件的M文件,同时可转换调用其它M文件的M文件嵌套。条件是这些M文件要在同一个目录下面。
3 切削颤振趋势预报软件的基本功能
HMM切削颤振预报软件混合Matlab和C 语言编写而成。
它能完成数据可视化处理,FFT变换以及HMM的训练,机床切削状态监控等基本功能。
3.1 HMM颤振预报软件工作流程
程序流程图。监控工作开始时,程序前台将采集到的实时信号波形显示,而后台的HMM工作线程对数据进行滤波,FFT变换,特征特取获得特征向量,将该特征向量作为观测值O,然后将O带入到在离线状态下已经训练好的各态HMM模型λi(i=1,2,3,分别代表稳定切削,过渡切削和颤振切削三种切削状态)中分别进行计算得到观察概率P(O|λi),其中最大的P(O|λi)第6期胡耀斌等:基于隐Markov的机床切削颤振趋势预报软件的开发研究 166对应的状态即代表了当前的切削装态。如果颤振将要发生,即对应的颤振过渡切削状态出现时,发出预报信号。达到切削颤振预报目的。
3.2 HMM颤振预报主程序界面
HMM颤振预报主程序界面。开始工作前,首先进行采集设置,其中包括采集信道数选择,双缓冲或DMA选择,信号的输入极性,采样频率,采集点数,数据保存,电荷放大器输出倍率,切削力范围,加速度范围以及屏幕显示等方面的设置。由于本试验有三个方向的切削力信号和一个加速度信号,所以选择了前四个信道。同时,考虑到采样频率不算太高,没有选用DMA方式。
3.3 FFT分析功能
它主要完成当前数据的特征提取功能。他通过对采集到的原始数据进行FFT.找到特定频率点对应的幅值,经过量化后形成当前的特征矢量。"原始频率"显示的是该原始数据当时采集的频率。"分析点数"设定了快速傅立叶变换的点数,一般为2n,(n=1,2,…)右边的旋钮可以快速设定其大小。"抽样频率"可以设定当前分析频率,它通过对原始数据然不同间隔抽样达到目的。"信号类型"指定了当前分析的是加速度信号或某个切削力方向的信号。"显示方式"设定了结果是按原分析值显示还是按Llyods方式进行量化编码后显示。通过两者可以切换比较。本文的信号特征向量都是整数,所以在实际分析时,选择了量化编码。FFT分析的工作界面。
3.4 HMM滤波功能
HMM滤波器主要是通过中的Viterbi算法进行的,在滤波之前要通过Baum-Welch算法进行模型训练,以准确获得该序列模式下的特性,进而用Viterbi准确滤波。,是其效果图。
3.5 辅助工具
本软件设定了一些辅助功能,数据转换功能软件可以将采集到的二进制文件转换成文本文件,工作界面。
信号发生器可以产生正弦波,锯齿波,方波以及白噪声等常用信号,这些信号用于验证HMM滤波功能。信号发生器效果图。
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,不为其版权负责。如果您发现网站上所用视频、图片、文字如涉及作品版权问题,请第一时间告知,我们将根据您提供的证明材料确认版权并按国家标准支付稿酬或立即删除内容,以保证您的权益!联系电话:010-58612588 或 Email:editor@blueai.net.cn。
- 暂无反馈