在我的模型中有一个实体生成器,一些属性function(out_attrName)
和一个实体接收器。如何获得每个实体的所有attrName
值的总和?我希望在它到达接收器之前得到每个实体的值并累积这个值。
我试图使用'累积总和'块但没有运气。该块需要输入的离散时间,因此我使用Discrete-Time Integrator。不能说我以正确的方式使用它:例如,如果总和的值是34和40,总和可以是12344而不是正确的74。
修改:
例:
考虑以下模型:10个实体进入服务器然后进入接收器
有2个Set attribute
块:
StartTime
的第一个(当前时间来自Clock,服务器之前)EndTime
的第二个(当前时间来自时钟,服务器之后)设置Attribute function
属性= ServiceTime
- EndTime
的{{1}}个阻止。
该模型非常简单,因此StartTime
属性始终等于10.我们可以在ServiceTime
上看到它。
我们有10个实体。在每个实体中都有一个属性Signal scope
== 10.现在我想得到所有实体的ServiceTime
属性的总和。 10 * 10 = 100。我该怎么做?
详细说明:
答案 0 :(得分:1)
经过一些研究后,我自己的答案对我有用 如果我错了,请评论这个答案。
我们需要一个累加器(一些存储器)来存储数据。所以我们需要使用MatLab工作空间。我们可以使用函数coder.extrinsic('evalin')
和coder.extrinsic('assignin')
来读取/写入值。
我们必须将所有实体的所有值都放在单个向量中。在这个操作之后,我们将在一个地方拥有数据并且可以做任何我们喜欢的事情。该向量将由工作空间“托管”。
在我的情况下,通过索引分配矢量元素很容易。因此每个实体都有一个ID(它是来自生成器的#d
值)。
最后,让我们将数据写入矢量。在开始模型之前,在Matlab中执行此代码:
someVar = zeros(1000,1)
在汇总前的Attribute function
块中保存数据:
out_EntityDuration = FinishTime - StartTime;
coder.extrinsic('evalin');
coder.extrinsic('assignin');
x = zeros(1000,1);
x = evalin('base', 'someVar');
x(Id+1) = out_EntityDuration;
assignin('base','someVar',x);
在此处查看有关读/写工作空间的更多信息http://www.mathworks.com/matlabcentral/newsreader/view_thread/263578
执行后,模型someVar
存储数据。现在我们可以找到总和或平均值。
答案 1 :(得分:0)
看起来您的SO问题是“如何使用Matlab获取接收器的传播延迟?”
这篇名为Determining Sample Propagation Delay through a Discrete System的 Matlab Newletter 文章讨论了在获取总延迟值时用于离散Simulink模型的方法。
根据该时事通讯,建议 “使用 Matlab 的输入和输出 功能之间的互相关,而不是使用< em>延迟的分析估计因为很难计算成最终值。