书签 分享 收藏 举报 版权申诉 / 110
上传文档赚钱

类型《基于MATLAB的小波分析应用》课件第13章.ppt

  • 上传人(卖家):momomo
  • 文档编号:7924498
  • 上传时间:2024-09-04
  • 格式:PPT
  • 页数:110
  • 大小:2.45MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《基于MATLAB的小波分析应用》课件第13章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    基于MATLAB的小波分析应用 基于 MATLAB 分析 应用 课件 13
    资源描述:

    1、第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱第第13章章 在在VC环境中使用环境中使用小波工具箱小波工具箱13.1 VC调用MATLAB引擎13.2 VC调用MATLAB的C/C+函数第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱13.1 VC调用调用MATLAB引擎引擎13.1.1 引擎库函数引擎库函数MATLAB提供的引擎库函数主要可以分为以下3类:启动和结束MATLAB进程。向MATLAB发送命令。向MATLAB发送数据或从MATLAB接收数据。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱引擎库函数的头文件名为engine.h,位于目录

    2、%matlab%externinclude下面,其中%matlab%表示MATLAB R2008的安装目录(下文若无特别说明,%matlab%均表示MATLAB R2008的安装目录)。引擎库函数的库文件名为libeng.lib,VC 6.0使用的库文件位于目录%matlab%externlibwin32microsoftmsvc60下面。引擎库函数的动态链接库文件名为libeng.dll,位于目录%matlab%binwin32下面。了解这几个文件的位置对将来在VC应用工程中进行目录设置很有用。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱下面简单介绍一下常用的引擎库函数,更

    3、加详尽的函数说明请参考MATLAB的帮助文档“C Engine Functions”,它位于“External Interfaces Reference”内容中。注意:所有的引擎库函数名称都有前缀“eng”。1.启动和关闭启动和关闭1)启动引擎:engOpenengOpen函数声明如下:第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱Engine*engOpen(const char*startcmd);该函数启动MATLAB进程,返回MATLAB引擎指针。参数startcmd必须设为NULL。该函数返回一个引擎句柄的指针,指向启动了的MATLAB进程。如果启动MATLAB引擎失

    4、败,则返回NULL。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱在进行其他所有的引擎函数之前必须调用engOpen函数,保存返回的引擎指针,以后所有的引擎函数调用都要使用该引擎指针。在调用engOpen函数后,应该立即检查返回的引擎指针是否有效,如果无效,则不能进行其他引擎函数的调用。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2)关闭引擎:engCloseengClose函数声明如下:int engClose(Engine*ep);该函数关闭已经打开的由引擎指针ep指向的MATLAB进程。函数成功返回0,失败返回1。在完成所有的引擎函数调用之后,记着调用该

    5、函数关闭已经打开的MATLAB进程,释放资源。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2.向向MATLAB发送命令发送命令可以通过engEvalString函数向MATLAB发送命令。engEvalString函数声明如下:int engEvalString(Engine*ep,const char*string);该函数向由引擎指针ep指向的MATLAB进程发送字符串string命令,让MATLAB执行。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱该函数使用较为频繁。字符串string必须是可执行的MATLAB命令,否则系统忽略该命令。该函数成功返回0

    6、,失败返回1,失败的原因可能是使用已经关闭了的MATLAB进程的引擎指针ep。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱3.向向MATLAB发送或接收数据发送或接收数据1)engPutVariable函数engPutVariable函数声明如下:int engPutVariable(Engine*ep,const char*var_name,const mxArray*array_ptr);该函数把变量写入MATLAB引擎的工作空间。参数ep是已经打开的MATLAB引擎指针;var_name为写入引擎工作空间的变量名称;array_ptr为要写入的内容的指针,其类型为mxA

    7、rray*,结构mxArray等效于MATLAB工作空间中的阵列,将在下一小节中讲解。结构mxArray的定义在文件matrix.h中。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱如果引擎工作空间中已经存在变量名称为var_name的变量,则用新变量代替已经存在的变量,否则创建新变量。函数成功返回0,失败返回1。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2)engGetVariable函数engGetVariable函数声明如下:mxArray*engGetVariable(Engine*ep,const char*var_name);该函数从MATLAB

    8、引擎工作空间复制一个变量。参数ep是已经打开的MATLAB引擎指针;var_name为引擎工作空间中的变量名称,是要复制的对象。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱如果engGetVariable函数调用成功,返回一个mxArray类型的指针,该指针指向一个新建的实例,所以当不用该变量时要记得调用mxDestroyArray函数释放其内容。如果engGetVariable失败,则返回空指针NULL,失败的原因都是由于指定的变量var_name不存在。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱4.其他函数其他函数1)engSetVisible函数en

    9、gSetVisible函数声明如下:int engSetVisible(Engine*ep,bool value);该函数显示或隐藏MATLAB窗口。参数ep是已经打开的MATLAB引擎指针;value是为MATLAB设定的可见性设置。当value值为true时,MATLAB窗口可见,当value值为false时,MATLAB窗口不可见。engSetVisible函数成功返回0,失败返回1。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱下面的代码打开MATLAB引擎,并隐藏MATLAB窗口。Engine*ep;ep=engOpen(NULL);engSetVisible(ep,

    10、true);第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2)engGetVisible函数engGetVisible函数声明如下:int engGetVisible(Engine*ep,bool*value);该函数判断MATLAB窗口当前是否可见。参数ep是已经打开的MATLAB引擎指针;value值为返回MATLAB当前的可见性属性。engGetVisible函数成功返回0,失败返回1。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱13.1.2 mx-函数函数在上一小节中,在engPutVariable函数和engGetVariable函数中已经接触到了m

    11、xArray数据结构。mxArray数据结构相当于MATLAB语言中的MATLAB阵列,它可以表示数量、向量、矩阵、字符串、单元和结构体等。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱在上一小节中介绍了可以使用engPutVariable函数和engGetVariable函数对mxArray进行读写。有时用户还希望对mxArray对象进行其他操作,比如创建、删除和修改等操作。MATLAB的C/C+函数库中定义了一系列函数来完成对mxArray对象的操作,通常把这簇函数称为mx-函数,这簇函数的定义在文件中matrix.h中。下面简单介绍这簇函数中的常用函数,关于这簇函数具体详

    12、尽的说明和用法请参阅MATLAB的帮助文档“C MX-Functions”,它位于“External Interfaces Reference”内容中。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱1.创建和删除创建和删除mxArray对象对象1)创建mxArray对象对每种类型mxArray对象,都分别由相应的函数来创建,这些函数的名称具有前缀“mxCreat”。例如创建一个二维的double类型的mxArray对象使用函数mxCreatDoubleMatrix,该函数的声明如下:第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱mxArray*mxCreateD

    13、oubleMatrix(int m,int n,mxComplexity ComplexFlag);其中,参数m为mxArray阵列的行数,n为mxArray阵列的列数,ComplexFlag的取值为mxREAL或mxCOMPLEX,分别表示阵列是实数阵列还是复数阵列。函数如果调用成功,则返回一个指向新创建的二维double类型的mxArray对象的指针,否则返回空指针NULL。表13-1给出了创建mxArray对象的常用函数。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱表表13-1 mxArray对象的创建函数对象的创建函数第第13章章 在在VC环境中使用小波工具箱环境中使

    14、用小波工具箱2)删除mxArray对象mxArray对象使用结束后要使用mxDestroyArray函数从内存中删除,以释放资源。mxDestroyArray函数的声明如下:void mxDestroyArray(mxArray*array_ptr);其中,array_ptr为要删除的mxArray对象指针。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱下面的代码显示了创建和删除mxArray对象的使用方法。mxArray*pdmx=mxCreateDoubleMatrix(3,3,mxREAL);/创建一个3*3矩阵/进行其他操作mxDestoryArray(pdmx);/删

    15、除矩阵 第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2.类型判断函数类型判断函数在对mxArray对象进行操作之前,常常要知道mxArray对象的类型,比如是实数矩阵还是复数矩阵等。MATLAB提供了一序列的函数来判断mxArray对象的类型,这类判断函数的名称都带有前缀“mxIs”,函数返回值为bool类型的变量,表明判断结果的真假。表13-2给出了这些判断函数的简要说明。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱表表13-2 类型判断函数类型判断函数第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱3.mxArray对象的维数对象的维数1)

    16、mxGetM函数mxGetM函数声明如下:int mxGetM(const mxArray*array_ptr);mxGetM函数用来得到阵列的行数。其中,array_ptr为指向矩阵阵列的指针,返回值即为阵列的行数。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2)mxGetN函数mxGetN函数声明如下:int mxGetN(const mxArray*array_ptr);mxGetN函数用来得到阵列的列数。其中,array_ptr为指向矩阵阵列的指针,返回值即为阵列的列数。注意:这两个函数的输入参数还可以是多维阵列对象的指针。第第13章章 在在VC环境中使用小波工具箱环

    17、境中使用小波工具箱3)mxGetNumberOfDimensions函数mxGetNumberOfDimensions函数声明如下:int mxGetNumberOfDimensions(const mxArray*array_ptr);mxGetNumberOfDimensions函数用来获得阵列的维数。其中,array_ptr为指向阵列的指针,返回值即为阵列的维数。mxGetNumberOfDimensions函数只能得到阵列的维数,而不能得到阵列各维的大小,如果要得到大小,可以使用mxGetDimensions函数。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱4)mxG

    18、etDimensions函数mxGetDimensions函数声明如下:const int*mxGetDimensions(const mxArray*array_ptr);mxGetDimensions函数得到阵列各维的元素个数。其中,array_ptr为指向阵列的指针,返回值为一个整数数组,各维的元素个数保存在这个数组中。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱5)mxSetM函数mxSetM函数声明如下:void mxSetM(mxArray*array_ptr,int m);mxSetM函数设定阵列的行数。其中,array_ptr为指向矩阵阵列的指针,m指定阵列的

    19、行数。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱6)mxSetN函数mxSetN函数声明如下:void mxSetN(mxArray*array_ptr,int n);mxSetN函数设定阵列的列数。其中,array_ptr为指向矩阵阵列的指针,n指定阵列的行数。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱4.mxArray对象访问函数对象访问函数MATLAB提供了很多函数来访问和操作mxArray对象,它们都是通过mxArray对象的指针来对对象数据进行读写的。这类函数名称都带有前缀“mxGet”或“mxSet”。表13-3列出了所有的mxGet-函数。

    20、表13-4列出了所有的mxSet-函数。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱表表13-3 mxGet-访问函数列表访问函数列表第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱表表13-4 mxSet-访问函数列表访问函数列表第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱5.其他函数其他函数mx-函数簇里还有几个函数上文没有提到,现列于表13-5中,以供参考。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱表表13-5 杂类函数列表杂类函数列表第第13章章 在在VC

    21、环境中使用小波工具箱环境中使用小波工具箱13.1.3 VC调用调用MATLAB引擎的设置引擎的设置要实现在VC集成环境中调用MATLAB引擎,完成需要的运算与绘图,要在VC集成环境中做一些设定。1.目录设置目录设置1)添加头文件目录第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱首先启动VC,选择菜单“Tools”“Options”,此时将弹出“Options”对话框,如图13.1所示;在Option对话框中,选择“Directories”属性页,确认“Show directories for”下拉列表框中选择的是“Include files”;然后在“Directories”中

    22、添加目录“%MATLAB%EXTERNINCLUDE”,其中%MATLAB%表示MATLAB R2008的安装目录,本电脑为“C:MATLABR2008”;最后点击“OK”按钮确认添加。注意,原来有三条目录在里面。只要点击最下面就可以输入目录添加了,也可以使用右边的按钮选择目录。添加了头文件目录的Options对话框如图13.1所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.1 在Options对话框中添加头文件目录第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2)添加库文件目录在Options对话框中,更改“Show directories for

    23、”下拉列表框中的选项,确保选中的是“Library files”;然后在“Directories”中添加目录“%MATLAB%EXTERNLIBWIN32 MICROSOFTMSVC60”,其中%MATLAB%表示MATLAB R2008的安装目录,本例中为“C:MATLAB R2008”;最后点击“OK”按钮确认添加,如图13.2所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.2 在Options对话框中添加库文件目录第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2.添加库文件添加库文件除了在Options对话框中进行目录设置以外,要顺利使用MAT

    24、LAB引擎函数,还要对工程指定引擎函数的库文件。在向工程中添加库文件之前,先要创建一个VC工程文件。首先创建一个名为EngDemo的基于对话框的VC工程,如图13.3所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.3 新建的VC工程:EngDemo第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱指定库文件有如下两种方法。方法一:使用工程设置对话框来添加库文件。在菜单中选择“Project”“Setting”命令,打开工程设置(Project Settings)对话框,在“Link”页面的“Object/library modules”编辑框中添加两个库

    25、文件:libeng.lib和libmx.lib。添加之后的对话框如图13.4所示。最后点击“OK”按钮确认库文件添加。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.4 在工程设置对话框中添加库文件第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱方法二:使用添加文件对话框添加库文件。(1)选择菜单中的“Project”“Add To Project”“Files”命令,将打开如图13.5所示的“Insert Files into Project”(添加文件)对话框。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.5 “Insert Fi

    26、les into Project”对话框第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱(2)在“Insert Files into Project”对话框中,在“文件类型”列表框中选择“Library Files(.lib)”,然后定位目录到%MATLAB%EXTERNLIBWIN32MICROSOFTMSVC60,选择libeng.lib库文件,单击“OK”按钮确认添加,如图13.6所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.6 向工程中添加libeng.lib库文件第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱(3)用同样的方

    27、法,把libmx.lib库文件也添加到工程文件中。添加了库文件的工程文件夹如图13.7所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.7 添加库文件之后的工程文件夹第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱以上介绍了两种添加库文件到VC工程中的方法。完成了以上目录路径设置并添加了库文件之后,就可以进行真正的VC调用MATLAB引擎编程了。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱13.1.4 实例:小波去噪图实例:小波去噪图在上一小节创建的EngDemo基础上,本节将使用VC调用MATLAB引擎来完成一个小波去噪的实例。该实例

    28、完成了图像噪声信号的去除。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱1.添加按钮添加按钮首先在EngDemo框体上添加一个按钮控件,更改说明(Caption)为“小波图像去噪演示”,并修改对话框的标题,对各个空间作适当的修改,此时的对话框框体设计图如图13.8所示。注意:对外观标题等的修改可以随意些,这不会影响程序的功能。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.8 EngDemo的框体设计图第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2.添加按钮响应函数添加按钮响应函数在“小波图像去噪演示”按钮上双击,VC集成环境就会自动生成

    29、该按钮的响应函数,并把光标定位到该响应函数的代码处,以便进行代码编辑。图13.9是VC所生成的该按钮的响应函数,由于没有改变按钮的默认ID(IDC_BUTTON1),所以生成的函数名为OnButton1。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱由图13.9可以看出,VC自动生成的按钮响应函数是个空函数,没有任何代码,有一行注释提示在此加入响应代码。下面就在这里加入代码以实现VC调用MATLAB引擎去处理图像噪声。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.9 自动生成的按钮响应函数第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱3.

    30、代码编辑代码编辑MATLAB中图像去噪的例子如图13.10所示。该例子首先加载sinsin图像信号,然后人为地加入噪声,对噪声图像信号进行小波分解,再进行去噪处理。该程序最后把噪声图像和去噪后的图像同时画出来,如图13.11所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.10 MATLAB例子第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.11 MATLAB中小波图像去噪例子的输出第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱要在VC中完成图13.10所示的MATLAB例子,只要根据m文件逐行地转化为VC的引擎调用即可。编辑完成

    31、的代码如图13.12所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.12 VC调用MATLAB引擎小波去噪的代码第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.12所示的代码有详尽的解释。注意:VC调用MATLAB引擎首先要调用engOpen函数打开MATLAB引擎,然后用engEvalString函数向MATLAB引擎发送命令,最后记得调用engClose函数关闭MATLAB引擎。在代码文件中还应包含引擎头文件,如图13.13所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.13 在代码文件中包含头文件“engine

    32、.h”第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱4.运行程序运行程序现在可以编译运行程序了,如果有编译连接错误,请仔细检查,可能是没包含头文件,或者没添加库文件,或者是没有设置路径目录,也有可能是输入错误。如果一切正常,编译连接后,运行程序,点击按钮,会看到MATLAB窗口和作图窗口一闪而过。如果要观察运行结果,可以把程序中关闭MATLAB引擎的那一行代码注释掉(如图13.12所示),这样运行结果就不会立即消失,结果如图13.14所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.14 VC调用MATLAB引擎演示小波去噪效果图第第13章章 在在VC

    33、环境中使用小波工具箱环境中使用小波工具箱如果程序编译连接都没有错误,也能正常运行了,但是出不来图13.14所示的结果,很可能是engEvalString函数中的MATLAB命令字符串有错误,需要仔细检查。也可从MATLAB引擎打开的MATLAB窗口中打开MATLAB工作空间查看MATLAB中的变量,以利于检查engEvalString函数中的MATLAB命令错误。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱13.2 VC调用调用MATLAB的的C/C+函数函数13.2.1 设置设置在使用VC调用MATLAB的C/C+函数之前需要在MATLAB命令窗口中对mbuild命令进行设

    34、置,以指定C/C+编译器。在运行“mbuild-setup”进行制定C/C+编译器之前要确保VC的环境变量已经注册到系统中去。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱1.注册注册VC环境变量环境变量在安装VC的时候会提示用户是否注册环境变量。如果当时没有注册VC环境变量,也可以此时注册VC环境变量。找到目录“%VC%VC98Bin”,其中%VC%为VC的安装目录,本书中设为“D:Program FilesMicrosoft Visual Studio”。在目录“%VC%VC98Bin”下面找到文件“VCVARS32.BAT”(如图13.15所示),这个文件是个批处理命令文

    35、件,在DOS窗口中运行它,或者在资源浏览器中双击它都可运行它,这样便注册了VC的环境变量 第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.15 注册VC环境变量的批处理文件VCVARS32.BAT第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2.编译器指定编译器指定注册了VC的环境变量以后,需要到MATLAB命令窗口中运行命令“mbuild-setup”,把VC的编译器指定给MATLAB。在MATLAB命令窗口中运行命令“mbuild-setup”后,会提示是否要指定已经安装了的编译器,直接回车选择默认选项,MATLAB会给出已经在本机上安装了的C/C+编

    36、译器,如图13.16所示。输入3后回车,选择VC6.0的编译器。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.16 指定编译器第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱此后,MATLAB还会提示用户确认选择,然后还会显示一些更新过程,确认后即可完成相应设置。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱13.2.2 实例:信号的小波分解与重构实例:信号的小波分解与重构VC调用MATLAB的重要目的就在于使用MATLAB强大的数值计算能力、矩阵运算能力和快速开发能力。本节将使用MATLAB来预先编写小波分解与重构的算法,然后用mcc命令

    37、(mcc命令自动会调用mbuild命令)把MATLAB语言的m文件转换为C/C+语言文件,这样就可以在VC程序中调用这些算法函数了。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱本例将在VC中调用两个小波函数:小波分解函数(wavedec)和小波重构函数(waverec)。它们都是MATLAB小波工具箱自带的函数,不需要用户自己进行编写,这就是用MATLAB进行算法开发的优势。用户所要做的就是把这两个函数转化为C/C+语言文件。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱1.编译编译m文件文件1)准备工作在“%MATLABR2008%work”目录中新建一个目

    38、录“WaveFun”,并把“wavedec.m”和“waverec.m”两个文件从MATLAB小波工具箱目录(%MATLAB%toolboxwaveletwavelet)拷贝一份到“WaveFun”目录下。切换MATLAB的工作路径为“%MATLABR2008%work WaveFun”。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2)创建C/C+共享库在MATLAB命令窗口中键入命令“mcc-v-B csharedlib:libwavelet wavedec.m waverec.m”即可以把wavedec和waverec两个函数转换为C/C+共享库libwavelet.dl

    39、l文件,同时生成库文件libwavelet.lib、头文件libwavelet.h以及运行时文件libwavelet.ctf,请检查目录中是否生成了这几个文件,其他文件可以不管。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱有关mcc命令的使用方法请查看MATLAB帮助,其中参数“-v”显示详细信息,参数“-B csharedlib”是一个绑定的操作,其等效指令为“-W lib:-T link:lib”。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2.数据准备数据准备为了在VC中对信号数据leleccum进行小波分解与重构,首先需要将信号数据存盘到文件,然后在

    40、VC中打开文件读取信号数据,使用MATLAB来完成信号数据文件的准备。作为一个例子,这里只在VC中演示信号的小波重构。在MATLAB中把信号leleccum进行分解,并把分解信号存盘。文件PrepareDada.m完成这一工作。PrepareDada.m如图13.17所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.17 PrepareDada.m文件第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱检查当前目录中是否生成了数据文件C.dat。图13.17中有较为详细的注释,其中主要使用了两个函数wavedec和fwrite。关于fwrite的用法,请参看

    41、MATLAB的帮助文档。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱3.VC工程设置工程设置1)创建VC工程首先创建一个VC工程项目,此处创建的项目是基于对话框的,取名为WaveletDemo,位于目录G:privateVC_MATLAB下面。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱2)目录设置参考13.1.3小节VC调用MATLAB引擎的设置中的目录设置,把目录“%MATLAB%EXTERNINCLUDE添加到头文件目录列表中去,把目录“%MATLAB%EXTERNLIB WIN32MICROSOFTMSVC60”添加到库文件目录列表中去。如果目录列表

    42、中已经有了这两个目录,则可省去此步骤。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱3)添加工程文件首先把文件libwavelet.h、libwavelet.lib拷贝到VC工程目录下,把libwavelet.dll、libwavelet.ctf和leleccum.txt共3个文件拷贝到工程目录的Debug目录下。把数据文件C.dat也拷贝到工程目录的Debug目录下。参考13.1.3小节VC调用MATLAB引擎的设置中的添加库文件,把libwavelet.lib和%MATLABR2008%EXTERNLIBWIN32MICROSOFTMSVC60mclmcrrt.lib两个库

    43、文件添加到工程WaveletDemo中。把头文件libwavelet.h也添加到工程中。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱4.VC编程编程1)VC编程步骤在VC中编程调用MATLAB编译生成的C/C+共享库有以下5个步骤。(1)调用mclInitalizeApplication函数,该函数设置了一个全局的MCR状态,并且构建MCR实例;(2)对于每个库,调用一次Initalize函数,为库创建一个MCR实例;(3)调用库中的函数进行数据处理(包括创建变量和删除变量);第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱(4)为每个库调用一次Terminat

    44、e函数,用于删除创建的MCR库实例;(5)调用mclTerminateApplication函数,释放与全局MCR状态相联系的资源。2)添加按钮在WaveletDemo框体上添加一个按钮控件,更改说明(Caption)为“信号的小波分解与重构演示”。并修改对话框的标题,以及对各个空间作适当的修改,此时的对话框框体设计图如图13.18所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.18 WaveletDemo的框体设计第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱3)包含头文件在WaveletDemoDlg.cpp文件中包含头文件libwavelet.

    45、h,如图13.19所示。文件libwavelet.h中已经包含了头文件mclmcr.h和matrix.h。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.19 在文件WaveletDemoDlg.cpp中包含头文件libwavelet.h第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱4)初始化在WaveletDemo的初始化函数OnInitDialog()中对MATLAB库进行初始化。初始化代码如图13.20所示。注意:图中的省略号表示略去了的代码。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.20 在OnInitDialog()函

    46、数加入初始化代码第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱5)注销在OnDestroy()函数中进行MATLAB库文件资源的释放。在程序退出时会自动调用OnDestroy函数,要生成OnDestroy函数,使用类向导(ClassWizard)的消息映射,如图13.21所示。OnDestroy由消息“ON_WM_DESTORY”驱动,ON_WM_DESTORY消息在程序退出时会自动发送。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱图13.21 使用类向导生成消息映射函数OnDestroy第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱在OnDe

    47、stroy函数中添加注销MATLAB库的代码,如图13.22所示。图13.22 注销代码第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱6)添加按钮响应函数在框体设计视图(如图13.18所示)中的“信号的小波分解与重构演示”按钮上双击,VC集成环境就会自动生成该按钮的响应函数。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱7)编辑按钮响应函数在按钮响应函数OnButton1()中,依次添加变量声明、变量初始化、装载信号C、对L赋值、调用小波函数mlfWaverec进行信号的重构、保存信号X和删除变量的代码。这部分的编程使用了部分mx-函数,可以参看13.1.2小节

    48、中mx-函数部分。OnButton1()函数的完整代码如下所示。第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱#define NN 100void CWaveletDemoDlg:OnButton1()/TODO:Add your control notification handler code here /变量声明 mxArray*C,*L,*n,*wavename,*X;double dXNN+1;FILE*stream;第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱/变量初始化 n=mxCreateDoubleScalar(3);wavename=mxC

    49、reateString(db1);C=mxCreateDoubleMatrix(NN+1,1,mxREAL);L=mxCreateDoubleMatrix(5,1,mxREAL);X=NULL;第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱/信号重构 /打开文件,装载信号C stream=fopen(G:privateVC_MATLABWaveletDemoDebugC.dat,rb);if(stream=NULL)AfxMessageBox(打开C.dat文件失败);return;第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱 fread(dX,sizeof(

    50、double),NN+1,stream);fclose(stream);memcpy(mxGetPr(C),dX,(NN+1)*sizeof(double);/对L赋值 dX0=13;dX1=13;dX2=25;dX3=50;dX4=100;memcpy(mxGetPr(L),dX,(5)*sizeof(double);/调用小波函数mlfWaverec进行信号的重构 mlfWaverec(1,&X,C,L,wavename);第第13章章 在在VC环境中使用小波工具箱环境中使用小波工具箱/保存信号X memcpy(dX,mxGetPr(X),NN*sizeof(double);stream=

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《基于MATLAB的小波分析应用》课件第13章.ppt
    链接地址:https://www.163wenku.com/p-7924498.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库