开发者

Simulink: How can I use object instances from workspace in an embedded matlab function?

开发者 https://www.devze.com 2023-02-24 19:39 出处:网络
In this case I have a neural network (NN) instance in my base workspace that I wish to use in a simulation with Simulink. I wrapped the use of the NN in an Embedded Matlab function with input argument

In this case I have a neural network (NN) instance in my base workspace that I wish to use in a simulation with Simulink. I wrapped the use of the NN in an Embedded Matlab function with input arguments that should be used in by the net.

In principal I wish to do something like this:

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
global net;
XBDDprime = net([F XB XBD XBDD]');

Where the goal is to fetch the net object from base workspace (which is an instance of the class network).

This a swing at the problem where I used evalin to read the variable from workspace:

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
eml.extrinsic('evalin');
net = evalin('base', 'net'); %Fetch net from workspace
XBDDprime = net([F XB XBD XBDD]'); %Error!

This doesn't compile because it seems like simulink thinks net is an array and net(...) is array subscripting (actual error message: Subscripting into an mxArray is not supported).

It seems to me like Simulink needs to have a full definition of any object used to be able to compile the embedded matlab function, is that correct? Is there even a solution? Can I 开发者_JS百科use Simulink.Signal somehow to wrap the NN and add that as an argument to the function block?

Edit

I tried using load as well to load the serialized net object from file. That didn't work either. Seems to be the same problem where the compiler thinks s is an mxArray.

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
eml.extrinsic('load')
s = load('net');
XBDDprime = s.net([F XB XBD XBDD]');

Solution

I finally caved and went for the matlab function block which can look like any of the examples above.


You could define the net parameter as an input of the NN function and use a From Workspace block to get it into your model. I'm not sure if this will work with an Embedded MATLAB function block, you might need to switch to an M Code block.


Generate Simulink block for neural network simulation Syntax gensim(net,st) To Get Help Type help network/gensim.

0

精彩评论

暂无评论...
验证码 换一张
取 消