Experiment 4: Shadowing and Interference

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.

../../../_images/experiment41.png

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:

  • If the wall length is zero, all transmissions interfere with each other, but all nodes also can detect the other’s transmissions. Hence, frame errors due to low Signal to Noise plus Interference Ratio (SINR) occur only if the same backoff value is selected by the APs, which has a relatively low probability.
  • If the wall length is greater than 5m, but less than 15m, the APs cannot detect each other’s transmissions, but both will create interference at the STAs. Therefore, the transmissions chance for low SINR and thus high packet error rates is high. This is a typical case of the hidden node scenario.
  • If the wall is longer than 15m, but less than 25m, it will block the interference from the APs. Nevertheless, the transmission of an ACK by a STAs will interfere with a potentially simultaneous transmission to the other STA, and thus lower the SINR and create frame errors.
  • Finally, if the wall is longer than 25m, the two links are totally separated from each other.

For the simulation of the those cases, please generate a new sub-campaign as done in experiment 3.

Creating a Wall

Walls are created in two steps:

  1. 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
    #####################
    
  2. 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.

Experiments

For the experiments, the config.py of experiment 3 can be used and changed according to the following steps:

  1. 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.

  2. 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]:
    
  3. The virtual path selection server requires as input the number of nodes; here, it is four.

  4. 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.

  1. Evaluate the saturation throughput for a wall length of 0.0, 10.0 and 20.0 meters.
  2. Add a new parameter of type String to evaluate the difference of the two rate adaptation strategies Opportunistic and ConstantLow.