cdcam package

Cambridge Digital Communications Assessment Model

Submodules

cdcam.interventions module

Decide on interventions

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

Given a system and a set of strategy parameters, return the best selected interventions.

Parameters:
  • strategy (str) – One of ‘minimal’, ‘macrocell’, ‘small_cell’ intervention strategies.
  • budget (int) – Annual budget in GBP.
  • service_obligation_capacity (float) – Threshold for universal mobile service, in Mbps/km².
  • system (NetworkManager) – Gives areas (postcode sectors) with population density, demand.
  • timestep (int) – The current simulation timestep.
  • simulation_parameters (dict) – All necessary simulation parameters.
cdcam.interventions.meet_demand(budget, available_interventions, timestep, system, simulation_parameters)[source]

Suggest areas based on meeting highest demand first.

Parameters:
  • budget (int) – Annual budget in GBP.
  • available_interventions (tuple) – Contains the different intervention options that can be selected.
  • timestep (int) – The current simulation timestep.
  • system (NetworkManager) – Gives areas (postcode sectors) with population density, demand.
  • simulation_parameters (dict) – All necessary simulation parameters.
cdcam.interventions.meet_service_obligation(budget, available_interventions, timestep, service_obligation_capacity, system, simulation_parameters)[source]

Suggest areas based on meeting a desired capacity threshold.

Parameters:
  • budget (int) – Annual budget in GBP.
  • available_interventions (tuple) – Contains the different intervention options that can be selected.
  • timestep (int) – The current simulation timestep.
  • service_obligation_capacity (float) – Threshold for universal mobile service, in Mbps/km².
  • system (NetworkManager) – Gives areas (postcode sectors) with population density, demand.
  • simulation_parameters (dict) – All necessary simulation parameters.

cdcam.model module

Cambridge Communications Assessment Model

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

Bases: object

Local area district - Higher level statistical unit.

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: int
      Percentage market share of the modelled hypothetical operator.
    • annual_budget: int
      Annual budget to spend.
    • service_obligation_capacity: int
      Required service obligation.
    • busy_hour_traffic_percentage: int
      Percentage of daily traffic taking place in the busy hour.
    • coverage_threshold: int
      The threshold we wish to measure the served population against.
    • penetration: int
      The penetration of users with smartphone and data access.
    • channel_bandwidth: int
      Carrier bandwidth by frequency.
    • macro_sectors: int
      Number of sectors per macrocell.
    • small-cell_sectors: int
      Number of sectors per small cell.
    • mast_height: int
      Mast height for the sites being assessed.
add_pcd_sector(pcd_sector)[source]
area
capacity()[source]

Return the mean capacity (Mbps km²) for all nested postcode sectors.

coverage(simulation_parameters)[source]

Return proportion of population with coverage over a threshold (e.g. 10 Mbps).

demand()[source]

Return the mean demand (Mbps km²) from all nested postcode sectors.

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

Bases: object

Model controller class.

Represents lower level statistical units (postcode sectors) nested within upper level statistical units (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²)
    • 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, ..)
    • type: str
      The type of cell site (macrocell site, small cell site…)
    • 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, ..)
      • 3: str
        Technology generation (4G, 5G)
    • value: list of tuple
      • 0: int
        Site asset density per square kilometer (sites per km²)
      • 1: int
        Mean Cell Edge capacity in Mbps per square kilometer (Mbps/km²)
  • 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²)

    • 0: int
      Population density in persons per km².
    • 1: string
      Settlement type (urban, suburban and rural)
  • simulation_parameters (dict) –

    Contains all simulation parameters, set in the run script.

    • market_share: int
      Percentage market share of the modelled hypothetical operator.
    • annual_budget: int
      Annual budget to spend.
    • service_obligation_capacity: int
      Required service obligation.
    • busy_hour_traffic_percentage: int
      Percentage of daily traffic taking place in the busy hour.
    • coverage_threshold: int
      The threshold we wish to measure the served population against.
    • penetration: int
      The penetration of users with smartphone and data access.
    • channel_bandwidth: int
      Carrier bandwidth by frequency.
    • macro_sectors: int
      Number of sectors per macrocell.
    • small-cell_sectors: int
      Number of sectors per small cell.
    • mast_height: int
      Mast height for the sites being assessed.
class cdcam.model.PostcodeSector(data, assets, capacity_lookup_table, clutter_lookup, simulation_parameters)[source]

Bases: object

Postcode Sector - Lower level statistical unit.

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.
    • lad_id: int
      The Local Authority District which this area is within.
    • population: int
      Number of inhabitants.
    • area: int
      Geographic area (km²).
    • user_throughput: int
      Monthly user data consumption (GB).
    • population: int
      Number of inhabitants.
    • area: int
      Geographic area (km²).
  • 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, ..)
    • type: str The type of cell site (macrocell site, small cell site…)
    • 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, ..)
      • 3: str
        Technology generation (4G, 5G)
    • value: list of tuple
      • 0: int
        Site asset density per square kilometer (sites per km²)
      • 1: int
        Mean Cell Edge capacity in Mbps per square kilometer (Mbps/km²)
  • 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²)

    • 0: int
      Population density in persons per km².
    • 1: string
      Settlement type (urban, suburban and rural)
  • simulation_parameters (dict) –

    Contains all simulation parameters, set in the run script.

    • market_share: int
      Percentage market share of the modelled hypothetical operator.
    • busy_hour_traffic_percentage: int
      Percentage of daily traffic taking place in the busy hour.
    • penetration: int
      The penetration of users with smartphone and data access.
demand
  • population
  • overbooking factor
  • smartphone penetration
  • market share
  • user demand
  • area

E.g.:

2000 population
    / 20
    * (80% / 100) penetration
    * (25% / 100) market share
= 20 users

20 users
    * 0.01 Mbps user demand
= 0.2 total user throughput

0.2 Mbps total user throughput during the busy hour
    / 1 km² area
= 0.2 Mbps/km² area demand
Type:Estimate total demand based on
population_density

Calculate population density for a specific population and area (persons per km²).

small_cell_capacity(simulation_parameters)[source]

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

cdcam.model.find_frequency_bandwidth(frequency, simulation_parameters)[source]

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

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

Linear interpolation between two values.

cdcam.model.lookup_capacity(lookup_table, environment, cell_type, frequency, bandwidth, generation, site_density)[source]

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

cdcam.model.lookup_clutter_geotype(clutter_lookup, population_density)[source]

Return geotype based on population density

Parameters:
  • clutter_lookup (list) – A list of tuples sorted by population_density_upper_bound ascending (population_density_upper_bound, geotype).
  • population_density (float) – The current population density requiring the lookup.
cdcam.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)]