Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 从文件加载Simulink查找表的数据

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

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

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

是否存在另一种方式(也许使用Matlab)将数据从文件加载到模块集中?

对于一维表,我正在寻找类似于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元素用于表值。使用“ 从文件”块加载后,可以使用Demux块将长度为2*N的输出拆分为两个长度为N输出(即索引和表值)。然后可以将这两个数组用于Lookup Table Dynamic块的xdat和ydat输入,从而创建一个查找表,其索引和表值可以在模拟运行时从文件中更新。

回应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个元素的向量作为输出。



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:32


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.