VC++中使用MATLAB7.01引擎

原创 2006年05月23日 14:38:00

部分源代码参考: http://matlab.diy.myrice.com/matlab_and_c.htm#vc_sig

使用的函数有:命令在 "engine.h"  具体在 /MATLAB701/extern/include

Engine *  engOpen(const  char *startcmd); // startcmd在windows中一般是NULL, 或者/0; 启动matlab命令窗口

int  engClose(Engine *ep);  //关闭matlab服务

int  engSetVisible(Engine *ep, bool newVal); //设置命令窗口可见与否, 可以修改默认设置

int  engGetVisible(Engine * ep, bool * bVal); //获取

mxArray *  engGetVariable(Engine *ep, const char * name); //name要获得的变量名称, ep 指针引擎

int  engPutVariable(Engine *ep, const char *var_name, const mxArray *ap); 把一个变量ap用特定名称var_name放入matlab工作空间中

int  engOutputBuffer(Engine *ep, char * Buffer, int buflen); buffer保存输出的字符串数组,buflen缓冲数组长度

Engine * engOpenSingleUse(const char * startcmd, void * reserved, int * retstatus); //startcmd启动字符串的可执行命令,resered 为NULL 保留以后使用. retstatus 返回状态 . 为单用户使用命令

int engEvalString(Engine *ep, const char *string); //string matlab可执行的命令

 

参考命令: (加载类库: libeng.lib libmx.lib )

头文件是 #include "engine.h"

 Engine *ep;
 mxArray *T=NULL, *result = NULL, *mFs = NULL, *mnfft = NULL;
 double datax[1024];
 char buffer[1024];

 for (int j=0; j< 1024; j++)
 {
  double samt = (double)(1.0/1024);
  datax[j] = sin(2.0 * 63.0 * samt * 3.1415926 + 1.15 *3.14159265);

}

 double *pPxx , *pFxx;
 
 if (!(ep = engOpen("/0")))
 {
  fprintf(stderr, "/n Can't start MATLAB engine/n ");
  exit(-1);
 }
 engSetVisible(ep, TRUE);
 
 double Fs[1] = {1024};
 double nfft[1] = {1024};
 T = mxCreateDoubleMatrix(1, 1024, mxREAL);
 mnfft = mxCreateDoubleMatrix(1, 1, mxREAL);
 mFs = mxCreateDoubleMatrix(1, 1,mxREAL);

 //mxSetName(T, "T");
 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));
 engPutVariable(ep,"T", T);
 engPutVariable(ep, "mnfft",mnfft);
 engPutVariable(ep,"mFs",mFs);

 engEvalString(ep, "[pxx,fo] = psd(T, mnfft, mFs);");
 engOutputBuffer(ep,buffer, 512);
 //result = engGetVariable(ep,"pxx");
 //pPxx = mxGetPr(result);
 //result = engGetVariable(ep, "fo");
 //pFxx =mxGetPr(result);

 engEvalString(ep, "plot(fo, 10*log10(pxx))");
 engEvalString(ep, "title('功率普分析');");
 engEvalString(ep,"xlabel('Hz');");
 engEvalString(ep,"ylabel('db');");


 //mxDestroyArray(T); //释放内存

 //mxDestroyArray(mFs);

 //mxDestroyArray(mnfft);

 //mxDestroyArray(result);

 //engEvalString(ep,"close;");

 //engClose(ep);

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【VC++技术杂谈004】使用微软TTS语音引擎实现文本朗读

本文主要介绍如何使用微软TTS语音引擎实现文本朗读,以及生成wav格式的声音文件。   1.语音引擎及语音库的安装   TTS(Text-To-Speech)是指文本语音的简称,即通...

VC++基于微软语音引擎开发语音识别总结

SAPI 目录 一、SAPI简介 二、安装SAPI SDK。 三、配置vc环境 四、语音合成的应用 1、首先要初始化语音接口: 2、获取/设置输出频率。 3、获取/设置播放...

matlab和VC++混合编程(mex方法)

第一节、用c编写mex程序[开篇] 用C编写mex程序     大家都知道,matlab是一种解释型的编程环境,也就是说,跟以前的basic一样,是读 一句执行一句的。这样做可以很方便的...

VC++和MATLAB的混合编程之神经网络工具箱

1.通过Matlab Engine方式   Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后...

VC++通过COM调用Matlab程序

实际上VC与matlab的接口实现方法有很多种,matcom只是其中一种,本文再介绍一种比较容易实现的方法:COM接口方法。COM(Compponent Object Model组件对象模型)是一项比...

VC++和Matlab混合编程

以下文章转载自http://www.cnblogs.com/mfryf/archive/2012/02/16/2354295.html 一、前言         Matlab是由Mathw...

VC++基于微软语音引擎开发语音识别总结

windows的语音识别不是太好, 因为新的程序总是需要训练,很麻烦;  不过可以用来读取文本内容发出声音,这样的开发到可以;     这段来自百度文库--------------------...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)