【问题标题】:Simulink: How can I use object instances from workspace in an embedded matlab function?Simulink:如何在嵌入式 matlab 函数中使用工作区中的对象实例?
【发布时间】:2011-04-12 13:41:51
【问题描述】:

在这种情况下,我的基础工作区中有一个神经网络 (NN) 实例,我希望在 Simulink 仿真中使用它。我将 NN 的使用封装在嵌入式 Matlab 函数中,并带有网络应该使用的输入参数。

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

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

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

这是我使用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 函数块,它看起来像上面的任何示例。

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

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

    【讨论】:

    • 我尝试使用From Workspace,但它似乎只支持双精度的标量或矢量数据。
    【解决方案2】:

    为神经网络仿真生成 Simulink 模块 句法 gensim(net,st) 获得帮助 输入帮助网络/gensim。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2014-12-02
      相关资源
      最近更新 更多