« Earlier2 items total Later »

Serialization and deserialization of matlab data

To serialize any matlab data type create a file called mserialize.c and mdeserialize and fill it thus

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs,
                 const mxArray *prhs[])
{
   plhs[0] = (mxArray *) mxSerialize(prhs[0]);
}


#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs,
                 const mxArray *prhs[])
{
   plhs[0] = ( mxArray * ) mxDeserialize(mxGetData(prhs[0]), mxGetNumberOfElements(prhs[0]));
}


Note the above code uses unsupported matlab API so don't bug Mathworks tech support if it doesn't work or your matlab session crashes or your computer explodes :)

You use the functions thus

foo.a = 10

data = mserialize(foo)

bar = mdeserialize(data)




##################

Following from a post from CSSM by Dr Tristram J. Scott is another technique. I quote the whole post here

Related to this, I think, is the (also undocumented) save stdio command:

>> save stdio x


This sends x to stdout with a bit of header information, in much the same
format as the save command might have done. There is a corresponding load
command.

This allows you to use MATLAB in a pipe in the way which is implemented for the MATLAB engine under UNIX.

If you start a MATLAB engine using a tee you can see a bit of what goes on

#define MYMATLAB "tee /tmp/f1 | matlab -nojvm | tee /tmp/f2 -"
   if (!(ep = engOpen(MYMATLAB))) {
      syslog(LOG_ERR, "Can't start MATLAB engine.");
      syslog(LOG_ERR, "Exiting.");
      exit(EXIT_FAILURE);
   }


Send it a command such as x = rand(3), then use engGetVariable(ep, "x") to get MATLAB to send the variable through the pipe up to your C code, ready for mxGetPr() or whatever to use it. Examine the /tmp/f1 and /tmp/f2 files
to see the wrapper which the engine puts around all of your engEvalString() calls.

Input data using a mouse

Use ginput function:

 x=0;y=0;
 while ~isempty(x)
    [x1,y1]=ginput(1);
    plot([x x1],[y y1],'b.-');
    hold on
    x=x1;y=y1;
end

« Earlier2 items total Later »




Sponsored by

Sole Central

Your one stop shop for Birkenstock and Crocs shoes and sandles.