【vc++精品源码栏目提醒】:网学会员为需要vc++精品源码的朋友们搜集整理了vc 编程技术600个大型项目源码(七) - 电子设计相关资料,希望对各位网友有所帮助!
MATLAB与VC混合编程实现一维小波多尺度分解 作者秦川 来源博客园 发布时间2009-02-14 21:50 阅读619 次 原文链接 收藏 引言 小波分析世纪80年代开始发展成熟起来的一个数学分支其应用领域十分广泛并逐步成为信号分析的又一有力工具。
MATLAB的小波工具箱为我们提供了小波多尺度分解函数方便了我们对小波的使用。
但是用它所编写的软件不能脱离MATLAB编程环境在Windows平台下直接运行代码执行效率低下运行时占较多的系统资源不能达到某些用户的需求。
VC是由美国Microsoft 公司开发的可视化C/C集成编程环境是目前功能最强大的软件开发工具之一。
被广泛应用于Win32平台的基础应用程序的开发。
它具有强大的图形界面编程能力且代码执行效率高可生成脱离VC环境而独立运行的应用程序。
可是VC在数值处理分析和算法工具等方面不如MATLAB。
本文结合VC和MATLAB 的各自优点以VC图形界面作为前台框架MATLAB作为后台进行数值运算和数据可视化利用组件对象模型COM技术作为媒介实现了一维小波多尺度分解。
1、一维小波多尺度分解原理及其MATLAB实现 1.1 一维小波多尺度分解原理 对上诉分解结果中的近似序列 再做一次分解可得到 和 以此类推直到指定级数的多尺度小波分解为止分解过程如图1示。
图中s为原始信号cd1ca1分别为分解后第1层的细节序列和近似序列cd2ca2分别为分解后第2层的细节序列和近似序列以此类推。
因为这种算法分解的数据结构是塔式结构所以这种算法也常被称为塔式算法Pyramid Algorithm。
1.2 一维小波多尺度分解及重构的MATLAB实现 MATLAB 小波工具箱提供了以下几个实现一维小波分解和重构的函数3 CL WAVEDECXN’wname’多尺度一维小波分解函数。
其中C为分解结构变量L为个分解结构以及原始信号长度变量X为原始信号N为分解层度’wname’为小波类型。
X WAVERECCL’wname’多尺度一维小波重构函数。
其中CL为多尺度一维小波分解函数WAVEDEC的计算结果。
D DETCOEFCLN一维小波变换细节序列提取函数。
其中CL为多尺度一维小波分解函数WAVEDEC的计算结果。
’wname’为小波类型。
A APPCOEFCL’wname’N一维小波变换近似序列提取函数。
其中CL为多尺度一维小波分解函数WAVEDEC的计算结果。
Y WRCOEF’type’CL’wname’N一维小波系数单支重构函数。
其中当’type’ ’a’时重构近似序列当’type’ ’d’时重构高频系数CL’wname’N含义同上。
Y UPCOEF’type’S’wname’N一维系数的直接小波重构函数。
其中’type’’wname’N含义同上。
S为小波分解系数变量。
2、MATLAB与VC混合编程实现一维小波多尺度分解 2.1 MATLAB与VC混合编程的实现方法 MATLAB与VC混合编程有下列几种方法9 1利用MATLAB引擎。
该方法的优点是能支持所有的MATLAB函数。
缺点是混合编程后的可执行程序脱离不了MATLAB的运行环境另外一方面在调用引擎之后是按照MATLAB的执行方式进行的由于MATLAB是解释执行代码运行速度很慢。
2利用MATLAB自带的mcc编译器。
从MATLAB的5.1版本开始MATLAB 提供了自带的CComplier—mcc该编译器不仅能够将MATLAB的m文件转换为C或C的源代码还能产生完全脱离MATLAB运行环境的独立的可执行程序。
但是MATLAB本身的资料也说明该编译器如被用来建立独立的可执行程序则不能够调用MATLAB工具箱中的函数。
另外利用它来转换的代码可读性不太好且不支持图形函数不常使用。
3利用Matcom编译。
用Matcom进行转换非常简单、方便生成的代码可读性很好且在C编译器编译后其代码的执行效率高。
但是这种方法也不能支持所有MATLAB工具箱函数。
4利用MATLAB COM Builder。
MATLAB提供的COM生成器COM Builder为实现MATLAB独立应用程序增加了又一个新途径。
她把MATLAB开发的算法作成组件这些组件作为独立的COM对象可以直接被其他支持COM的语言如Visual C、Visual Basic所引用可以生成不依赖于MATLAB环境的独立程序因此可获得最快的运行速度不需进行代码转换使得编程风格一致可读性好。
笔者在比较几种方法优缺点的基础上经大量实验后确定采用第四种方法实现一维小波多尺度分解。
2.2 基于COM的MATLAB与VC混合编程实现一维小波多尺度分解 如前述利用MATLAB小波工具想提供的实现一维小波分解和重构的函数并结合VC与MATLAB的各自优缺点采用基于COM技术的VC与MATLAB的混合编程的方法实现对探测信号突变点的定位。
以下步骤得到的程序均已在VC6.0MATLAB7.01和Windows XP环境下运行通过 1在MATLAB环境下编写所需M函数文件gzqfenjie.m、myplot.m、myprocess.m、mysave.m并利用COMBuilder工具创建COM组件1 2再对生成的COM组件打包以保持开发软件的可移植性。
2VC中调用上述由MATLAB产生组件形成一个可脱离MATLAB环境运行的可执行文件.exe过程如下1 2 ○1建立一个名为COMwavelet 基于对话框的MFCexe工程。
添加相应控件。
现在需对Precompiled Headers 进行设置: 工程→设置→C/C→Y分类中选择Precompiled Headers 接着选择M自动使用与补偿页眉 在其中填写stdafx.h 最后确定。
○2将上面在MATLAB界面生成的Myproject_idl.h、Myproject_idl_i.c以及ltMATLAB安装位置gtexterninclude 下的mwcomtypes.h和mwcomutil.h文件拷贝到COMwavelet工程目录下再加入到VC 工程中选择工程-gt添加工程-gt文件选择刚才拷贝到COMwavelet目录下的四个文件。
此时发现工程中出现一个类Imyclass这就是我们要操作的类。
○3在COMwaveletdlg.cpp中添加如下的头文件。
include quotcomponent_idl.hquot include quotmwcomtypes.hquot include quotmwcomutil.hquot include quotcomdef.hquot //用于CString 向VARIANT数据类型的转换 ○4为界面添加所需控件和相应代码调试程序最后形成可脱离MATLAB环境运行的可执行文件.exe界面如图2示。
3、应用实例 小波分析是近年来兴起的一种新的数学分支它在信噪分离、信号特征提取、信号频率分析、信号奇异性检测、故障诊断 、BIT虚警抑制以及语音信号处理等许多科学领域内获得了巨大的突破得到广泛的应用。
由于篇幅有限现仅以信号奇异性检测为原理的汽轮发电机转子匝间短路故障检测为例说明VC和MATLAB混合编程实现一维小波多尺度分解的实用性方便性。
3.1 转子绕组匝间短路信号的检测原理 汽轮发电机转子绕组匝间短路是汽轮发电机常见的故障会造成发电机转子磁极间的电磁负荷不平衡、热不平衡使轴系振动加大严重时可造成机组的损坏。
因此对发电机转子绕组匝间短路故障进行检测具有重要意义。
目前用转子动态下气隙线圈探测的方法来检测发电机转子线圈是否发生匝间短路故障是目前研究的热点其原理是当转子绕组存在匝间短路时就会引起磁场的不对称破坏气隙磁场的正常分布同时故障所在槽的槽漏磁齿谐波也会相应发生变化。
在定转子气隙中安装微分探测线圈其电势波形反映了发电机气隙磁通密度的变化通过对微分探测线圈上的电势采样数据进行分析和处理得到探测信号突变点对故障槽进行定位。
3.2 小波分析在实际检测的应用 小波分析方法是一种窗口大小即窗口面积固定但其形状可改变时间窗和频率窗都可改变的时频局部化分析方法。
这一方法克服了傅立叶变换不能对信号进行局部化分析的严重缺点同时具有很强的特征提取功能。
小波分析在时域、频域都具有良好的局部化性质使其尤其适用于突变奇异信号的处理。
为了方
上一篇:
过DNF驱动保护源代码详解
下一篇:
2010年审计局工作总体计划