模拟具有合理延迟和丢包的海量广播场景
Simulate a Massive Broadcasting Scenario with a Reasonable Delay and Packet Loss
我能够完成 Veins 中的基础教程。
在我的模拟中,12 辆汽车互相广播消息。我想计算与每条消息相关的延迟。我正在尝试通过以下方式实现它:
- 保存传输开始的时间并发送数据包
...
wsm->setDelayTime(simTime().dbl());
populateWSM(wsm);
sendDelayedDown(wsm, computeAsynchronousSendingTime(1, ChannelType::service));
...
- 在 Rx 端,计算延迟并保存
...
delayVector.record(simTime().dbl()-wsm->getDelayTime());
...
在下图中您可以看到延迟 w.r.t。节点[0]。有两件事让我困惑:
- 为什么延迟在秒级?我希望它在毫秒范围内。
- 为什么延迟会随着模拟时间的增加而增加?
更新
我发现由于12辆汽车同时广播,computeAsynchronousSendingTime(1, ChannelType::service)
将return后续汽车延迟更大。我可以使用 sendDown(wsm)
来规避这个问题。然而,在这种情况下,并不是所有的消息都被传递,因为汽车在传输时试图接收数据包。所以我想更新问题:如何模拟最真实的场景,合理的延迟和丢包?
如果有人遇到类似问题,computeAsynchronousSendingTime(1, ChannelType::service)
returns 应该发送消息的绝对模拟时间。不过,我们对延迟感兴趣。因此,必须 运行 sendDelayedDown(wsm, computeAsynchronousSendingTime(1, ChannelType::service) - simTime());
我能够完成 Veins 中的基础教程。
在我的模拟中,12 辆汽车互相广播消息。我想计算与每条消息相关的延迟。我正在尝试通过以下方式实现它:
- 保存传输开始的时间并发送数据包
...
wsm->setDelayTime(simTime().dbl());
populateWSM(wsm);
sendDelayedDown(wsm, computeAsynchronousSendingTime(1, ChannelType::service));
...
- 在 Rx 端,计算延迟并保存
...
delayVector.record(simTime().dbl()-wsm->getDelayTime());
...
在下图中您可以看到延迟 w.r.t。节点[0]。有两件事让我困惑:
- 为什么延迟在秒级?我希望它在毫秒范围内。
- 为什么延迟会随着模拟时间的增加而增加?
更新
我发现由于12辆汽车同时广播,computeAsynchronousSendingTime(1, ChannelType::service)
将return后续汽车延迟更大。我可以使用 sendDown(wsm)
来规避这个问题。然而,在这种情况下,并不是所有的消息都被传递,因为汽车在传输时试图接收数据包。所以我想更新问题:如何模拟最真实的场景,合理的延迟和丢包?
如果有人遇到类似问题,computeAsynchronousSendingTime(1, ChannelType::service)
returns 应该发送消息的绝对模拟时间。不过,我们对延迟感兴趣。因此,必须 运行 sendDelayedDown(wsm, computeAsynchronousSendingTime(1, ChannelType::service) - simTime());