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.
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.
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.
Transmitter List
When the dropdown menu is not open, the transmitter list will be displayed.
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"
}
}