- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
matlbVC混合编译例
笔记VC++调用matlab库编译案例要求对seg2地震数据文件进行滤波处理。滤波器自己用C\C++写太麻烦了,而且焚稿的专业对地物也不了解。。。。。借用现成库吧。起先,焚稿对之前的文件类进行了修改,这个例子中使用的接口大概是这样Class CSeg2File{………//文件读取BOOL ReadFile(CString filename);//文件生成BOOL WriteFile(CString filename);//获取数据int *get_data(int chan)………}Readfile 实现seg2文件参数、数据获取。WriteFile /////将seg2file 文件保存Get_data(int)获取第chan道数据的数据指针,参数不合法的话返回NULL。SDK使用VC++6.0(虽然库和标准落伍,但没有VS的诸多问题,个人对VS固有的偏见和定式。。。的确很多很多问题,假如不是用.NET平台上的东西的话,个人比较推荐QT5.0以上,封装干净、支持C++11标准、虽然WINDOWS下编译器是VS2010,但是同样是静态语言的SDK,人家的工具用起来起码不会死机(机子跑老滚全mod都不卡的。。。。),该死的Intelltrace!!。。。。。发点小感慨,不喜请忽略)。总之,界面先定这样了。因为实验用,F3,F4暂时没用。F1,F2的变量为float。功能是现在一个函数中之后加滤波,说白点就是求出滤波器那一列数组后,与原数据进行卷积。为了运行速度,尽量用源码实现。卷积,比较简单。startfilter函数(这里不给出了)生成数组。。。。。这个比较麻烦用现成的吧。源码为下void CSeg2File_131020_1Dlg::OnOk() {segfile = new CSeg2File;if (TRUE==segfile-ReadFile(m_fileopen)){//采样间隔T = segfile-Seg_Parament.Sample_Interval;//生成滤波文件getfilter(m_F1,m_F2,m_F3,m_F4,T,filter);//进行滤波int *data = NULL;for (int i=0;isegfile-Seg_Parament.WorkChanNum;i++){data = NULL;data = segfile-get_data(i);if (data!=NULL){startfilter(filter,data,segfile-Seg_Parament.SampleLength);}}//生成文件segfile-WriteFile(m_filesave);}delete segfile;}接下来就是这次总结关键点,matlab混合编译。具体教程这里有链接/nktblog/archive/2012/04/07/2435685.html博文对matlab混合编译、matlab数据编译后C++中数据结构等系列,比较全面,但是具体操作细节没有说明,对刚上手的人来说需要自己琢磨。先是生成文件能用的函数库原来是想用陷波滤波器,实验先用带阻滤波器凑合下。Firs.m文件function hn = firs(f1,f2)M = 30;wc = [f1,f2];hn = fir1(M,wc,stop);plot(hn);end把matlab的workspace转到firs.m的文件夹下,在控制台输入mcc -W cpplib:dlltest -T link:lib firs加不加firs.m在这个例子中无所谓。具体mcc的使用方式这里不再啰嗦(没配置好编译器的,mbuild –setup和 mex –setup先),个人感觉cpplib用的习惯。编译生成了些文件我们要用到的是.cpp,dll,.lib,.h,文件。把他们都放到C++项目中来,拷贝到项目文件夹内,并且将文件导入项目中。这里实验了两种不同方式,用源码进行编译和调用dll。第一种:源码编译不需要dll文件,将.cpp .h.lib导入,在用到matlab函数的文档前加入#include “….h”。第二种:调用动态链接库 dll不需要.cpp文件,其他几个文件导入。其他同上。配置项目第一步,配置SDK的环境。在tools(工具)/Optins(选项)/中。LIBraries(目录)或者Source里,记不清了。将include files 和 include lib 中添加matlab源码的路径。一般在/%matlab%/externs/lib 或include一类的地方,有源码(.cpp \.h)和库(.lib .dll)。想了解或者直接hack matlab源码的同学可以去看看。这个修改之后,以后的项目就不用再添加了。现在编译
文档评论(0)