MATLAB与VC++混合编程实现一维小波多尺度分解

引言

小波分析世纪80年代开始发展成熟起来的一个数学分支,其应用领域十分广泛,并逐步成为信号分析的又一有力工具。MATLAB 的小波工具箱为我们提供了小波多尺度分解函数,方便了我们对小波的使用。但是用它所编写的软件不能脱离MATLAB 编程环境在W indows 平台下直接运行,代码执行效率低下,运行时占较多的系统资源,不能达到某些用户的需求。

VC++是由美国Microsoft 公司开发的可视化C/C++集成编程环境,是目前功能最强大的软件开发工具之一。被广泛应用于Win32平台的基础应用程序的开发。它具有强大的图形界面编程能力且代码执行效率高,可生成脱离VC++环境而独立运行的应用程序。可是VC++在数值处理分析和算法工具等方面不如MATLAB 。

本文结合VC++和MATLAB 的各自优点,以VC++图形界面作为前台框架,MAT LAB 作为后台进行数值运算和数据可视化,利用组件对象模型(COM )技术作为媒介,实现了一维小波多尺度分解。

1、一维小波多尺度分解原理及其MATLAB 实现

1.1一维小波多尺度分解原理

对上诉分解结果中的近似序列再做一次分解,可得到

{}和{},以此类推,直到指定级数的多尺度小波分解为止,分解过程如图1示。图中s 为原始信号,cd1,ca1分别为分解后第1层的细节序列和近似序列,cd2,ca2分别为分解后第2层的细节序列和近似序列,以此类推。因为这种算法分解的数据结构是塔式结构,所以这种算法也常被称为塔式算法(Pyramid Algorithm

)。

1.2一维小波多尺度分解及重构的MATLAB 实现

MATLAB 小波工具箱提供了以下几个实现一维小波分解和重构的函数[3]:

[C,L]=WAVEDEC(X,N,’wname’),多尺度一维小波分解函数。其中C 为分解结构变量,L 为个分解结构以及原始信号长度变量,X 为原始信号,N 为分解层度,’wname’为小波类型。

X =WAVEREC(C,L,’wname’),多尺度一维小波重构函数。其中C ,L 为多尺度一维小波分解函数WAVEDEC 的计算结果。

D =DETCOEF(C,L,N),一维小波变换细节序列提取函数。其中C ,L 为多尺度一维小波分解函数WAVEDEC 的计算结果。’wname’为小波类型。

A =APPCOEF(C,L,’wname’,N),一维小波变换近似序列提取函数。其中C ,L 为多尺度一维小波分解函数WAVEDEC 的计算结果。

Y =WRCOEF(’type’,C,L,’wname’,N),一维小波系数单支重构函数。其中,当’type’=’a’时重构近似序列,当’type’=’d’时重构高频系数;C,L,’wname’,N含义同上。

Y =UPCOEF(’type’,S,’wname’,N),一维系数的直接小波重构函数。其中’type’,’wname’,N含义同上。S 为小波分解系数变量。

2、MATLAB 与VC++混合编程实现一维小波多尺度分解

2.1MATLAB 与VC++混合编程的实现方法

MATLAB 与VC++混合编程有下列几种方法[9]:

(1)利用MATLAB 引擎。该方法的优点是能支持所有的MATLAB 函数。缺点是:混合编程后的可执行程序脱离不了MATLAB 的运行环境;另外一方面在调用引擎之后是按照MATLAB 的执行方式进行的,由于MATLAB 是解释执行代码,运行速度很慢。

(2)利用MATLAB 自带的mcc 编译器。从MATLAB 的5.1版本开始,MATLAB 提供了自带的C++Complier─mcc ,该编译器不仅能够将MATLAB 的*.m 文件转换为C 或C++的源代码,还能产生完全脱离MATLAB 运行环境的独立的可执行程序。但是MA TLAB 本身的资料也说明该编译器如被用来建立独立的可执行程序,则不能够调用MATLA

B 工具箱中的函数。另外,利用它来转换的代码可读性不太好,且不支持图形函数,不常使用。

(3)利用Matcom 编译。用Matcom 进行转换非常简单、方便,生成的代码可读性很好,且在C 编译器编译后其代码的执行效率高。但是,这种方法也不能支持所有MAT LAB 工具箱函数。

(4)利用MATLAB COM Builder 。MATLAB 提供的COM 生成器(COM Builde r ),为实现MATLAB 独立应用程序增加了又一个新途径。她把MATLAB 开发的算法作成组件,这些组件作为独立的COM 对象,可以直接被其他支持COM 的语言如Visual C++、Visual Basic 所引用,可以生成不依赖于MATLAB 环境的独立程序,因此可获得最快的运行速度,不需进行代码转换,使得编程风格一致,可读性好。

笔者在比较几种方法优缺点的基础上,经大量实验后,确定采用第四种方法实现一维小波多尺度分解。

2.2基于COM 的MATLAB 与VC++混合编程实现一维小波多尺度分解

如前述,利用MATLAB 小波工具想提供的实现一维小波分解和重构的函数,并结合VC++与MATLAB 的各自优缺点,采用基于COM 技术的VC++与MATLAB 的混合编程的方法实现对探测信号突变点的定位。以下步骤得到的程序均已在VC6.0,MATLAB7. 01和Windows XP 环境下运行通过:

(1)在MATLAB 环境下编写所需M 函数文件gzqfenjie.m 、myplot.m 、mypro cess.m 、mysave.m ,并利用COMBuilder 工具创建COM 组件[1][2],再对生成的C OM 组件打包,以保持开发软件的可移植性。

(2)VC 中调用上述由MATLAB 产生组件,形成一个可脱离MATLAB 环境运行的可执行文件(*.exe),过程如下[1][2]:

○1建立一个名为COMwavelet 基于对话框的MFC(exe)工程。添加相应控件。现在需对Precompiled Headers 进行设置:工程→设置→C/C++→Y 分类中选择Precom piled Headers, 接着选择M 自动使用与补偿页眉, 在其中填写stdafx.h, 最后确定。

○2将上面在MATLAB 界面生成的Myproject_idl.h、Myproject_idl_i.c以及\extern\include下的mwcomtypes.h 和mwcomutil.h 文件拷贝到COMwavelet 工程目录下,再加入到VC 工程中:选择工程->添加工程->文件,选择刚才拷贝到COMwavelet 目录下的四个文件。此时发现工程中出现一个类Imyclass ,这就

是我们要操作的类。

○3在COMwaveletdlg.cpp 中添加如下的头文件。

#include"component_idl.h"

#include"mwcomtypes.h"

#include"mwcomutil.h"

#include"comdef.h" //用于CString 向VARIANT 数据类型的转换

○4为界面添加所需控件和相应代码,调试程序,最后形成可脱离MATLAB 环境运行的可执行文件(*.exe),界面如图2

示。

3、应用实例

小波分析是近年来兴起的一种新的数学分支,它在信噪分离、信号特征提取、信号频率分析、信号奇异性检测、故障诊断、BIT 虚警抑制以及语音信号处理等许多科学领域内获得了巨大的突破,得到广泛的应用。由于篇幅有限,现仅以信号奇异性检测为原理的汽轮发电机转子匝间短路故障检测为例说明VC 和MATLAB 混合编程实现一维小波多尺度分解的实用性,方便性。

3.1转子绕组匝间短路信号的检测原理

汽轮发电机转子绕组匝间短路是汽轮发电机常见的故障, 会造成发电机转子磁极间的电磁负荷不平衡、热不平衡,使轴系振动加大,严重时可造成机组的损坏。因此,对发电机转子绕组匝间短路故障进行检测具有重要意义。

目前,用转子动态下气隙线圈探测的方法来检测发电机转子线圈是否发生匝间短路故障是目前研究的热点,其原理是当转子绕组存在匝间短路时, 就会引起磁场的不对称, 破坏气隙磁场的正常分布, 同时故障所在槽的槽漏磁齿谐波也会相应发生变化。在定转子气隙中安装微分探测线圈, 其电势波形反映了发电机气隙磁通密度的变化, 通过对微分探测线圈上的电势采样数据进行分析和处理, 得到探测信号突变点,对故障槽进行定位。

3.2小波分析在实际检测的应用

小波分析方法是一种窗口大小(即窗口面积)固定但其形状可改变,时间窗和频率窗都可改变的时频局部化分析方法。这一方法克服了傅立叶变换不能对信号进行局部化分析的严重缺点,同时具有很强的特征提取功能。小波分析在时域、频域都具有良好的局部化性质,使其尤其适用于突变(奇异)信号的处理。

为了方便起见,并根据由微分探测线圈得到的探测信号特点,我们选取半个周期的探测信号进行分析。探测信号中每一个峰值表示发电机转子的一个槽,在确定故障槽前,我们对对每个槽进行编号。将该信号存放在文件名为data112904.dat 的数据文件中,利用上述笔者设计的一维小波多尺度分解界面对其进行分解和重构。操作过程如下:点击“Browse”导入数据文件data112904.dat ,选取与故障信号相适应的Daubechies 小波类中的d b10小波,在分解层数中选择1,点“开始”按钮对数据文件进行与故障信号相适应的db10小波进行1层分解和重构。采用检索小波高频分解系数的模极大值点的方法定位故障槽。结果如图4示,三个信号从上到下依次为半个周期的微分线圈探测信号(1~16槽)、该信号的低频重构和高频重构。观察高频重构信号确定故障槽为3槽。若需要保存需保存的项,只要在如图2示界面中钩选需要保存的项,点击“保存”

按钮即可。

4、结论

本文采用了基于COM 的MATLAB 与VC++混合编程方法实现对MATLAB 一维小波分解、系数提取以及信号重构函数的调用。并用实例说明如何在脱离MATLAB 运行环境的情况下,方便地运行该系统对一维信号进行小波多尺度分解与重构。实践证明,作为Ma thWorks 公司力推的混编工具,COM Builder 给VC 调用MATLAB 函数实现一维小波多才尺度分解带来了极大的便利,这种方法不仅实现了VC 的可视化界面与MATLAB 强大的数值分析和图形显示能力的有效结合,而且可以完全脱离MATLAB 环境运行,有效节省了系统资源,缩短了软件开发周期。

参考文献

[1]王晓春, 曹鸣, 罗永新. 基于COM 的VC 与MATLAB 的混合编程技术. 现代电子技术,2004年第19期总第186期:15-17.

[2]周灵. 基于COM 的VC 调用MATLAB 的方法及实现[J].中国科技信息.2006年第24期:131-133.

[3]MATLAB7.0在图像处理中的应用[M].北京:机械工业出版社,2005,289-290.

[4]高爱乃. 基于离散小波基尺度变换下交变语音信号边缘检测方法研究[J].国外电子测量技术. 2005年11月第24卷第11期:9-11.

[5]张涛, 永健, 禹兴华. 基于小波分析的BIT 虚警抑制方法研究[J].电子测量技术,2007第8期:44-47.

[6]汤红诚李著信. 小波变换在故障诊断中应用[J].仪器仪表学报, 2003年8月第24卷第4期增刊:407-409.

[7]陈小玄, 罗大庸, 单勇腾. 小波分析在转子绕组匝间短路故障诊断中的应用[J].2007年3月第11卷第2期:143-152.

[8]李建平. 小波分析与信号处理[M].重庆:重庆出版社,1997, 193-198.

[9]杨高波等. 精通MATLAB7.0混合编程[M].北京:电子工业出版社,2006,39-42

秦川

关注-0

粉丝-0

关注博主

(请您对文章做出评价) 上一篇:下一篇:

posted @2009-02-1421:50秦川阅读(582)评论(0)编辑收藏


相关文章

  • 软件测试性需求分析方法研究
  • 文章编号:1008-0570(2010)09-3-0097-02 软件时空 软件测试性需求分析方法研究 Research on Software Testability Requirement Analysis Method (北京航空航天大学) 周震震王轶辰 ZHOU Zhen-zhen WANG ...

  • 小波分析MATLAB实例
  • 到小波分析 1 背景 传统的信号理论,是建立在Fourier 分析基础上的,而Fourier 变换作为一种全局性的变化,其有一定的局限性.在实际应用中人们开始对Fourier 变换进行各种改进,小波分析由此产生了.小波分析是一种新兴的数学分支,它是泛函数.Fourier 分析.调和分析.数值分析的最 ...

  • 无约束非线性规划求解方法及其实现
  • 无约束非线性规划求解方法及其实现 作者:杨玲 指导老师:陈素根 摘要: 非线性规划是具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支.非线性规划属于最优化方法的一种,是线性规划的延伸.非线性规划研究一个n元实函数在一组灯饰或不等式的约束条件下的极值问题,且目标函数和约束条件至少有一个是 ...

  • 方向小波域的维纳滤波图像去噪算法
  • 第14卷第6期电光与控制 Vd.14 No.6 2007年12月 EI正CTRONIC¥oFrIc¥&C0prrROL Dec.2007 文章编号:1671-637X(2007)06-0026.03 用方向小波域的维纳滤波图像去噪算法 王贞俭"2.曲长文1,崔蕾1 (1.海军航空工 ...

  • 小波变换在数字图像处理中的应用
  • 小波变换在数字图像处理中的应用 通信1303 周颖 20133565 引言:小波变换(wavelet transform,WT )是一种新的变换分析方法,是20世纪80年代中期基于Y .Meyer .S.Mallat 等人的奠基性工作而迅速发展起来的一门新兴学科.与傅里叶变换相比,其继承和发展了短时 ...

  • 自学指南(初始版本)
  • 自学指南 西华大学电气信息学院 创新实验室 自学指南 版本:1.0 最后修改:2011年11月6日 自学指南 版本历史 版本 修改时间 备注 由08同学归纳的初始版本 实验室学习过程: 以下3个框图概括了创新实验室同学的自学3大阶段:电子线路基础--智能电子设计--专业方向培养. 自学指南 自学指南 ...

  • 基于Matlab的时间序列分析
  • 第29眷第12期 VoL29 计算机工程 ComputerEngineering 2003年7月 July2003 文献标识码l №i2 ・开发研究与设计技术・ 文章螭号:1000--3428(2003)12-_017m珈3 A 中啊分粪号t TP39 基于Matlab的时间序列分析和动态数据建模 ...

  • 中值滤波和均值滤波课程设计
  • 图像滤波增强方法研究 ........................................................................................ 错误!未定义书签. 摘要 ..................................... ...

  • MatLab实习心得体会
  • 我从中国石油大学(北京)来到大庆油田勘探开发研究院实习,刚刚来到这里时我内心充满了激动和喜悦,对这个有着辉煌成绩的科研单位充满了期待.到了这里没多久我就参加培训中心组织的入院教育,对研究院的辉煌过去有了更深刻的了解,那时我就下定决心在研究院好好实习,多学习一些现场经验,为以后的工作打下良好的基础. ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn