Stateflow 的输出数组的大小不断增加,我只想从最后一个时间步获取数组

问题描述

我正在从 Simulink R2016a 中的 Stateflow 图生成一个信号,该信号将连接到实时机器和力传感器,但现在,我只是用正弦波进行调试。 Stateflow 中最终输出的信号大小是一个 6 x 5 的数组。但是,当我使用 To Workspace Simulink 模块将它发送到基础工作区时,一旦模拟完成,我就会得到一个更大的数组。具体来说,当我将它发送到一个二维数组时,它是一个 91056 x 5 的二维数组,大部分都是零。

出于好奇,我将其更改为将 2D 数组输出为 3D 数组,并且它是一个 6 x 5 x 15176 的数组,并且只有最后一个 2D 数组具有非零列。

这表明我在 Stateflow 图中做了一个疏忽,每一步都输出数组。我宁愿保留最后一个 2D 数组,因为在模拟期间我只需要它用于以后的计算(虽然我只对前半部分感兴趣)。

有没有一种简单的方法可以在模拟的前半部分结束后使用 Simulink 块只保留最后一个数组,以便在后半部分使用它,或者我是否需要开发一个聪明的 Matlab 用户定义功能块?

我尝试创建一个我认为可行的函数,但我没有任何减小大小的运气。事实上,x_inx_out 在模拟结束时的大小相同。

function x_out = fcn(x_in)

K = size(x_in,3);
x_out = zeros(6,5);
for k=1:K
    if all(x_in(:,1,k)==0) ||...
            all(x_in(:,2,3,4,5,k)==0)
        x_out = x_in(:,:,k);
    else
        x_out = x_in(:,k);
    end
end

附录 我只是尝试使用运行的更简单的 Matlab 功能

x_out = x_in(x_in~=0);

然后我将信号通过重塑块。

reshape block

它没有给出想要的结果,这是错误信息。

'x_out' 被推断为一个可变大小的矩阵,但它的大小被指定为继承的或固定的。验证 'x_out' 是根据非可调参数定义的,或选中 'Variable Size' 复选框并在 Size 框中指定上限。

我在调试代码时遇到了类似的错误,并且我已经设置了输出的大小。但是我在这里尝试这样做,代码仍然无法编译。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)