2017-02-07 53 views
0

我的模型中有一个2D矩阵/数组,如图所示。我需要能够随机索引/访问它并将其作为信号传递。我该怎么做呢?在Simulink中访问/索引数组

我无法使用来自文件块,因为我的嵌入式设计的存储空间被强制为双倍和太大。

它没有出现我可以使用从工作区块...因为这个数组在我的模型中定义为SoundArray。

这似乎应该是这么简单,但我无法弄清楚。我能想到的唯一方法就是在自定义C代码中......我不想这样做。

由于

Array Definition and Model At Bottom

回答

0

甲MATLAB函数块(以前EML块)可以拿起模型工作区的数据,如果它是在“参数” 范围和你在功能块定义一个参数输入。然后,您可以使用其他输入来控制随机访问,然后将所需位置作为Matlab功能块的信号输出返回。

function y = fcn(i,j,soundArray) 
y = soundArray(i,j); 

(凡soundArray被定义为参数,以及i和j是输入)

编辑: 或定义数据存储存储器(添加定义块)。然后为该内存放置一个数据存储读取块,该块将被路由到一个具有2维的选择器块,并为这两个维度“开始索引(端口)”。 我相信你可以使用模型工作区数据初始化数据存储内存,但我不认为模型工作区数据在模拟过程中是“实时的”。

+0

我的问题是,SoundArray是一个变量...不是一个常量。 Matlab: “参数” “常量,其值在MATLAB®工作区中定义,或者源自您在父级屏蔽子系统中定义和初始化的Simulink®块参数。 Stateflow数据对象必须与参数名称相同。“ – willworknow

+0

因此,为了我的理解, SoundArray也是Simulink上下文中的一个变量?即它在Simulink执行期间是否改变?如果没有,我认为参数解决方案的作品。否则,我怀疑数据存储是要走的路,但它必须首先被初始化。 – ErikP

+0

SoundArray [n 2]矩阵/变量在Simulink中定义(如上所示),但是用自定义C代码中的pread()进行初始化。我确实想要改变SoundArray的能力。这一切都将在Linux上运行,这会引发我可以使用的块和数据类型的问题。我从来没有使用数据存储,更不用说从自定义代码初始化一个。 – willworknow