matlab中如何处理实时数据,如何导入实时数据?

如题所述

第1个回答  2013-03-02
可以用C语言编写MEX dll 来实现。
对于M文件S-函数,在MATLAB环境下可以通过解释器直接执行,对于C文件或其它语言编写的S-函数,则需要先编译成可以在MATLAB内运行的二进制代码:动态链接库或者静态库,然后才能使用,这些经过编译的二进制文件即是所谓的MEX文件,在Windows系统下MEX文件后缀为dll
因此,用C语言编写的S-函数具有以下优点:
(1) 执行速度快。
(2) 实时代码生成。
(3) 包含已有的C代码。
(4) 能够访问操作系统接口。
(5) 可以编写设备驱动。追问

谢谢,如何写mex文件,可以介绍具体点么?谢谢

追答

来自http://baike.baidu.com/view/3836764.htm内容如下: MEX从字面上是MATLAB和Excutable 两个单词的缩写。  .MEX文件是一种可在matlab环境中调用的C(或fortran)语言衍生程序,MEX文件的后缀名按32位/64位分别为 .mexw32/.mexw64。MEX文件是由C或Fortran语言编写的源代码,经matlab编译器处理而生成的二进制文件。它是可以被matlab解释器自动装载并执行的动态链接程序,类似windows下的dll文件。MEX文件实现了一种其它语言与MATLAB的接口,通过MEX文件可以在MATLAB中像调用内嵌函数一样调用使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能提高MATLAB环境中数据处理的效率。1. MEX的编写mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件,所以写MEX程序其实就是写一个DLL程序。编写MEX程序的编辑器可以使用MATLAB的代码编辑器,也可使用自己的C++编辑器,如VS2008等。a. MEX文件格式#include "mex.h"void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){}四个参数分别用来输出和输入数据: nlhs 输出参数个数,plhs 输出参数指针 (nrhs和prhs是输入参数相关的)。注意: 对输出和输入参数的操作都是通过指针的方式进行的。b. 操作输入数据对输入数据进行操作,需要通过MEX函数mxGetPr 得到数据的指针地址。 mxGetM 和 mxGetN 得到矩阵数据的行和列 (返回整数)。对于实矩阵,我们可以定义 double *M; 来对实矩阵数据操作。如:double *M;int m,n;// 指针指向第一个参数的数据地址M = mxGetPr(prhs[0]);m = mxGetM(prhs[0]);n = mxGetN(prhs[0]);MATLAB矩阵数据的存储顺序是"从上到下,从左到右"的,这点和Fortran是一样的。也就是说对于MATLAB的m x n的矩阵A。 A(1,1) 就是 *M,A(2,1) 就是 *(M+1) ,以此类推,A(i,j) 就是 *(M + m*(j-1) + (i-1)).注意: MATLAB的指标从1开始,C的指标从0开始。c. 操作输出数据对于输出数据,需要首先用专门的mex函数分配内存空间,如:plhs[0] = mxCreateDoubleMatrix(m,n, mxREAL); //生成m x n 的实矩阵。同输入数据一样,要对输出数据操作,我们也需要一个指向数据的指针变量,如double *A;A = mxGetPr(plhs[0]);

本回答被提问者采纳
相似回答