The fourth experiment increases the realism of the scenario by introducing shadowing, i.e. attenuation of the radio signal by objects. The scenario to be evaluated is shown in the following figure.
Scenario of experiment 4
The wall in the middle of the scenario shall have an attenuation of 100dB, so that it completely shields from radio waves. Depending on the length of the wall, different interference situations occur, under the assumption that traffic is 100% downlink from the APs to the STAs:
For the simulation of the those cases, please generate a new sub-campaign as done in experiment 3.
Walls are created in two steps:
A list of objects is created and enriched with the shadowing objects with a given size and attenuation:
# single wall from (0,5) to (wallLength,5)
objs = []
objs.append(rise.scenario.Shadowing.LineSegment(
openwns.geometry.Position(0.0, 5.0, 0.0),
openwns.geometry.Position(wallLength, 5.0, 0.0),
attenuation = dB(100)))
# End create scenario
#####################
Instead of using rise.scenario.Shadowing.No(), a different class of shadowing is used:
######################################
# Radio channel propagation parameters
myPathloss = rise.scenario.Pathloss.PyFunction(
validFrequencies = Interval(2000, 6000),
validDistances = Interval(2, 5000), #[m]
offset = dB(-27.552219),
freqFactor = 20,
distFactor = 35,
distanceUnit = "m", # only for the formula, not for validDistances
minPathloss = dB(42), # pathloss at 2m distance
outOfMinRange = rise.scenario.Pathloss.Constant("42 dB"),
outOfMaxRange = rise.scenario.Pathloss.Deny(),
scenarioWrap = False,
sizeX = sizeX,
sizeY = sizeY)
myShadowing = rise.scenario.Shadowing.Objects(obstructionList = objs)
myFastFading = rise.scenario.FastFading.No()
propagationConfig = rise.scenario.Propagation.Configuration(
pathloss = myPathloss,
shadowing = myShadowing,
fastFading = myFastFading)
# End radio channel propagation parameters
##########################################
That’s it.
For the experiments, the config.py of experiment 3 can be used and changed according to the following steps:
In the scenario, the two APs shall have different beacon start times to avoid unrealistic results from beacon collisions at the STAs. Beside the position, the remaining configuration shall be identical to the configuration in experiment 1. Therefore, similar to the third experiment, a specialised class MyAPTransceiver shall be used to create the AP configuration. The creation of the AP is therefore reduced to
apConfig = wifimac.support.Node(position = openwns.geometry.Position(5,yPos,0))
apConfig.transceivers.append(MyAPTransceiver(beaconDelay = 0.001+yPos*0.001))
ap = nc.createAP(idGen, managerPool, apConfig)
ap.logger.level = commonLoggerLevel
ap.dll.logger.level = dllLoggerLevel
WNS.simulationModel.nodes.append(ap)
apIDs.append(ap.id)
apAdrs.extend(ap.dll.addresses)
rang.dll.addAP(ap)
print "Created AP at (0,", yPos, "0,0) with id ", ap.id, " and addresses ", ap.dll.addresses
Write the necessary class MyAPTransceiver by copying the class MySTATranceiver and editing it respectively.
The creation of one AP and one STA can be done in a for loop, where only the y-coordinate changes:
# Create APs and Stations
for yPos in [0.0, 10.0]:
The virtual path selection server requires as input the number of nodes; here, it is four.
Next to simTime, offeredTraffic, packetSize and ulRatio, the parameter wallLength shall be used in the campaign.
To evaluate the saturation point with the binary search, a similar campaignConfiguration.py as in experiment 2 can be used, only with the difference that the cumulative traffic has to be divided by 2 to account for the two STAs.
Note
An example campaignConfiguration.py can be found in myOpenWNS/tests/system/wifimac-tests/PyConfig/experiment4. Additionally, an example config.py is also located there.