Simulink:使用多级总线信号执行数学运算
Posted
技术标签:
【中文标题】Simulink:使用多级总线信号执行数学运算【英文标题】:Simulink: Perform math operations with multilevel bus signals 【发布时间】:2016-03-07 18:55:37 【问题描述】:我正在寻找一种对多级总线信号求和的方法 在其层次结构中的最低级别 不会丢失总线信号结构。
MWE
例如,在下面的 MWE 中, 总线信号自动在最低电平求和, 但是,总线信号在通过 Add 块后丢失。
会产生一个矢量信号。
我会更喜欢一种产生的方法:
red + blue = purple
或者更具体地说:
red.[a b c].[1 2] + blue.[a b c].[1 2] --> purple.[a b c].[1 2]
在哪里
purple.b.3 = red.b.3 + blue.b.3
等等。
【问题讨论】:
【参考方案1】:据我所知,对总线信号进行数学运算的唯一可能性是使用 MATLAB Function 模块。请注意潜在的不良性能!
要使用 MATLAB Function 模块,首先生成一个匹配的总线对象,并确保将合并 a / b / c 的两个总线创建器分别分配给输出此总线对象。这样做你会收到一个错误,因为 1 和 2 不是有效的字段名称,我将它们更改为 x1 和 x2。
在下一步中创建一个 MATLAB Function Block。 Set the two inputs and one output to your previous defined bus object。粘贴以下代码:
function y = fcn(u, v)
%#codegen
y.a=innerplus(u.a,v.a);
y.b=innerplus(u.b,v.b);
y.c=innerplus(u.c,v.c);
end
function y=innerplus(u,v)
y.x1=u.x1+v.x1;
y.x2=u.x2+v.x1;
end
【讨论】:
这是一个有益的开始。我没有意识到总线结构可以在 Matlab 环境中解释为结构类型元素。您的示例特定于特定大小;我会在一个单独的问题中询问如何添加结构并提供下面的链接。 @kando:文档中有介绍 (mathworks.com/help/simulink/ug/…)。如果有任何不清楚的地方,请随时提出问题,但我认为这应该解释清楚。以上是关于Simulink:使用多级总线信号执行数学运算的主要内容,如果未能解决你的问题,请参考以下文章