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

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形式。

时间: 2024-11-08 22:26:38

matlab代码到C++代码转化及使用全攻略的相关文章

Windows Socket五种I/O模型——代码全攻略(转)

Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误.但功能强大.为了解决这个问题,提出了进行I/O操作的一些I/O模型,下面介绍最常见的三种: Windows Socket五种I/O模型——代码全攻

VSCode插件开发全攻略(八)代码片段、设置、自定义欢迎页

更多文章请戳VSCode插件开发全攻略系列目录导航. 代码片段 代码片段,也叫snippets,相信大家都不陌生,就是输入一个很简单的单词然后一回车带出来很多代码.平时大家也可以直接在vscode中创建属于自己的snippets: 创建代码片段 那么如何在扩展中创建snippets呢? package.json文件新增如下: "contributes": { "snippets": [ { // 代码片段作用于那种语言 "language": &

(转载)Windows Socket五种I/O模型——代码全攻略

如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了选择(Select).异步选择(WSAAsyncSelect).事件选择(WSAEventSelect).重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型.每一种模型均适用于一种特定的应用场景.程序员应该对自己的应用需求非常明确,而且综合考虑到程序的扩展性和可移植性等因素,作出自己的选择. 我会以一个回应反射式服务器(与<Windows网络

Windows 7 蓝屏代码大全 &amp; 蓝屏全攻略

关于Windows 7.Vista等系统的蓝屏,之前软媒在Win7之家和Vista之家都有很多文章讨论过,但是都是筛选的常见的一些问题,今天这个文章是个大全,希望大家看着别头痛,文章收藏下来以后待查即可. 另外,推荐大家读下<Windows XP/Vista/Windows 7常见蓝屏故障分析>. 一.蓝屏含义 1.故障检查信息 ***STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x0000001,0x7E8B0EB4) KMODE_EXCEPTION_NOT_

MATLAB Coder从MATLAB生成C/C++代码步骤

MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码. 使用MATLAB Coder产生代码的3个步骤: 准备用于产生代码的MATLAB算法: 检查MATLAB代码的兼容性(有些matlab代码语句并不能生成c/c++代码): 产生最终使用的源代码或MEX. 利用MATLAB Coder生成c++代码,并在vs2013中验证: 一个简单的例子,两数相乘: 1.安装matlab2014a或者更新版本: 2.简单生成一个foo.m文件: function c =

nativefier(一行代码将任意网页转化为桌面应用)

刚刚在看前端九部的手册的时候,发现一个之前没有用过的骚东西,看上去还挺好用,我这个好奇心瞬间就窜的老高了,赶紧试一试,看看这个东西有没有必要收入我的胯下 结果实验完了之后, 必须必须要强行安利给你们 这个骚东西就是nativefier 一个能用一行代码将任意网页转化为桌面应用!!! 很舒服的知道啵!!! 打包速度很快!!! 使用非常简便!!! 还在一次一次的搜索常用的网站?还在一次次的从搜索历史中找常用的网站?没网的时候看网站凉凉?热一热吧各位看官,不如来试试nativefier,没网也能看(视

代码规范及代码复审

1.对代码规范的讨论 编写一个程序是否需要代码规范?本人以为,规范当然得有,但也必须合理. 为什么我们需要代码规范?代码规范就是规定代码中某些格式必须遵守一定条件,比如缩进.变量命名.注释等.当制定了合理的规范后,不仅代码本身会显得美观,而且每个人都很容易读懂,代码的可维护性也大大增强.举个例子,甲程序里使用的变量名有input_msg,output_msg,decipher,每个符号之间均加了空格,而乙程序里则是随意地使用a,b,c等无意义的字母作为变量名,而且多个函数里重复使用相同名称的局部

iOS开发——实用技术OC篇&amp;8行代码教你搞定导航控制器全屏滑动返回效果

8行代码教你搞定导航控制器全屏滑动返回效果 前言 此次文章,讲述的是导航控制器全屏滑动返回效果,而且代码量非常少,10行内搞定. 效果如图: 如果喜欢我的文章,可以关注我,也可以来小码哥,了解下我们的iOS培训课程.陆续还会有更新ing.... 一.自定义导航控制器 目的:以后需要使用全屏滑动返回功能,就使用自己定义的导航控制器. 二.分析导航控制器侧滑功能 效果:导航控制器默认自带了侧滑功能,当用户在界面的左边滑动的时候,就会有侧滑功能. 系统自带的侧滑效果: 分析: 1.导航控制器的view

Android 优化代码代码写作习惯代码规整

今天我想说说代码习惯: 刚开始学Android时相信很多新手都会有一个疑问,我们作为菜鸟除了技术上的不足到底哪点比不上大神呢?相信问这个问题的新手,肯定是一个不服输的人(不能叫愤青吧,我认 为愤青貌似是个贬义词)所以喜欢问问题,但是一些经验丰富的大神有的时候就会说自己百度,不行谷歌,这么简单的问题还问!这可能深深的伤害到我们菜鸟,但挺多时候是应 该我们自己动手找自己研究,其实作为菜鸟不是不喜欢动手自己找自己写,只是想有个捷径站在巨人的肩膀上,但是事实却不是这样的因为所有的问题要想记得更牢固,更清