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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章