基于 Omnet++ 信号的向量聚合结果

Aggregating results of vectors based on Omnet++ signals

我想使用基于 Omnet++ 信号的向量计算随时间变化的总体传递率?当有多个源只有一个接收器时,我如何实现它。

例如,假设我有 10 个移动节点向固定 AP 发送数据,传输率等于(received/sent 个数据包),但 AP 只知道接收到的数据包数量。

我声明了以下信号和统计数据:

美联社:

@signal[receivedBndl](type = "int");
@statistic[receivedBundle](title="ReceivedBundle";source=receivedBndl;record=count,mean,last,vector);

对于节点:

@signal[sentBndl](type = "int");
@statistic[sentBundle](title="SentBundle";source=sentBndl;record=count,mean,last,vector);

是否可以创建另一个@statistics 来计算这 2 个信号随时间变化的传递率?

谢谢,

这更像是一个网络范围的统计数据,而不是与单个节点相关的东西,因此您必须在顶级网络模块本身而不是实际节点上安装统计监听器。 OMNeT++ 信号在包含链上向上传播,因此发送到特定节点的任何信号也将被传递到包含网络模块。这使得可以在网络上安装统计信息并在那里(也)获得给定的信号。

为了实现这一点,我将重写代码以实际发出 sent/received cPacket 对象(而不是将它们计数为整数)。您仍然可以使用统计中的 count() 函数来统计数据包的数量。

AP:

@signal[receivedBndl](type = cPacket);

对于节点:

@signal[sentBndl](type = cPacket);

因为每个实际的 sent/received 数据包现在都被发送到它们的 sending/receiving 模块(以及它们之上的任何东西),您可以在顶级模块中安装一个统计信息并将它们组合成一个单一的统计信息:

@statistic[deliveryratio](source=count(receivedBndl)/count(sentBndl); record=last);

最后一行将在顶层模块上安装两个信号侦听器,统计信息将计算每次任何模块在网络中任何地方生成或接收数据包时的值。