Use Channel in WiTwin Studio
Get the Channel Plugin for WiTwin Studio, create a Channel Sim Project, solve radio maps in the viewport, and know what the Plugin does not cover yet.
This guide is for WiTwin Studio users who want radio maps without writing a solver script. The Channel Plugin adds components for transmitters, receivers and radio maps, a Library category, a "Channel Sim" Project template, ITU-R P.2040 material presets and an Agent tool. It runs Channel 0.5 in a separate process and draws the radio map in the viewport.
The Plugin id is witwin.channel. Its Python distribution is wt-channel (import name wt_channel), version 0.1.0, and its source is at https://github.com/witwin-ai/wt_channel.
What the Plugin adds#
| Part | What you get |
|---|---|
| Components | Tx (ChannelTx) and Rx (ChannelRx) endpoints, RadioMap, PathSolver and MaterialPreset, in the Channel component category. |
| Library items | A Channel category with "Channel Scene (Demo)", "Tx", "Rx", "RadioMap" and "Path Solver". |
| Project template | "Channel Sim": a 3.5 GHz transmitter and receiver over a concrete ground plane. |
| Solvers | witwin.channel.radiomap ("Channel RadioMap") and witwin.channel.path ("Channel Path Solver"). Each runs in a child process on the Project's Python. |
| Agent | The tool witwin.channel.run_radiomap and the skill radio-map, so you can ask the Studio Agent for a coverage map of the current Scene. |
Get the Plugin#
# Run in the Project folder. Pick one.
witwin add git+https://github.com/witwin-ai/wt_channel
witwin add ../wt_channel # a local checkout, installed editablewitwin add writes the dependency into the Project's pyproject.toml and syncs its environment. You can also install it from the Plugins page in Studio (from Git or a local folder). See Plugins for the general mechanism.
Install the solver runtime#
Studio imports only the Plugin's components. The solve runs in a child process on the Project's Python interpreter, which needs Channel itself: Python 3.11, torch==2.10.0 with CUDA 12.8, witwin-channel==0.5.0 and an NVIDIA GPU. Follow Installation in that environment. The Plugin's solve extra lists the same stack (witwin>=0.4, witwin-channel>=0.5,<0.6, torch>=2.4).
Create a Project from the Channel Sim template#
While no Project is open, Studio shows Project template cards. Choose Channel Sim. The Scene contains:
- Channel Ground: a concrete ground plane;
- Tx and Rx: a transmitter and a receiver;
- RadioMap: a 2D coverage map over the ground at 3.5 GHz;
- Path Solver: the rays between Tx and Rx.
Select RadioMap and press Solve. The result appears as a colored plane inside the RadioMap's border, in dB by default.
To start in an existing Scene instead, drag Channel Scene (Demo) from the Channel Library category, or drag Tx and RadioMap separately.
Components#
Tx and Rx#
| Field | Meaning |
|---|---|
power | Transmit power in watts (Tx only), default 1.0. |
polarization | Polarization vector, default (1, 0, 0). On Rx it applies when Polarization is switched on. |
orientation | Euler angles, when Orientation is switched on. |
pattern, array_kind | Antenna pattern and array layout. Only pattern = iso with array_kind = single works with Channel 0.5; other choices raise when you solve. |
The object's position in the Scene is the antenna position.
RadioMap#
A RadioMap is a 2D Studio Field that is also the receiver grid. Its region (min_bound, max_bound, in the object's local frame) and resolution define the grid; moving the object moves the grid.
| Field | Default | What reaches Channel |
|---|---|---|
frequency | 3.5 GHz | reference_frequency_hz |
solver | montecarlo | montecarlo or deterministic |
metric | path_gain | What the plane shows: path_gain, rss or sinr |
log_scale | on | Show values in dB |
transmitter | auto | Which Tx to use; with several, tx_index picks the map |
det_max_bounces | 2 | deterministic.Config(max_depth=...) |
det_max_diffraction_order | 1 | Adds "diffraction" to components when above 0 |
mc_integrator | basic | montecarlo.basic or montecarlo.bdpt |
mc_samples_per_tx | 65536 | samples |
mc_seed | 0 | seed |
mc_max_bounces, mc_max_diffraction_order | 2, 1 | max_depth, and "diffraction" in components |
live_update | on | Re-solve a fast preview while you drag the Tx |
The Plugin builds components as "los", plus "reflection" when bounces are above 0, plus "diffraction" when the diffraction order is above 0. Transmission and scattering are not exposed in the panel.
MaterialPreset#
Assigns an ITU-R P.2040 material to a structure: concrete, brick, plasterboard, wood, glass, ceiling_board, chipboard, plywood, marble, floorboard, metal, very_dry_ground, medium_dry_ground or wet_ground. The Plugin evaluates the preset at the solve frequency (or an override) into a PhysicalMaterial. A mesh with no preset and no hand-set values solves as ITU concrete.
Ask the Agent#
With the Plugin enabled, ask the Studio Agent for a radio map, for example "run a radio map of this Scene". The radio-map skill directs it to the witwin.channel.run_radiomap tool, which places a Tx and a RadioMap over the geometry in the Scene if needed, solves, and reports dB statistics.
Limits of Plugin 0.1.0 with Channel 0.5#
The Plugin's own follow-up notes list what is not ported to Channel 0.5 yet:
Warning
- The Path Solver component (Solve Paths, CIR, CFR and tap plots) still calls the Channel 0.3 API and fails until it is ported. Use the path solver from Python meanwhile.
- Antenna arrays and patterns: only a single isotropic element maps to Channel 0.5. ULA, UPA, custom arrays, dipole and TR 38.901 patterns raise.
- Older solver knobs (resolution wavelength, solver mode, memory profile, Russian roulette, stop threshold, filtering, quadrature) stay in the panel for saved Scenes but no longer reach the solver.
For anything beyond radio maps (paths, arrays, transmission, gradients, the propagation consumer), use the Python API on these pages. A Studio Project is an ordinary Python project, so you can run such scripts in the same environment with witwin run scripts/<name>.py.