VC调用MATLAB.

利用Matlab引擎
Matlab引擎采用客户和服务器计算方式,在运用中,Vc的C语言或C++语言的程序作为前端客户机,它向Matlab引擎传递命令和数据信息,并从Matlab引擎接收数据信息,它提供了下列几个函数: engOpen, engGetArray, engPutArray, engEvaString,

engOutputBuffer ,engClose与客户机进行交互。

下面例程是在Vc下建一个基于对话框的应用程序,在对话框中设置一个Button控件OnMatlabEngine.,在对话框 .cpp文件中加入”engine.h” 和“math.h” 头文件,下面给出部分程序清单。

Void CtestmatlabDlg::OnMatlabEngine(){

Engine *ep;

mxArray* T=NULL,*result=NULL,*mFs=NULL,*mnfft= NULL;

double datax[1024];

char buffer[1024];

for(int j=0;j<1024;j++)//注:如通过采集卡采集数据可将采集的数据放在datax[]数组中,此循环就不需要

{

double samt=(double)(1.0/1024);

datax[j]=sin(2.0*63.0*samt*3.1415926+1.15*3.1415926);

}

double *pPxx,*pFxx;

if(!(ep=engOpen(" \0"))){//打开Matlab引擎,建立与本地Matlab的连接

fprintf(stderr,"\n Can't start MATLAB engine\n");

exit(-1);

}

double Fs[1]={1024};//因为Matlab所有参与运算的参数都是矩阵的形式,因而下列几行将参数转变

double nfft[1]={1024};//成Matlab可接受的矩阵形式。

T=mxCreateDoubleMatrix(1,1024,mxREAL);

mnfft=mxCreateDoubleMatrix(1,1,mxREAL);

mFs=mxCreateDoubleMatrix(1,1,mxREAL);

mxSetName(T,"T");

mxSetName(mnfft,"mnfft");

mxSetName(mFs,"mFs");

memcpy((char*)mxGetPr(T),(char*)datax, 1024*sizeof(double));

memcpy((char*)mxGetPr(mnfft),(char*)nfft, sizeof(double));

memcpy((char*)mxGetPr(mFs),(char*)Fs,1*sizeof(double));

engPutArray(ep,T); //将转化的参数放入引擎中,此时可在Matlab command窗口下查看此参数

engPutArray(ep,mnfft);

engPutArray(ep,mFs);

engEvalString(ep,"[pxx,fo]=psd(T,mnfft,mFs);"); //利用引擎执行工具箱中文件

engOutputBuffer(ep,buffer,512); //如只想看显示图形,可将返回参数去掉,psd无返回参数缺省情况下会自动画图形

result=engGetArray(ep,"pxx");//取出引擎中的数据放在所指的区域中供后续处理

pPxx=mxGetPr(result);

result=engGetArray(ep,"fo");

pFxx=mxGetPr(result);

engEvalString(ep,"plot(fo,10*log10(pxx));");//利用引擎画图

engEvalString(ep,"title('功率谱分析');");

engEvalString(ep,"xlabel('Hz');");

engEvalString(ep,"ylable('db');");

mxDestroyArray(T); //释放内存

mxDestroyArray(mFs);

mxDestroyArray(mnfft);

mxDestroyArray(result);

engEvalString(ep,"close;");

engClose(ep);

}

上述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值