Aqua-Sim-NG multichannel MAC implementation
Multichannel MAC implementation
- new
aqua-sim-mac-multichannel
module:
Modified TxProcess
and RecvProcess
methods of the AquaSimMac
base class. Added channel division on N number of subchannels, depending on given bandwidth. By default, the following bandwidth is used and the following subchannels are created:
- bandwidth: 10 - 40 kHz
- step frequency: 3 kHz
- N of subchannels: 10
The following channel_id:frequency
map is generated:
<channel_1 : 10 kHz>, <channel_2 : 13 kHz>, …, <channel_10 : 37 kHz>
- modified
aqua-sim-phy-cmn
module:
Modified recv()
method of AquaSimPhyCmn
class, which is used for both transmission and reception of the scheduled packet. The modified recv()
method has a new argument - frequency, and is executed by upper multichannel-mac module, depending on the selected channel_id.
- modified
aqua-sim-channel
module:
Modified SendUp()
method of AquaSimChannel
class. Now this method gets a frequency value of the incoming packet, using AquaSimPacketStamp
class and inserts it into the ::Recv()
method of the AquaSimPhyCmn
upon execution in the Scheduler.
Initial tests
For the initial tests the following simulation scenario was used:
“node_1 (sender)” <— 10m distance —> “node_2 (sink)”
The following stack was used on both nodes: - OnOffApplication — OffTime: 0, OnTime: 1 - Routing — Dummy (for MAC layer testing) - MultichannelMac — default bandwidth (10 - 40 kHz), 10 subchannels, 3kHz frequency step - PhyCmn — modified PhyCmn module
Some other parameters: - Simulation time: 10 seconds - Transmission range: 100 meters (for Phy module) - Distance: 10 meters (Mobility model)
In all tests a throughput was measured by defining an application data rate, higher than possible capacity of the given channel:
80 kbps dataRate
parameter of OnOffApplication
. Thus, the throughput was measured by counting a total amount of received packets:
throughput = total_received_packets * packet_size * 8 / 10, [bps]
where: 10 - simulation time, seconds.
1-st test
A single channel was used during entire simulation. - channel_id: 1, frequency: 10 kHz.
The throughput was measured, depending on varying packet length. The result is plotted on Fig.1.
Corresponding sent/received packet count is illustrated on Fig.2.
2-nd test
During the simulation, various channels were used in the following “round-robin” way:
- 1_packet: channel_1 (10kHz)
- 2_packet: channel_2 (13kHz)
- 3_packet: channel_3 (16kHz)
- 4_packet: channel_4 (19kHz)
- 5_packet: channel_5 (22kHz)
- 6_packet: channel_6 (25kHz)
- 7_packet: channel_7 (28kHz)
- 8_packet: channel_8 (31kHz)
- 9_packet: channel_9 (34kHz)
- 10_packet: channel_11 (37kHz)
- 11_packet: channel_1 (10kHz)
- …. etc.
The throughput is plotted on Fig.3.
Corresponding sent/received packet count is illustrated on Fig.4.
Code of simulation script can be found here: