《基于COM组件的VB与MATLAB混合编程实现振动信号处理.pdf》由会员分享,可在线阅读,更多相关《基于COM组件的VB与MATLAB混合编程实现振动信号处理.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 23卷?第 1期2010年 2月山东科学SHANDONG SCI ENCEVo.l 23?No.1Feb.2010收稿日期:2009?11?08基金项目:国家 863计划项目(2006AA06Z207)资助作者简介:宋广东(1981?),男,助理研究员,工学硕士,主要从事矿震监测与信号分析处理方面的研究。E?mai:l guangdongsgd 文章编号:1002?4026(2010)01?0032?04基于 COM组件的 VB与 MATLAB混合编程实现振动信号处理宋广东,刘统玉,王?昌,霍佃恒,祁海峰(山东省科学院激光研究所,山东 济南 250014)摘要:在用传感器监测机械振动时,需
2、要同步显示监测信号的时域和频域特性,要求用户在采集卡自带简单例程的基础上进行采集软件二次开发。基于 COM 组件的 VB与 MATLAB混合编程,通过把 MATLAB中的 fft函数制作成可接收参数的、能与 VB通信的动态连接库(DLL),同时利用 VB开发信号采集软件并把采集到的信号以参数的形式传递给 DLL,可以实现振动信号时频转换。以同样的方法调用 MATLAB中的 filter、diff、quad等函数可以实现信号滤波、微分、积分变换等处理功能。该混合编程提供了一种简便、快速、高效地实现信号处理和相关数学运算的方法。本文以振动信号时频转换为例,介绍了借助 MATLAB自带的函数生成 D
3、LL并最终被 VB成功调用的详细过程。关键词:MATLAB;COM 组件;DLL;VB;fft中图分类号:TP311?文献标识码:ACOM ComponentsBased VB andMATLABM ixedProgramm ing to I mple mentV ibration Signal ProcessingSONG Guang?dong,LI U Tong?yu,WANG Chang,HUO Dian?heng,QIHai?feng(Institute of Laser,Shandong Academy of Sciences,Jinan 250014,China)Abstract:
4、Synchronization display of the ti me and frequency domain characteristics of a surveillancesignal requires a user to perfor m secondary development of the acquisition software when usingsensors to surveilm achine vibration.COM components based VB andMATLAB m ixed programm ingcan i mple ment ti m e?f
5、requency transfor m of a vibration signal by making aMATLAB function fft intoa dyna m ic link library(DLL)that can not only receive para m eters but also can communicate w ithVB and employing VB to develop a signal acquisition soft ware and to trans m it the collected signal tothe DLL as a parameter
6、.This approach can also be employed to i mple m ent such functionalities assignal filtering,differential and integral transform by calling MATLAB functions filter,diff andquad.The approach provides a si mple,fast and efficient approach to i mple m ent signal processingand other computations.This pap
7、er presents the detailed process of the approach,taking the ti me?frequency transfor m of a vibration signal as an example.Key words:MATLAB;COM componen;t DLL;VB;fft第 1期宋广东,等:基于 COM 组件的 VB与 MATLAB混合编程实现振动信号处理?MATLAB是美国 M ath Works公司开发的大型数学计算应用软件系统 1,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。MATLAB的基本数据
8、单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,所以用 MATLAB来解算问题要比用 C,FORTRAN等语言简捷得多。利用 MATLAB可以轻易实现振动信号的时频转换,但是采集卡驱动程序都不是用 MATLAB开发的。V isualBasic(简称 VB)在编写通用软件时是最快速、最简便的方法 2,大多数采集卡驱动程序包中都包含 VB写的例程,但是 VB的数值计算功能非常弱,若要自己动手写振动信号时频转换程序,就需要编写大量代码,程序的稳定性也难以保证。本文借助基于 COM组件的 VB与 MATLAB接口编程方法,轻易实现了振动信号时频转换问题。把高效、应用广泛的 VB和拥有强大数
9、值计算功能的 MATLAB有效结合起来,关键是解决 VB与MATLAB接口编程问题。1?VB与 MATLAB接口编程方法目前,比较成熟的 VB和 MATLAB接口编程方法有如下几种:(1)ActiveX技术(即 Automation Server技术)和动态数据交换(DDE)技术。这两种方法最大的缺点是不能脱离 MATLAB工作环境。(2)可执行文件技术。也就是将 MATLAB运算模块做成可执行文件形式,然后在 VB中进行调用。这种方法的缺点是需要单独开发可执行文件。(3)利用 M atrixVB。MatrixVB 是M ath Works 针对 VB提供的一个 MATLAB库,提供了一些专门
10、固定函数。M atrixVB虽然能方便实现 VB和MATLAB接口编程,但需要额外安装 M atrixVB,并且提供的函数有限。(4)COM 组件技术。它是利用MATLAB工具 MATLAB COM Builder将 M 文件转换成 DLL,然后在 VB 集成开发环境中直接调用该DLL 3-5。目前应用较多的是 COM 组件技术。冯旭等人 6利用 M athTools公司产品 M ideva生成可供 VB调用的DLL,但需要借助第三方软件。还有研究人员借助 Visual C+与 MATLAB的接口,使用 MATLAB6.0提供的编译插件 MATLAB Add?in在 VC+中转换为 C文件。将
11、 MATLAB的 M 程序文件编译为 DLL,VB在代码中调用生成的 DLL。他们使用的都是 MATLAB较低级的版本,对于目前应用广泛的 MATLAB R2007a及更高级版本的相关研究资料十分匮乏。2?基于 COM 组件的 VB与 MATLAB接口编程实现2.1?系统环境要求使用这种方法对系统的要求:(1)MATLAB R2007a;(2)MATLAB Builder for.NET;(3)M icrosoft V isualBasic 6.0;(4)M icrosoftV isual C+6.0;(5)M icrosoftW indow sXP Professional。2.2?M 文件
12、转化为 DLL第一次进行 M 文件转化为 DLL操作时,需要配置编译环境,在 MATLAB中,要输入mbuild?setup 命令进行配置,需要重新选择 M icrosoft Visual C+6.0编译器。在 MATLAB命令行()输入 deploytool命令;打开 Deployment Tool页面,选择工具栏第一项新建工程(Create a new deployment project),在弹出的 NewDeployment Project左边一栏选择 MATLAB Builder for.NET,在右边栏中选择 Generic COM Componen,t 在Na m e栏中输入工程
13、名称(本文中取为 fft),并为工程选择路径,注意工程保存路径中不能出现汉字,否则在后续生成时会出现错误,见图 1。在新页面中选择工具栏 Add F ile,为新建工程添加 M 文件,然后选择工具栏中的 Build the projec,t 生成DLL。生成的 DLL文件存放在 distrib文件夹中,同时生成了.ctf文件。若要在没有安装 MATLAB的机器上调用此 DLL,需要安装 MATLAB配置文件 MCRIstaller.exe,在生成 DLL前,要点击下面的 Settings.按钮,在工程设置页面中的 Packaging Settings中,选中 IncludeMATLAB Com
14、ponentRunti me(MCR)项。MATLAB打包将 DLL文件和 MATLAB运行库及注册工具一起打包为一个 exe文件,解压后的文件中包括:MCRIstaller.33山?东?科?学?2010年图 1?新建工程项目页面设置exe、MCRRegCOMComponen.t exe、ff.t ctf、fft_1_0.dll和 Instal.l bat。2.3?VB中调用 DLL在工程中添加 DLL。在 VB集成开发环境中选择工程菜单下的引用菜单项。弹出引用对话框后,点击浏览按钮,把上述生成的 DLL添加到可用的引用栏中,并勾选。在通用声明栏中声明一个COM组件变量,语法为:Public
15、myfftAs ff.t fftclass;然后在 For m_Load()模块中为变量实例化,语法为:Setmyfft=New ff.t fftclass。在具体的调用 COM 组件变量的模块中,要把整型或单精度型的时域信号数组转换为双精度型数组;还要定义一个 Variant变量,用以存放处理后返回的频域信号幅值。2.4?打包发行借助 VB自带的打包工具就可以完成程序打包。在没有安装 MATLAB的机器上调用 MATLAB生成的 DLL时,需要运行 MCRInstaller.exe,并对调用的 DLL进行注册。利用 W indows操作系统自带的 regsvr32.exe就能实现对 DLL
16、进行注册。只要在开始菜单下的运行项的文本框中输入 regsvr32 Path dll Na me即可注册成功,例如 C:fft_1_0.dll。注册成功后,客户程序就能使用了。否则将出现 Active控件不能创建对象的错误。同时还要注册用于阅读和编写脚本和文本文件的 scrrun.dll。3?VB调用 MATLAB生成的 DLL实现信号时频转换传感器接收,采集卡采集到的振动高频超声信号时域波形图见图 2。图 2?振动高频超声信号时域波形图对传感器采集到的时域信号,同步调用 MATLAB生成的实现傅立叶变换的 DLL,得到频域信号,在 VB中对频域信号做频率谱图。3.1?myff.t m文件的编
17、写myff.t m 文件主要是实现时域信号的傅里叶变换,并对变换后得到的复数数组分别求模。具体如下:function D=myfft(h)w=fft(h)D=abs(w)return傅立叶变换后得到的数组 w 是复数数组,对 w 进行求模运算得到的数组 D,一个频率点对应着一个模值。设这个点的模值为 m,采样点数为 N,34第 1期宋广东,等:基于 COM 组件的 VB与 MATLAB混合编程实现振动信号处理则:F=m*2/NF就是该频率值下的幅度特性。按前述步骤借助 MATLAB的 Deployment Tool把 myff.t m文件生成为 DLL,即 fft_1_0.dll。3.2?VB
18、程序实现依前所述,依次添加 DLL引用,定义 COM 变量组件,并实例化。在信号转换模块调用接口函数,语法为:Callmyff.t myfft(1,D,h)式中 1表示输出参数的个数为 1个,D为存放返回值的 variant变量数组,h为双精度型时域信号。假设时域信号数组大小为 1024,则返回值的格式为:D(1,1),D(1,2),D(1,3)?,D(1,1024)利用返回的频域数组 D,做频谱图。频谱图的纵坐标为计算得到的频率幅值即频域数组 D,共 1024个值;频谱图横坐标是频率值,假设采样频率为 Fs,横坐标分为 1024个点,每个点的频率依次增加。某点 n所表示的频率为:Fn=(n-
19、1)*Fs/1024。由于 fft结果是中心对称的,实际应用中只使用前半部分的结果,即小于采样频率一半的结果。因而信号频率的最大值为 Fs/2。最终生成的振动高频超声信号频谱图见图 3。图 3?振动高频超声信号频谱图4?结语本文论述的 VB调用 MATLAB生成的 DLL 方法,在 M icrosoftW indows2000系 统下 调 用 DLL 失 败,而 在M icrosoftW indowsXP系统及更高版本的操作系统下运行成功,因而当使用上述方法进行信号处理时必须保证系统是 M icrosoftW indows XP 或更高版本。通过 VB调用 MATLAB生成的 DLL实现振动信
20、号时频转换,在采集卡采集到振动时域信号并显示时,同步显示信号频谱图,可以在第一时间观察信号频率的变化,及时发现振动异常。若要实现信号数字滤波、信号积分和微分变换等功能,只需改变 M文件,并在 VB中根据不同的目的设计相应程序。M 文件生成 DLL及 VB调用 DLL的方法都和上述方法是一致的。因而可以避免自己动手写算法代码的繁琐劳动,节省了时间,程序的鲁棒性也有了巨大提升。参考文献:1王济,胡晓.MATLAB在振动信号处理中的应用 M.北京:中国水利水电出版社,2006.2 StevenHolzner.V isualBasic 6技术内幕 M.北京:机械工业出版社,1999.3徐军辉.M atrixVB 基于 M atlab与 VB的计算引擎 J.国外电子测量技术,2002,21(6):32-33.4欧阳明,李玉清,曾海霞,等.VB与 MATLAB混合编程在工程中的应用 J.电子技术(上海),2009(7):7-9.5李永松,艾凯,尹健民.基于 VB与 M atlab的 BP神经网络在地应力场分析中的应用 J.长江科学院院报,2009(6):24-27.6冯旭.在 VB开发环境中调用由 MATLAB函数转化的 DLL J.西北民族大学学报(自然科学版),2004,25(53):65-67.35