RadioPlan
General
RadioPlan is the module for radioplanning. Radioplanning involves to define the radio equipment, optimize positions and parameters to ensure succesful radio communication. The Radioplan module offers a set of tools to achieve this:
- Radio and RadioNet coverage predictions
- RadioNet connectivity predictions
- Equipment templates
- Antenna models
- Propagation models for VHF, UHF, SHF
Functionality is controlled via the interface IMariaRadioPlanLayer
public interface IMariaRadioPlanLayer : IMariaLayer
Data model
Radio
The radio is a general purpose radio. It can have different properties like frequency and technology.
A radio must be attached to a Site and may also be assigned to a RadioNet. An Antenna must be connected for coverage calculation.
| Property | Type | Description |
|---|---|---|
| Id | Guid | Unique identifier for the radio. |
| Name | string | Name of the radio. |
| RadioSystem | RadioSystem | Identifies the radio system used by the device. The RadioSystem property of the Radio must match the RadioSystem property of the RadioNet. |
| TxPower | SignalPower | [dBm] The transmitter output power of the radio. |
| Loss | Decibel | [dB] Total signal loss between the radio and the antenna system.
This includes cable loss, connector loss, filters, and other inline components. |
| RxSensitivity | SignalPower | [dBm] The receiver sensitivity threshold.
Represents the minimum signal strength the receiver can reliably detect while maintaining required performance metrics (e.g., BER or SINR). Lower (more negative) values indicate a more sensitive receiver. |
| Antenna | Antenna? | The antenna connected to the radio. An Antenna must be connected for coverage calculation. |
| Frequency | Frequency | [MHz] The operating center frequency of the radio. |
| Status | Status | The current operational status of the radio. |
| Site | Site | The site where the radio is installed or registered. |
| RadioNet | RadioNet? | The radio network to which this radio belongs. |
Site
The Site defines the geographical position for one or more radios. Radios on the same Site is considered to be collocated.
| Property | Type | Description |
|---|---|---|
| Id | Guid | Unique identifier for the site. |
| Name | string | Name of the site. |
| Location | GeoPos | The geographical position of the site. |
| Radios | ImmutableArray<Radio> | The radios deployed at this site. |
RadioNet
The radio net holds a group of radios of same technology
| Property | Type | Description |
|---|---|---|
| Id | Guid | Unique identifier for the radio net. |
| Name | string | Name of the radio net. |
| NetworkType | NetworkType | Defines the type of network the radios operate within. |
| RadioSystem | RadioSystem | Identifies the radio system used for this network. Available radio systems is restricted by the network type. |
| TerminalProperties | TerminalProperties? | Terminal‑specific configuration for radios that are part of this network. |
| CoverageCalculationSettings | CoverageCalculationSettings? | Configuration settings used when performing coverage calculations for this network.
Overrides application settings when this is set. |
| MasterRadio | Radio? | The identifier of the designated master radio for this network.
The master radio typically provides synchronization, control, or timing functions depending on the network type |
| Radios | ImmutableArray<Radio> | The collection of radios participating in this network. |
| Frequencies | ImmutableArray<Frequency> | The set of frequencies allocated to this network.
Radios in the network can only use one of the allocated frequencies. |
Antenna
A single antenna can be applied to the cell, with properties like
| Property | Type | Description |
|---|---|---|
| Id | Guid | Unique identifier for the antenna. |
| AntennaTypeName | string | The name or model identifier of the antenna type. |
| Height | double | The antenna height measured in meters above ground level (AGL).
This defines the elevation of the antenna relative to the local terrain surface and is a key parameter in propagation and coverage calculations. |
| Direction | Azimuth | The azimuth direction the antenna is oriented toward, expressed as a bearing in degrees (0–360).
Defines the horizontal pointing direction of directional antennas. |
| ElectricalTilt | Tilt | The electrical downtilt of the antenna, defined in degrees. |
| MechanicalTilt | Tilt | The mechanical downtilt of the antenna, defined in degrees. |
| PositionOffsetDirection | Azimuth | [degrees] The horizontal direction (bearing in degrees) of the antenna’s position offset relative to the Site location. |
| PositionOffsetDistance | double | [m] The horizontal distance of the antenna’s position offset relative to the Site location. |
TerminalProperties
Terminal configuration for user terminals that are part of a cellular network type RadioNet.
| Property | Type | Description |
|---|---|---|
| Id | Guid | Unique identifier for the terminal properties. |
| TxPower | SignalPower | [dBm] The transmitter output power of the terminal. |
| RxSensitivity | SignalPower | [dBm] The receiver sensitivity of the terminal. |
| AntennaGain | Decibel | [dB] The gain of the terminal’s antenna. |
AntennaType
| Property | Type | Description |
|---|---|---|
| Id | Guid | Unique identifier for the antenna type. |
| Name | string | The name of the antenna type. |
| OmniDirectional | bool | Indicates whether the antenna is omnidirectional in azimuth. |
| AntennaPatternSpecs | ImmutableArray<AntennaPatternSpec> | The set of antenna pattern specifications associated with this antenna type. |
| MinimumFrequency | Frequency | [MHz] The lowest frequency covered by the associated pattern specifications.
Returns 0 if no specs exist. |
| MaximumFrequency | Frequency | [MHz] The highest frequency covered by the associated pattern specifications.
Returns 0 if no specs exist. |
Antenna type can return an antenna pattern specification valid for a specific radio frequency and electrical tilt.
public AntennaPatternSpec? GetAntennaPatternSpec(Frequency frequency, Tilt electricalTilt)
The list of available antenna types is available from the Antenna Service which are handled by the AntennaCache:
var antennaTypes = await RadioPlanLayer.AntennaCache.GetAsync();
From the AntennaType we get the string AntennaTypeName which is set on the Antenna object. Antenna cache can return antenna types valid for a specific radio frequency.
Task<IEnumerable<AntennaType>> GetAntennaTypeForFrequencyAsync(Frequency frequency);
AnntennaPatternSpec
A specification describing the antenna’s radiation characteristics for a particular frequency range and electrical tilt setting. Each pattern spec typically corresponds to a manufacturer‑defined dataset for a specific band and tilt configuration.
| Property | Type | Description |
|---|---|---|
| Name | string | Human‑readable name or label for this pattern specification. |
| MaxGain | double | The maximum gain (in dBi) of the antenna within this specific pattern definition.
Represents the highest gain value found in the azimuth/elevation radiation pattern for this frequency range and tilt. |
| FrequencyLowerBoundary | Frequency | [MHz] The lower frequency boundary (inclusive) for which this pattern specification is valid.
Frequencies below this value cannot use this pattern. |
| FrequencyUpperBoundary | Frequency | [MHz] The upper frequency boundary (inclusive) for which this pattern specification is valid.
Frequencies above this value cannot use this pattern. |
| ElectricalTilt | Tilt | [degrees] The electrical downtilt (in degrees, positive values downwards) associated with this pattern specification.
This indicates how the antenna’s vertical radiation pattern is shaped electronically for this dataset. |
AntennaPattern
Represents a full antenna radiation pattern for a specific frequency range and electrical tilt. Extends AntennaPatternSpec by providing detailed horizontal and vertical gain patterns used for coverage calculations.
| Property | Type | Description |
|---|---|---|
| HorizontalGains | double[] | [dB] Horizontal-plane gain values (azimuth pattern). |
| VerticalGains | double[] | [dB] Vertical-plane gain values (elevation pattern). |
Data model store
Site store
Sites are stored IRadioPlanSiteStore IMariaRadioPlanLayer.RadioStore
Save a new Site:
Site = new Site(Guid.NewGuid(), Name, Location);
_radioPlanLayer.SiteStore.AddOrUpdate(Site);
Get all sites:
var sites = _radioPlanLayer.SiteStore.Get();
Get a speficic site:
var site = _radioPlanLayer.SiteStore.Get(siteId);
Remove a site from store:
RadioPlanLayer.SiteStore.Remove(site);
Radio store
Radios are stored to IRadioPlanRadioStore IMariaRadioPlanLayer.RadioStore
Similar to SiteStore, this interface uses AddOrUpdate, Get and Remove.
Radio net store
A radio net is a collection of radios connected.
Similar to SiteStore, this interface uses AddOrUpdate, Get and Remove.
Situation
The collections of site, radios and radio nets can be saved to a situation file.
Situation data can be stored in to persistent storage system with help of IMariaRadioPlanLayer.Serialize
Example saving to a file:
byte[] situationBytes = _radioPlanLayer.Serialize(_parent.DrawObjectCommonFactory);
File.WriteAllBytesAsync(filePath, situationBytes);
Situation data can be restored from persistent storage system with help of IMariaRadioPlanLayer.DeSerialize Example reading from a file:
byte[] situationBytes = await System.IO.File.ReadAllBytesAsync(filePath);
_radioPlanLayer.DeSerialize(situationBytes, _parent.DrawObjectCommonFactory);
comment:
Coverage predictions
Calculate coverage
Coverage calculations are controlled via the interce IRadioCoverage in IMariaRadioPlanLayer.RadioCoverage
To create a coverage file, we need to define some parameters, the most important is the selection of propagation model.
The list of propagation models can be found like this:
_propagationModels = new ReadOnlyCollection<string>(_radioPlanLayer.RadioCoverage.RadioPropagationModelRepository.PropagationModels.Select(m => m.Name).ToList());
Properties for the Coverage calculation is stored in
record CoverageProperties(int Resolution, int Size, AreaShape CalculationAreaShape, string PropagationModel, RxHeight RxHeight);
Coverage calculation is started with
var jobId = await _radioPlanLayer.RadioCoverage.StartCoverageCalculationForRadio(radio, coverageProperties);
If successfull, jobId returns a Guid identifying the job. Else the text string return error message. Progress can be checked with subscribing on the event RadioCoverage.CovDataUpdateProgress.
_radioPlanLayer.RadioCoverage.CovDataUpdateProgress += CoverageDataUpdateProgress;
...
private void CoverageDataUpdateProgress(object sender, CalculationJobStatus calculationJobStatus)
{
if (calculationJobStatus.IsCompleted)
{
ProgressValue = 0; // the clients progress indicator
}
else
{
ProgressValue = calculationJobStatus.TotalPercentCompleted;
}
}
Coverage plotting
To show coverage plots in the map some setup is needed
For which radios coverage plot is requested is handeled with IMariaRadioPlanLayer.IRadioCoverage.Add
Example adding all radios in a radionet:
foreach (var radio in radioNet.Radios)
{
_radioPlanLayer.RadioCoverage.Add(radio);
}
Example removing a single radio from the plot:
RadioPlanLayer.RadioCoverage.Remove(radio);
IMariaRadioPlanLayer.IRadioCoverage.Visible must be set to true, to show plot
IMariaRadioPlanLayer.IRadioCoverage.PlotType controls the type of plot to be shown
See: Radio plan Coverage plots page
Coverage contours
For coverage plots, or group of coverage plots, coverage contours can be calculated and displayerd
See: Radio plan coverage contours page
See: Radio plan Coverage contours page
Connectivity Lines
Connectivity lines can be shown between radios in a radio net.
See: Radio plan connectirvity line page
See: Radio plan Connectivity lines page
Settings
RadioPlanSettings
Radio plan settings is available from IMariaRadioPlanLayer.Settings
These settings is used to control:
- Setting for creating coverage predictions
- Colour schemas for plots
See: Radio plan Settings pages
SettingsServices
The radioplan module uses external services for
- Antenna store
- Coverage calculations