Search code examples
unetstack

Is there a way to supply bathymetry to the custom channel?


I am running underwater simulations using UnetStack Simulator. By default the simulations uses one of either ProtocolChannelModel or BasicAcousticChannel. Documentation

Let's say I provide GPS coordinates to the nodes. How can i provide the Bathymetry in the simulation to make it more reasonable ? I am planning to use the GEBCO 2019.

Is there a way to do that ?


Solution

  • Not out of the box, but it should be relatively simple to implement with a custom channel implementation (see section "Developing custom channel models" in the Unet handbook).

    Outline:

    Implement your own acoustic model (e.g. MyAcousticModel):

    class MyAcousticChannel extends AbstractAcousticChannel {
      @Delegate AbstractAcousticModel acoustics = new MyAcousticModel(this)
      @Delegate BPSKFadingModel comms = new BPSKFadingModel(this)
    }
    

    and call a propagation model that uses bathymetry (e.g. Bellhop) and feed it bathymetry from the GEBCO database. The MyAcousticModel class would implement a AbstractAcousticChannel, which provides you access to the location of the transmitter and the receiver, to extract bathymetry for. The channel model needs to return a received signal strength for each reception, which is simple to get from the propagation model transmission loss computation and the transmit power.

    TIP: You would want to cache the propagation model run results so you don't have to recompute unless nodes move.

    You'd then use the channel model MyAcousticChannel in your simulations:

    channel.model = MyAcousticChannel