Search code examples
unetstack

How do I change the power level between two nodes?


How do I decrease the losses by increasing power level?

Here is the code I am using: https://github.com/maibewakoofhu/Unet

I am changing the power level using:

 phy[1].powerLevel = -20.dB;

At noise level 68dB, power level = -20dB all DatagramReq are sent successfully.

At noise level 70dB, power level = -20dB the DatagramReq fails.

Now, increasing the power level to as high as 125dB, still the DatagramReq fails.


Solution

  • I created a simpler version of your simulation to test the SNR and packet-loss relationship:

    import org.arl.fjage.RealTimePlatform
    import org.arl.unet.sim.channels.BasicAcousticChannel
    
    platform = RealTimePlatform
    
    channel = [
      model:                BasicAcousticChannel,
      carrierFrequency:     25.kHz,
      bandwidth:            4096.Hz,
      spreading:            2,
      temperature:          25.C,
      salinity:             35.ppt,
      noiseLevel:           73.dB,
      waterDepth:           1120.m
    ]
    
    simulate {
        node 'C', address: 31, location: [180.m, 0, -1000.m], web: 8101
        node 'A', address: 21, location: [0.m, 0.m, 0.m], web: 8102
    }
    

    The web: entries allows us to interact with each of the nodes to explore what is happening. I connect to each of the nodes (http://localhost:8101/shell.html and http://localhost:8102/shell.html) and subscribe phy to see all physical layer events.

    Now, from node A, I try broadcasting frames to see (at various power levels) if node C receives them:

    > plvl -20
    OK
    > phy << new TxFrameReq()
    AGREE
    

    On node C, you'll see receptions, if successful:

    phy >> RxFrameStartNtf:INFORM[type:CONTROL rxTime:3380134843]
    phy >> RxFrameNtf:INFORM[type:CONTROL from:21 rxTime:3380134843]
    

    or bad frames if not:

    phy >> RxFrameStartNtf:INFORM[type:CONTROL rxTime:3389688843]
    phy >> BadFrameNtf:INFORM[type:CONTROL rxTime:3389688843]
    

    Observations: - At plvl -20 dB, almost all frames fail. - At plvl -10 dB, almost all frames are successful. - At plvl -16 dB, I get a frame loss of about 19%.

    The transition between all frames failing to all succeeding is expected to be quite sharp, as is typical in reality for stationary noise, as the FEC performance tends to be quite non-linear. So you'll expect big differences in frame loss rate around the transition region (in this example, at around -16 dB).

    Do also note the plvl 125 dB isn't valid (range of plvl is given by phy.minPowerLevel to phy.maxPowerLevel, -96 dB to 0 dB by default). So setting that would have not worked:

    > plvl 125
    phy[1]: WARNING: Parameter powerLevel set to 0.0
    phy[2]: WARNING: Parameter powerLevel set to 0.0
    phy[3]: WARNING: Parameter powerLevel set to 0.0
    phy: WARNING: Parameter signalPowerLevel set to 0.0