首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Simulink模型中获得信号维数

如何在Simulink模型中获得信号维数
EN

Stack Overflow用户
提问于 2013-10-04 08:29:43
回答 3查看 5.8K关注 0票数 3

我有个问题。

在仿真了simulink模型后,我需要使用MATLAB命令得到每一行的信号维数。

我通过以下方法获得行句柄

代码语言:javascript
复制
line_h = find_system(gcs, 'FindAll', 'on','SearchDepth', 1, 'Type', 'Line')

那我怎么才能从线手柄得到信号尺寸呢?

**当在格式菜单中选中“信号尺寸”时,->端口/信号在模拟后显示,一个模型的信号维数将显示在非标量线上。我需要用MATLAB命令得到它。

很抱歉我的英语技巧

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-04 12:54:33

如果find_system命令中有一组行句柄,则可以使用以下命令将块连接到信号。

代码语言:javascript
复制
hblkSrc = get_param(h(k),'SrcBlockHandle');

然后,您可以按照get_param(hblkSrc,'CompiledPortDimensions')的建议使用am304来获取维度。

票数 2
EN

Stack Overflow用户

发布于 2013-10-04 10:06:00

或者,您可以使用以下方法找到它们所来自的每个块的信号尺寸和信号宽度:

代码语言:javascript
复制
get_param(<block_path>,'CompiledPortDimensions')
get_param(<block_path>,'CompiledPortWidths')

<block_path>替换为每个感兴趣的块的适当块路径。在运行这些命令之前,必须对模型进行编译,但是由于您指示在运行模型之后执行此操作,所以这不会是一个问题。

票数 3
EN

Stack Overflow用户

发布于 2013-10-04 09:23:54

你可以用以下方法来解决这个问题。

  1. 启用所需信号的信号日志记录(属性)。例如,将名称设置为定制和signalone
  2. 如果实际上不想记录信号,请将Limit data points to last设置为1,以避免存储未使用的数据。
  3. 转到SImulink首选项并启用信号日志记录,默认输出名为logsout
  4. 在模拟之后,您将在工作区中得到一个dataset logsout

现在,按以下方式评估此数据集:

代码语言:javascript
复制
% returns data, if data limit is set to 1 it's a coloumn 
% vector with just the last value
data = logsout.get('signalone').Values.Data

现在你可以使用这个矢量的大小,你知道信号的维数。

代码语言:javascript
复制
[~,dim]=size(data)

或者是一行:

代码语言:javascript
复制
[~,dim]=size(logsout.get('signalone').Values.Data)

如果您有大量的信号,并且希望立即评估它们,请给出您的信号的方便输出名称,并使用一个循环来迭代包含所有信号名的字符串向量。

就像你说的,你想要“全部”的维度(你确定吗?)我认为,在每个信号属性中检查“启用信号日志”,并在Simulink首选项中做所有进一步的定义,这样做更方便,因为您有一个列表来管理所有信号。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19176680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档