Skip to content

Commit

Permalink
Merge pull request #30 from edwardoughton/update_mimo
Browse files Browse the repository at this point in the history
Simplify MIMO specificaton
  • Loading branch information
edwardoughton committed Mar 1, 2020
2 parents 980ed7c + 4ef190e commit e69b745
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 140 deletions.
208 changes: 69 additions & 139 deletions scripts/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,33 +231,6 @@ def obtain_percentile_values(results, transmission_type, parameters):
return percentile_site_results


def get_lookup_table(lut, transmission_type):
"""
Subsets the lookup table based on the transmission type.
Parameters
----------
transmission_type : string
Either SISO (1x1), or MIMO (4x4, 8x8 etc.)
Returns
-------
output : list
Subset of lookup table.
"""
output = []

#('4G', '1x1', 1, 'QPSK', 78, 0.1523, -6.7),
for item in lut:
if item[1] == transmission_type:
output.append(
item
)

return output


def obtain_threshold_values_choice(results, parameters):
"""
Expand Down Expand Up @@ -895,7 +868,7 @@ def write_shapefile(data, directory, filename, crs):


def run_simulator(parameters, spectrum_portfolio, ant_types,
tranmission_types, site_radii, modulation_and_coding_lut, costs):
site_radii, modulation_and_coding_lut, costs):
"""
Function to run the simulator and all associated modules.
Expand Down Expand Up @@ -925,75 +898,70 @@ def run_simulator(parameters, spectrum_portfolio, ant_types,
for ant_type in ant_types:
site_radii_generator = site_radii[ant_type]
for site_radius in site_radii_generator[environment]:
for transmission_type in tranmission_types:

lut = get_lookup_table(modulation_and_coding_lut, transmission_type)

print('--working on {}: {} ({})'.format(environment, site_radius,
transmission_type))

transmitter, interfering_transmitters, site_area, int_site_areas = \
produce_sites_and_site_areas(
unprojected_point['geometry']['coordinates'],
site_radius,
unprojected_crs,
projected_crs
)

receivers = generate_receivers(site_area, PARAMETERS, 1)

for frequency, bandwidth, generation in spectrum_portfolio:

if generation == '4G' and not transmission_type == '1x1':
continue

MANAGER = SimulationManager(
transmitter, interfering_transmitters, ant_type,
receivers, site_area, PARAMETERS
)

results = MANAGER.estimate_link_budget(
frequency,
bandwidth,
generation,
ant_type,
transmission_type,
environment,
lut,
parameters
)

folder = os.path.join(BASE_PATH, '..', 'results', 'full_tables')
filename = 'full_capacity_lut_{}_{}_{}_{}_{}.csv'.format(
environment, site_radius, frequency, ant_type, transmission_type)

write_full_results(results, environment, site_radius,
frequency, bandwidth, generation, ant_type, transmission_type,
folder, filename, parameters)

percentile_site_results = obtain_percentile_values(
results, transmission_type, parameters

if environment == 'urban' and site_radius > 5000:
continue
print('--working on {}: {}'.format(environment, site_radius))

transmitter, interfering_transmitters, site_area, int_site_areas = \
produce_sites_and_site_areas(
unprojected_point['geometry']['coordinates'],
site_radius,
unprojected_crs,
projected_crs
)

results_directory = os.path.join(BASE_PATH, '..', 'results')
write_frequency_lookup_table(percentile_site_results, environment,
site_radius, frequency, bandwidth, generation,
ant_type, transmission_type, results_directory,
'capacity_lut_by_frequency_{}.csv'.format(parameters['percentile']),
parameters
receivers = generate_receivers(site_area, PARAMETERS, 1)

for frequency, bandwidth, generation, transmission_type in spectrum_portfolio:

MANAGER = SimulationManager(
transmitter, interfering_transmitters, ant_type,
receivers, site_area, PARAMETERS
)

# if frequency == spectrum_portfolio[0][0]:
results = MANAGER.estimate_link_budget(
frequency,
bandwidth,
generation,
ant_type,
transmission_type,
environment,
modulation_and_coding_lut,
parameters
)

folder = os.path.join(BASE_PATH, '..', 'results', 'full_tables')
filename = 'full_capacity_lut_{}_{}_{}_{}_{}.csv'.format(
environment, site_radius, frequency, ant_type, transmission_type)

write_full_results(results, environment, site_radius,
frequency, bandwidth, generation, ant_type, transmission_type,
folder, filename, parameters)

# percentile_site_results = calculate_costs(
# percentile_site_results, costs, parameters,
# site_radius, environment
# )
percentile_site_results = obtain_percentile_values(
results, transmission_type, parameters
)

# write_cost_lookup_table(percentile_site_results, results_directory,
# 'percentile_{}_capacity_lut.csv'.format(
# parameters['percentile'])
# )
results_directory = os.path.join(BASE_PATH, '..', 'results')
write_frequency_lookup_table(percentile_site_results, environment,
site_radius, frequency, bandwidth, generation,
ant_type, transmission_type, results_directory,
'capacity_lut_by_frequency_{}.csv'.format(parameters['percentile']),
parameters
)

if frequency == spectrum_portfolio[0][0]:

percentile_site_results = calculate_costs(
percentile_site_results, costs, parameters,
site_radius, environment
)

write_cost_lookup_table(percentile_site_results, results_directory,
'percentile_{}_capacity_lut.csv'.format(
parameters['percentile'])
)

# # geojson_receivers = convert_results_geojson(results)

Expand Down Expand Up @@ -1036,7 +1004,7 @@ def run_simulator(parameters, spectrum_portfolio, ant_types,
if __name__ == '__main__':

PARAMETERS = {
'iterations': 1,
'iterations': 100,
'seed_value1': 1,
'seed_value2': 2,
'indoor_users_percentage': 50,
Expand All @@ -1057,7 +1025,7 @@ def run_simulator(parameters, spectrum_portfolio, ant_types,
'street_width': 20,
'above_roof': 0,
'network_load': 50,
'percentile': 50,
'percentile': 10,
'sectorization': 3,
'mnos': 2,
'asset_lifetime': 10,
Expand All @@ -1081,26 +1049,19 @@ def run_simulator(parameters, spectrum_portfolio, ant_types,
}

SPECTRUM_PORTFOLIO = [
(0.7, 10, '5G'),
(0.8, 10, '4G'),
(1.8, 10, '4G'),
(2.6, 10, '4G'),
(3.5, 50, '5G'),
(3.7, 50, '5G'),
(26, 500, '5G'),
(0.7, 10, '5G', '8x8'),
(0.8, 10, '4G', '1x1'),
(2.6, 10, '4G', '1x1'),
(3.5, 50, '5G', '8x8'),
(3.7, 50, '5G', '8x8'),
(26, 500, '5G', '8x8'),
]

ANT_TYPE = [
('macro'),
('micro'),
]

TRANSMISSION_TYPES = [
'1x1',
# '4x4',
'8x8',
]

MODULATION_AND_CODING_LUT =[
# ETSI. 2018. ‘5G; NR; Physical Layer Procedures for Data
# (3GPP TS 38.214 Version 15.3.0 Release 15)’. Valbonne, France: ETSI.
Expand All @@ -1121,36 +1082,6 @@ def run_simulator(parameters, spectrum_portfolio, ant_types,
('4G', '1x1', 13, '64QAM', 772, 4.5234, 18.7),
('4G', '1x1', 14, '64QAM', 973, 5.1152, 21),
('4G', '1x1', 15, '64QAM', 948, 5.5547, 22.7),
('5G', '1x1', 1, 'QPSK', 78, 0.1523, -6.7),
('5G', '1x1', 2, 'QPSK', 193, 0.377, -4.7),
('5G', '1x1', 3, 'QPSK', 449, 0.877, -2.3),
('5G', '1x1', 4, '16QAM', 378, 1.4766, 0.2),
('5G', '1x1', 5, '16QAM', 490, 1.9141, 2.4),
('5G', '1x1', 6, '16QAM', 616, 2.4063, 4.3),
('5G', '1x1', 7, '64QAM', 466, 2.7305, 5.9),
('5G', '1x1', 8, '64QAM', 567, 3.3223, 8.1),
('5G', '1x1', 9, '64QAM', 666, 3.9023, 10.3),
('5G', '1x1', 10, '64QAM', 772, 4.5234, 11.7),
('5G', '1x1', 11, '64QAM', 873, 5.1152, 14.1),
('5G', '1x1', 12, '256QAM', 711, 5.5547, 16.3),
('5G', '1x1', 13, '256QAM', 797, 6.2266, 18.7),
('5G', '1x1', 14, '256QAM', 885, 6.9141, 21),
('5G', '1x1', 15, '256QAM', 948, 7.4063, 22.7),
('5G', '4x4', 1, 'QPSK', 78, 0.15, -6.7),
('5G', '4x4', 2, 'QPSK', 193, 1.02, -4.7),
('5G', '4x4', 3, 'QPSK', 449, 2.21, -2.3),
('5G', '4x4', 4, '16QAM', 378, 3.20, 0.2),
('5G', '4x4', 5, '16QAM', 490, 4.00, 2.4),
('5G', '4x4', 6, '16QAM', 616, 5.41, 4.3),
('5G', '4x4', 7, '64QAM', 466, 6.20, 5.9),
('5G', '4x4', 8, '64QAM', 567, 8.00, 8.1),
('5G', '4x4', 9, '64QAM', 666, 9.50, 10.3),
('5G', '4x4', 10, '64QAM', 772, 11.00, 11.7),
('5G', '4x4', 11, '64QAM', 873, 14.00, 14.1),
('5G', '4x4', 12, '256QAM', 711, 16.00, 16.3),
('5G', '4x4', 13, '256QAM', 797, 19.00, 18.7),
('5G', '4x4', 14, '256QAM', 885, 22.00, 21),
('5G', '4x4', 15, '256QAM', 948, 25.00, 22.7),
('5G', '8x8', 1, 'QPSK', 78, 0.30, -6.7),
('5G', '8x8', 2, 'QPSK', 193, 2.05, -4.7),
('5G', '8x8', 3, 'QPSK', 449, 4.42, -2.3),
Expand All @@ -1172,8 +1103,8 @@ def generate_site_radii(min, max, increment):
for n in range(min, max, increment):
yield n

INCREMENT_MA = (400, 30400, 1000) #(5000, 5500, 500) #
INCREMENT_MI = (40, 540, 100)
INCREMENT_MA = (400, 30400, 400) #(5000, 5500, 500)
INCREMENT_MI = (40, 540, 80)

SITE_RADII = {
'macro': {
Expand All @@ -1198,7 +1129,6 @@ def generate_site_radii(min, max, increment):
PARAMETERS,
SPECTRUM_PORTFOLIO,
ANT_TYPE,
TRANSMISSION_TYPES,
SITE_RADII,
MODULATION_AND_CODING_LUT,
COSTS
Expand Down
1 change: 0 additions & 1 deletion src/pysim5g/costs.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ def calculate_costs(datum, costs, parameters, site_radius, environment):
'inter_site_distance': inter_site_distance,
'site_area_km2': site_area_km2,
'sites_per_km2': sites_per_km2,
'transmission_type': datum['transmission_type'],
'results_type': 'percentile_{}'.format(parameters['percentile']),
'path_loss': datum['path_loss'],
'received_power': datum['received_power'],
Expand Down

0 comments on commit e69b745

Please sign in to comment.