Simulink:如何在嵌入式matlab函数中使用工作空间中的对象实例?

时间:2011-04-12 13:41:51

标签: matlab simulink

在这种情况下,我在我的基础工作区中有一个神经网络(NN)实例,我想在Simulink模拟中使用它。我在嵌入式Matlab函数中使用了NN,其输入参数应该由网络使用。

原则上我希望做这样的事情:

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

目标是从基础工作区(类net的一个实例)中获取network对象。

这就解决了我使用evalin从工作区读取变量的问题:

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!

这不能编译,因为看起来像simulink认为net是一个数组而net(...)是数组下标(实际错误消息:不支持订阅到mxArray)。

在我看来,Simulink需要对任何用于编译嵌入式matlab函数的对象进行完整定义,这是正确的吗?甚至有解决方案吗?我可以以某种方式使用Simulink.Signal来包装NN并将其作为参数添加到功能块中吗?

修改

我也尝试使用load从文件加载序列化的net对象。那也行不通。似乎是编译器认为smxArray的相同问题。

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

解决方案

我终于屈服了,去了matlab功能块,它看起来像上面的任何一个例子。

2 个答案:

答案 0 :(得分:1)

您可以将net参数定义为NN函数的输入,并使用From Workspace块将其添加到模型中。我不确定这是否适用于Embedded MATLAB function块,您可能需要切换到M Code块。

答案 1 :(得分:-2)

为神经网络模拟生成Simulink块 句法 gensim(净,ST) 获得帮助 输入help network / gensim。