我想使用基于Omnet ++信号的矢量计算时间函数的总传输率?当有多个源并且只有一个接收器时,我怎样才能实现它。
例如,假设我有10个移动节点将数据发送到固定AP,传输率等于(接收/发送的数据包),但AP只知道接收的数据包数量。
我宣布了以下信号和统计数据:
对于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,用这两个信号计算出时间函数的交付率?
谢谢,
答案 0 :(得分:2)
这更像是一个网络范围的统计信息,而不是与单个节点相关的内容,因此您必须在顶级网络模块本身而不是实际节点上安装统计信息侦听器。 OMNeT ++信号在包含链上向上传播,因此发送到特定节点的任何信号也将传递到包含网络模块。这使得可以在网络上安装统计数据并在那里获得给定的信号。
为了实现这一点,我会重写代码以实际发出已发送/接收的cPacket对象(而不是将它们作为整数计数)。您仍然可以使用统计信息中的count()函数计算数据包的数量。
对于AP:
@signal[receivedBndl](type = cPacket);
对于节点:
@signal[sentBndl](type = cPacket);
由于每个实际发送/接收的数据包现在都会发送到其发送/接收模块(以及它们之上的任何内容),您可以在顶级模块中安装统计信息并将它们合并为一个统计信息:
@statistic[deliveryratio](source=count(receivedBndl)/count(sentBndl); record=last);
最后一行将在顶级模块上安装两个信号侦听器,统计信息将在每个模块在网络中的任何位置生成或接收数据包时计算值。