码迷,mamicode.com
首页 > 编程语言 > 详细

matlab代码到C++代码转化及使用全攻略

时间:2015-06-15 11:14:10      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:

1.在matlab中输入命令:

mbuild -setup 安装编译器。(注意点:选择计算机上已有的VC/VS编译器,并输入相应的路径)

2.在matlab中输入命令:

deploytool   进入该模式

3.按新建按钮,选择C++ Shared Library,进行工程的命名,并选择路径。然后Add Files,将要转换的M文件选择好。最后,build the project,编译该M文件。编译成功后,代码会生成在指定目录的distrib文件夹下。该文件夹下生成了一个dll文件,一个头文件和一个lib文件。(这里要注意的是matlab是分32位版本和64位版本的,用相应版本matlab按照这个流程走下来生成的是相应版本的dll文件和lib文件。所以,在vs中调用的时候要调整成相应的版本。比如用64位的matlab生成的dll和lib文件要在VS中的x64平台下运行,不然会产生Link error。要注意平台的统一,VS中有些控件,比如COMM控件只支持32位,这样为了统一使用,前面也要用32位的matlab)

4.将第3步生成的文件复制到VS工程中。

将matlab/extern下的include文件夹复制到VS的工程中,并在VC++目录的包含目录中添加进去。

将matlab/extern /lib/win64/microsoft下的libmat.lib,mclmcr.lib,mclmcrrt.lib复制到VS工程中,并在链接器/输入/附加依赖项中添加这几个库

5.在代码中调用dll。

(1)初始化库   mclInitializeApplication(NULL,0)

                      xxxInitialize()   xxx为第3步生成文件的名字

(2)对mwArray的操作

如matlab中一阶小波消噪函数wden(in1,in2,in3,in4,in5,in6);    

转化后变成这样:

extern LIB_wden_CPP_API void MW_CALL_CONV wden(int nargout, mwArray& xd, mwArray& cxd, mwArray& lxd, const mwArray& in1, const mwArray& in2, const mwArray& in3, const mwArray& in4, const mwArray& in5, const mwArray& in6); 

nargout ——— 输出变量的个数

xd —— 输出变量 消躁后的信号

cxd ——输出变量 xd的子小波

lxd —— 输出变量 xd的子小波

in1 —— 输入变量 原始信号

in2 —— 输入变量 阈值选择规则 可选模式:‘rigrsure‘,‘heursure‘,‘sqtwolog‘,‘minimaxi‘

in3 ——输入变量 软阈值或硬阈值  可选模式: ‘s’ or ‘h‘

in4 —— 输入变量 阈值尺度的改变  可选模式:‘one’,‘sln‘,‘mln‘

in5 —— 输入变量 小波变换的层数

in6 —— 输入变量 小波类型 如‘db10‘,‘sym8‘

例子:要实现XD_Filter = wden(XD,‘minimaxi’,‘s‘,‘mln‘,5,‘db10‘);的功能 。代码如下:

const int DataNum = 5500;        
char str1[9] = "minimaxi";
char str2[2] = "s";
char str3[4] = "mln";
int  str4 = 5;
char str5[5] = "db10";
mwArray Str1(str1);
mwArray Str2(str2);
mwArray Str3(str3);
mwArray Str4(str4);
mwArray Str5(str5);
mwArray XD(DataNum, 1, mxDOUBLE_CLASS);
mwArray XD_filter(DataNum, 1, mxDOUBLE_CLASS);
mwArray cxd(DataNum,1, mxDOUBLE_CLASS);
mwArray lxd(DataNum,1, mxDOUBLE_CLASS);
XD.SetData(in, DataNum);
wden(1, XD_filter, cxd, lxd, XD, Str1, Str2, Str3, Str4, Str5);
XD_filter.GetData(out, DataNum);


(3)为了以后方便使用可以进一步将该工程的类写成dll形式。

matlab代码到C++代码转化及使用全攻略

标签:

原文地址:http://blog.csdn.net/teibin/article/details/46500009

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!