Phase Tracing Interface

The Phase Tracing interface is for simulating multipath RF propagation in complex, three-dimensional environments, and is particularly powerful at modelling environments which include complicated structures such as stairways, tunnels, bridges and towers.

The Phase Tracing interface can be accessed from the /phase-tracing endpoint, for example available on CloudRF at https://cloudrf.com/phase-tracing.

The Phase Tracing interface has been tested to work best in the latest version of Google Chrome. It’s recommended that you use it in this browser, however any browser which supports WebGL technology should be functional.

Interface Elements

Below shows an overview of the Phase Tracing interface.

Phase Tracing UI

3D Scene

The Phase Tracing interface centers around the 3D scene, where the currently loaded scene model is displayed as seen above.

After a calculation, a viewshed model will be shown over the scene model. The viewshed model consists of coloured voxels, where the colour corresponds to the received power (dBm) inside that voxel.

Viewshed

The 3D scene also includes the transmitters, displayed as a 3D antenna pattern. The pattern will change shape when the antenna pattern is changed using the transmitter settings modal.

A transmitter can be selected by clicking on the pattern, which brings up the radial context menu.

To deselect a transmitter, click the scene model when no tool is active, which is indicated by no active buttons in the navbar.

Camera Controls

To rotate the camera:

  • If using a desktop with a mouse you can click and drag with the left mouse button.

  • If you are using a touch-screen device you can move the camera with a single finger and dragging your finger across the screen.

To pan the camera:

  • If using a desktop with a mouse you can click and drag with the right mouse button.

  • If you are using a touch-screen device you can move the camera with two fingers and dragging your fingers across the screen.

Panning the camer will also move the pivot point for where the camera rotation is made from.

To zoom the camer:

  • If using a desktop with a mouse you can either scroll with the mouse wheel, or hold the mouse wheel and move the mouse forwards and backwards to zoom.

  • If you are using a touch-screen device you can zoom the camera by using two fingers and pinching them together, or moving them apart apart to zoom.

In the bottom right of the screen there is a camera gizmo which can also help with quickly moving the camera to pre-set positions. You can click opn one of the colour balls to quickly manipulate the scene to move to that position.

If you wish to reset you view of the scene, this can be done by clicking on the “Reset Camera” item within the menu.

If you have transmitters within your scene, you can select a particular transmitter from the transmitter list to quickly jump to that transmitter.

There is also a walking mode which can be used to interact with the scene in a first-person view where you can walk around the model. This can be toggled on and off.

Radial Context Menu

When a transmitter is selected, the radial context menu is displayed around it.

Edit Button

Rcm Edit

Pressing the edit button brings up the transmitter settings modal.

Transmitter Settings Modal

Tx Settings

The transmitter settings modal can be used to edit the following settings:

  • Name

  • Height (m)

  • Frequency (MHz)

  • Power (W)

  • Gain (dBi)

  • Loss (dB)

  • Antenna pattern

Note that the height is defined as above the ground point, which is where the transmitter’s crosshair is centered.

Move

Rcm Move

When the move tool is active, left clicking on another location within the model will move the selected transmitter’s ground point to that location.

Aim

Rcm Aim

When the aim tool is active, left click on the model will rotate the transmitter such that it points in that direction of where you click.

Rotate

Rcm Rotate

When the rotate tool is active, the transmitter can be rotated by dragging the line that appears. This allows aiming the transmitter into free-space where there is no model to click.

Delete

Rcm Delete

Clicking the delete button will delete the transmitter.

Transmitter List

When the dropdown menu is not open, the transmitter list will be displayed.

Tx List

The currently selected transmitter is marked with a tick, and transmitters can be selected by clicking their name on the menu.

Clicking a selected transmitter moves the camera to focus on that transmitter.

Input Model Format

Phase Tracing is performed on glTF 2.0 models, an extendable open standard file format for describing 3D scenes and models.

The model files must be binary .glb files, where all the data is containing inside the file, whereas the JSON .gltf files reference external .bin files.

The glTF file format is extensible, with extensions divided into two groups: required and used. If a required extension is not in the following list the API is unlikely to work with the model:

  • KHR_draco_mesh_compression

The third party glTF Report can be used to preview and validate a glTF model, and to see the required extensions.

Calculation Speed

The level of detail in a model does not effect the calculation speed, except that larger files take longer to load.

To get a faster calculation, use a lower resolution. Doubling the resolution increases the calculation difficulty by a factor of eight.

The API has a 30 second timeout so if a calculation takes longer than 30 seconds you will not receive the result. The first calculation after changing the model or resolution will be slower than subsequent as the model needs to be re-processed. The Phase Tracing API will cache your previous model to allow for subsequent calculations to be more performant.

Scene Format

Scenes are stored as JSON. They contain:

  • The name of the model

  • Transmitter settings

  • Calculation settings

  • Background + lighting configuration

An example scene JSON follows:

{
    "modelName": "hello_world.glb",
    "backgroundType": "sky-box",
    "backgroundColor": "blue",
    "transmitters": [
        {
            "id": "Transmitter 1",
            "x": 10.0897452365192,
            "y": 0,
            "z": -7.5563530828073855,
            "rotationX": 0,
            "rotationY": 0,
            "rotationZ": 0,
            "height": 1.5,
            "antennaPatternId": 1,
            "r": 0,
            "g": 255,
            "b": 0,
            "frequency": 2450,
            "power": 1,
            "gain": 2.15,
            "loss": 0
        },
        {
            "id": "Transmitter 2",
            "x": 2.883337910636127,
            "y": 0,
            "z": 11.044576366827863,
            "rotationX": 0,
            "rotationY": 0,
            "rotationZ": 0,
            "height": 1.5,
            "antennaPatternId": 1,
            "r": 0,
            "g": 255,
            "b": 0,
            "frequency": 2450,
            "power": 1,
            "gain": 2.15,
            "loss": 0
        }
    ],
    "lights": [
        {
            "id": "Northern spotlight",
            "type": "directional",
            "enabled": true,
            "intensity": 2.2,
            "position": {
                "x": 0,
                "y": 50,
                "z": -100
            },
            "target": {
                "x": 0,
                "y": 0,
                "z": 0
            }
        },
        {
            "id": "Eastern spotlight",
            "type": "directional",
            "enabled": true,
            "intensity": 3,
            "position": {
                "x": -100,
                "y": 49.749654418312204,
                "z": -0.7387491921762099
            },
            "target": {
                "x": 0,
                "y": 0,
                "z": 0
            }
        },
        {
            "id": "Southern spotlight",
            "type": "directional",
            "enabled": true,
            "intensity": 2.2,
            "position": {
                "x": 0,
                "y": 50,
                "z": 100
            },
            "target": {
                "x": 0,
                "y": 0,
                "z": 0
            }
        },
        {
            "id": "Western spotlight",
            "type": "directional",
            "enabled": true,
            "intensity": 2.2,
            "position": {
                "x": 100,
                "y": 50,
                "z": 0
            },
            "target": {
                "x": -0.011472404568427241,
                "y": 0,
                "z": 0.002287903721230944
            }
        },
        {
            "id": "Subsurface light",
            "type": "directional",
            "enabled": true,
            "intensity": 1,
            "position": {
                "x": 0,
                "y": -100,
                "z": 0
            },
            "target": {
                "x": 0,
                "y": 0,
                "z": 0
            }
        }
    ],
    "settings": {
        "resolutionMode": "MidResolution",
        "reflectionsMode": "MidReflections",
        "densityMode": "MidDensity"
    }
}