digital_comms.mobile_network package

Submodules

digital_comms.mobile_network.costs module

Cost module

Written by Ed Oughton August 2019

digital_comms.mobile_network.costs.calculate_costs(data, discount_rate, start_timestep, current_timestep)[source]

Calculates the discounted cost for capex and opex, depending on timestep.

Parameters
  • data (list of dicts) – Contains a list of assets

  • discount_rate (float) – Annual financial discount rate to account for the time value of money

  • start_timestep (int) – The timestep relative to the initial starting point

  • current_timestep (int) – The timestep relative to the current point

Returns

output – Contains a list of assets, with affliated discounted capex and opex costs.

Return type

list of dicts

digital_comms.mobile_network.costs.discount_function(cost, discount_rate, start_timestep, current_timestep)[source]

Discount cost based on timestep

digital_comms.mobile_network.interventions module

Decide on interventions

digital_comms.mobile_network.interventions.decide_interventions(strategy, budget, service_obligation_capacity, system, timestep, simulation_parameters)[source]

Given strategy parameters and a system return some next best intervention

strategystr

One of ‘minimal’, ‘macrocell’, ‘small_cell’ intervention strategies

budgetint

Annual budget in GBP

service_obligation_capacityfloat

Threshold for universal mobile service, in Mbps/km^2

systemNetworkManager

Gives areas (postcode sectors) with population density, demand

digital_comms.mobile_network.interventions.meet_demand(budget, available_interventions, timestep, system, simulation_parameters)[source]
digital_comms.mobile_network.interventions.meet_service_obligation(budget, available_interventions, timestep, service_obligation_capacity, system, simulation_parameters)[source]

digital_comms.mobile_network.model module

Cambridge Communications Assessment Model

class digital_comms.mobile_network.model.LAD(data, simulation_parameters)[source]

Bases: object

Local area district.

Represents an area to be modelled. Contains data for demand characterisation and assets for supply assessment.

Parameters
  • data (dict) –

    Metadata and info for the LAD * id: int

    Unique ID

    • name: str

      Name of the LAD

  • simulation_parameters (dict) –

    Contains all simulation parameters, set in the run script. * market_share: :obj: ‘int’

    Percentage market share of the modelled hypothetical operator.

    • annual_budget: :obj: ‘int’

      Annual budget to spend.

    • service_obligation_capacity: :obj: ‘int’

      Required service obligation.

    • busy_hour_traffic_percentage: :obj: ‘int’

      Percentage of daily traffic taking place in the busy hour.

    • coverage_threshold: :obj: ‘int’

      The threshold we wish to measure the served population against.

    • penetration: :obj: ‘int’

      The penetration of users with smartphone and data access.

add_pcd_sector(pcd_sector)[source]
property area
capacity()[source]

Return the mean capacity from all nested postcode sectors

coverage(simulation_parameters)[source]

Return proportion of population with capacity coverage over a threshold

demand()[source]

Return the mean capacity demand from all nested postcode sectors

property population
property population_density
class digital_comms.mobile_network.model.NetworkManager(lads, pcd_sectors, assets, capacity_lookup_table, clutter_lookup, simulation_parameters)[source]

Bases: object

Model controller class.

Represents postcode sectors nested in local area districts, with all affiliated assets, capacities and clutter types.

Parameters
  • lads (list of dict) –

    List of local area districts * id: int

    Unique ID

    • name: str

      Name of the LAD

  • pcd_sectors (list of dict) –

    List of postcode sectors (pcd) * id: str

    Postcode name

    • lad_id: int

      Unique ID

    • population: int

      Number of inhabitants

    • area: float

      Areas size in square kilometers (km^2)

    • user_throughput: int

      Per user monthly data demand in gigabytes (GB)

  • assets (list of dict) –

    List of assets * pcd_sector: str

    Code of the postcode sector

    • site_ngr: int

      Unique site reference number

    • technology: str

      Abbreviation of the asset technology (LTE, 5G etc.)

    • frequency: str

      Spectral frequency(s) the asset operates at (800, 2600, ..)

    • bandwidth: str

      Downlink bandwith of the asset (10MHz, ..)

    • build_date: int

      Build year of the asset

  • capacity_lookup_table (dict) –

    Dictionary that represents the clutter/asset type, spectrum frequency and channel bandwidth, and the consequential cellular capacity provided for different asset densities. * key: tuple

    • 0: str

      Area type (‘urban’, ‘suburban’ or ‘rural’) or asset type (‘small_cells’)

    • 1: str

      Frequency of the asset configuration (800, 2600, ..)

    • 2: str

      Bandwith of the asset configuration (10, 40, ..)

    • value: list of tuple
      • 0: int

        Cellular asset density per square kilometer (sites per km^2)

      • 1: int

        Average Radio Access Network capacity in Mbps per square kilometer (Mbps/km^2)

  • clutter_lookup (list of tuples) –

    Each element represents the settlement definitions for urban, suburban and rural by population density in square kilometers (persons per km^2) * 0: int

    Population density in persons per km^2.

    • 1: string

      Settlement type (rban, suburban and rural)

  • simulation_parameters (dict) –

    Contains all simulation parameters, set in the run script. * market_share: :obj: ‘int’

    Percentage market share of the modelled hypothetical operator.

    • annual_budget: :obj: ‘int’

      Annual budget to spend.

    • service_obligation_capacity: :obj: ‘int’

      Required service obligation.

    • busy_hour_traffic_percentage: :obj: ‘int’

      Percentage of daily traffic taking place in the busy hour.

    • coverage_threshold: :obj: ‘int’

      The threshold we wish to measure the served population against.

    • penetration: :obj: ‘int’

      The penetration of users with smartphone and data access.

class digital_comms.mobile_network.model.PostcodeSector(data, assets, capacity_lookup_table, clutter_lookup, simulation_parameters, testing)[source]

Bases: object

Represents a pcd_sector to be modelled

property demand

Estimate total demand based on population and penetration.

E.g.
0.02 Mbps per user during busy hours
  • 100 population

  • 0.8 penetration

/ 10 km^2 area

= ~0.16 Mbps/km^2 area capacity demand

property population_density

Calculate population density for a specific population and area.

small_cell_capacity(simulation_parameters, testing)[source]

Find the small cell Radio Access Network capacity given the area assets and deployed frequency bands.

digital_comms.mobile_network.model.find_frequency_bandwidth(frequency, simulation_parameters)[source]

Finds the correct bandwidth for a specific frequency from the simulation parameters.

digital_comms.mobile_network.model.interpolate(x0, y0, x1, y1, x)[source]

Linear interpolation between two values.

digital_comms.mobile_network.model.lookup_capacity(lookup_table, clutter_environment, frequency, bandwidth, generation, site_density, testing)[source]

Use lookup table to find capacity by clutter environment geotype, frequency, bandwidth and site density.

digital_comms.mobile_network.model.lookup_clutter_geotype(clutter_lookup, population_density)[source]

Return geotype based on population density

clutter_lookuplist of (population_density_upper_bound, geotype) tuples

sorted by population_density_upper_bound ascending

digital_comms.mobile_network.model.pairwise(iterable)[source]

Return iterable of 2-tuples in a sliding window

>>> list(pairwise([1,2,3,4]))
[(1,2),(2,3),(3,4)]