繁体   English   中英

从文件加载Simulink查找表的数据

[英]Loading the data for a Simulink Lookup Table from a file

我已经建立了一个Matlab / Simulink模型,用于模拟水下机器人车辆的性能,该车辆使用声学来进行各种关键的导航和定位功能。

由于海洋的特征随季节性和地理位置而变化,我希望这些数据能够从ASCII数据文件(按行和列组织的空间分隔数据) 动态加载到模型中

Simulink有许多查找表块集,但它们似乎都没有直接提供“从文件读取”选项。 必须使用表格编辑器才会使模型朝错误的方向发展。

还有另一种方法,也许是使用Matlab,从文件中将数据加载到Blockset中?

对于一维表,我正在寻找类似于Matlab命令的东西

A = load(filename)
A(:,1)  % for the index
A(:,2)  % for the table values

AKE

如果我理解正确,听起来你想要一个具有索引和表值的查找表块 ,可以在模拟过程中动态更新。 我相信你可以使用From File块Demux块Lookup Table Dynamic块来做到这一点。 假设您有一个.mat文件,其中包含以下格式的数组:

[  time_1   time_2   time_3 ...;  %# Time stamps
 index1_1 index1_2 index1_3 ...;  %# Index 1 for all time stamps
 index2_1 index2_2 index2_3 ...;  %# Index 2 for all time stamps
 ...
 indexN_1 indexN_2 indexN_3 ...;  %# Index N for all time stamps
 value1_1 value1_2 value1_3 ...;  %# Table value 1 for all time stamps
 value2_1 value2_2 value2_3 ...;  %# Table value 2 for all time stamps
 ...
 valueN_1 valueN_2 valueN_3 ...]  %# Table value N for all time stamps

对于每列,有一个时间戳, N元素用于查找表索引, N元素用于表值。 一旦使用From File块加载,长度为2*N的输出可以使用Demux块分成两个长度为N输出(即索引和表值)。 然后,可以将这两个数组用于查找表动态块xdatydat输入,从而创建一个查找表,其索引和表值可以在模拟运行时从文件更新。

对AKE评论的回应......

时间戳存在于上面的数组中,因为我的印象是您想要将查找表数据更改为模拟时间的函数(例如,使用一组索引和表值0到10秒,然后是另一组持续10到20秒)。 如果要执行此操作,则需要指定更改数据的时间。

但是,如果您只想在模拟开始时从文件加载组表数据,那么.mat文件应该只需要一个时间戳为0的列A样本数据可以相应地轻松修改:

A = load(yourDataFile);  %# Load your data 
A = [0; A(:)];           %# Convert it to a column vector and add a time stamp
save(yourMatFile,'A');   %# Save A to a .mat file for the From File block

关于您对Demux块的关注,实际上您不需要指定N 您只需指定它将具有2个输出,因此它将输入分成两半。 例如,如果输入是10个元素的向量,并且您为块指定了两个输出,则将获得两个5元素向量作为输出。

表数据可以是MATLAB工作空间中的变量,您可以通过在运行模拟之前加载所需的任何文件来填充工作空间。 因此,在您的示例中,变量A可用作表数据。

在运行模拟之前编写一个启动脚本来填充工作区,在该脚本中,您可以从任何您喜欢的mat文件加载数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM