Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我建立了一个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个元素的向量作为输出。 更多&回答... |
![]() |
![]() |