0

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

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

这表明我在我的 Stateflow 图中进行了疏忽,并且在每一步都输出了数组。我宁愿保留最后一个二维数组,因为在模拟过程中我只需要它用于以后的计算(尽管我只对前半部分感兴趣)。

有没有一种简单的方法可以在前半部分仿真结束后使用 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,k)==0) ||...
            all(x_in(:,3,k)==0) ||...
            all(x_in(:,4,k)==0) ||...
            all(x_in(:,5,k)==0)
        x_out = x_in(:,:,k);
    else
        x_out = x_in(:,:,k);
    end
end

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

x_out = x_in(x_in~=0);

然后我把信号通过一个重塑块。重塑块

它没有给出预期的结果,这是错误消息。

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

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

4

0 回答 0