├── LICENSE ├── README.md ├── Simulation ├── CMakeLists.txt ├── network_planning_5g_tdd.cpp └── network_planning_5g_tdd.h └── examples ├── 3750MHz_1604_radiomap.png ├── 3750MHz_1604_urbanmap.png ├── 3750MHz_1700_radiomap.png ├── 3750MHz_1700_urbanmap.png ├── 5750MHz_2_radiomap.png ├── 5750MHz_2_urbanmap.png ├── h5750_R24.png ├── h5750_R26.png ├── h5750_U24.png └── h5750_U26.png /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 BRATLab at UCDavis 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BART-Lab Radiomap Dataset 2 | The BRAT-Lab radiomap dataset is high-fidelity simulated dataset via Altair WinProp: https://web.altair.com/winprop-telecom 3 | 4 | The landscape map is accessible from OpenStreetMap: https://www.openstreetmap.org/ 5 | 6 | The dataset is available via : [BRAT-Lab Dataset](https://www.dropbox.com/scl/fo/kua86qnk1aukt8i4f2rma/h?rlkey=j82kiq4dgaw3l0bzbeyfvv4oi&dl=0) 7 | 8 | The dataset consists of 2000 coarse resolution radiomaps in 5 frequency bands with size around 500 × 500, and 100 fine resolution radiomaps in 5 frequency bands with size around 3000 × 5000. 9 | 10 | ## Information of Coarse Resolution Radiomap: 11 | The coarse resolution dataset is generated by the simulation tool Altair Feko. The dataset is generated for locations in the United States of America, for which landscape map is accessible from OpenStreetMap. 12 | The whole region is conformed as a regular grid. The height of each building is set as 10 meters. 13 | Each transmitter contains three antennas (model 720842A2) with height as 30 meters and initial power as 46.00 dBm. 14 | 5 frequency brands used for each antenna are 1750, 2750, 3750, 4750, 5750 MHz. 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
Urban Map1Radio Map1
26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
Urban Map2Radio Map2
37 | 38 | The code of radiomap generation is in /simulation. 39 | 40 | ## Information of Fine Resolution Radiomap: 41 | The fine resolution dataset is generated by the simulation tool Altair Feko. The dataset is generated for locations in the United States of America, for which landscape map is accessible from OpenStreetMap. 42 | The whole region is conformed as a 3000 × 5000 regular grid. The height of each building is set as 10 meters. 43 | Each transmitter contains three antennas (model 720842A2) with height as 30 meters and initial power as 46.00 dBm. 44 | The frequency used for each antenna is 1750, 2750, 3750, 4750, 5750 MHz. 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 |
Urban Map1Radio Map1
56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
Urban Map2Radio Map2
67 | 68 | ## Instruction of Generating your Radiomaps via Our Codes 69 | The code for generating data is stored in "Simulation". It is written in C++, and you will need to use CMake to set up the tasks. This code operates by invoking the API provided by Altair Feko for simulation purposes. To harness the full capabilities of the API used in the code, you will need to obtain a Winprop license through official channels. After that, You can adjust the code's parameters to suit your requirements. For more detailed information, refer to the official user manual at: https://2022.help.altair.com/2022.1.1/winprop/html/topics/winprop/user_guide/appendix/api/api_general_winprop_c.htm. 70 | 71 | ## Folders in the Repository 72 | osm_data: This folder holds the information of 2000 sets of regions obtained from OpenStreetMap through the Overpass API. 73 | 74 | odb_data: Data transformed from OSM files into a format suitable for processing with FEKO Winprop software. 75 | 76 | coordinates: Latitude and longitude coordinates for the 2000 regions. For each line, data saved as (x1 y1 x2 y2 x3 y3). 77 | 78 | buildings_positions: The relative positions of buildings within each region. 79 | 80 | stations_positions: The relative positions of radar installations within each region. 81 | 82 | antenna_patterns: The information about the chosen antenna. 83 | 84 | airInterfaces: The parameters of 5G propagation model air interface. 85 | 86 | radiomap_txt: The received power for the whole network in text file. For each line, data saved as (x y power). 87 | 88 | radiomap_mat: The received power for the whole network in matrix, converted from 'radiomap_txt'. 89 | 90 | ## Acknowledgement 91 | Please acknowledge the following paper if the dataset is useful for your research. 92 | 93 | S. Zhang, T. Yu, B. Choi, F. Ouyang, and Z. Ding, “Radio Map Inpainting of Missing Regions using Propagation Priority and Depth Map”, in IEEE Transactions on Wireless Communications, 2024. 94 | 95 | S. Zhang, B. Choi, F. Ouyang and Z. Ding, "Physics-Inspired Machine Learning for Radiomap Reconstruction: Integration of Radio Propagation Models and Artificial Intelligence", in IEEE Communications Magazine, 2024. 96 | 97 | ## Contact 98 | Please contact Yibo Ma and Tianhang Yu for more information regarding the BRAT-Lab Dataset if you have any questions. 99 | 100 | Email: boma@ucdavis.edu; thgyu@ucdavis.edu. 101 | -------------------------------------------------------------------------------- /Simulation/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # Define library. Only source files here! 2 | set(PROJECT_NAME APIExampleCPPNetworkPlanning5G_TDD) 3 | set(PROJECT_DESC "Example of computing a 5G-TDD network planning using the Altair WinProp CPP API") 4 | 5 | cmake_minimum_required(VERSION 3.9) 6 | 7 | project("${PROJECT_NAME}" 8 | DESCRIPTION ${PROJECT_DESC} 9 | LANGUAGES CXX C) 10 | 11 | add_library( Engine SHARED IMPORTED ) 12 | if(NOT WIN32) 13 | set_target_properties( Engine PROPERTIES 14 | IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../../bin/libEngine.so" 15 | ) 16 | else(NOT WIN32) 17 | set_target_properties( Engine PROPERTIES 18 | IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../../export/winprop/64/Engine.dll" 19 | IMPORTED_IMPLIB "${PROJECT_SOURCE_DIR}/../../export/winprop/64/Engine.lib" 20 | ) 21 | endif(NOT WIN32) 22 | 23 | add_library( EngineNet SHARED IMPORTED ) 24 | if(NOT WIN32) 25 | set_target_properties( EngineNet PROPERTIES 26 | IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../../bin/libEngineNet.so" 27 | ) 28 | else(NOT WIN32) 29 | set_target_properties( EngineNet PROPERTIES 30 | IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../../export/winprop/64/EngineNet.dll" 31 | IMPORTED_IMPLIB "${PROJECT_SOURCE_DIR}/../../export/winprop/64/EngineNet.lib" 32 | ) 33 | endif(NOT WIN32) 34 | 35 | 36 | add_executable(${PROJECT_NAME} 37 | "${PROJECT_SOURCE_DIR}/network_planning_5g_tdd.cpp" 38 | "${PROJECT_SOURCE_DIR}/network_planning_5g_tdd.h") 39 | 40 | # Definition of Macros 41 | target_compile_definitions(${PROJECT_NAME} PRIVATE 42 | $<$:_DEBUG> 43 | 44 | _CRT_SECURE_NO_WARNINGS 45 | 46 | _WINPROP_API_ 47 | API_DATA_FOLDER=\"${PROJECT_SOURCE_DIR}/../../data/\" 48 | 49 | # Visual Studio character set "not set" 50 | _SBCS 51 | 52 | # library exports 53 | 54 | # library imports 55 | _DLL_ENGINE_IMPORT 56 | _DLL_WP_NET_IMPORT 57 | ) 58 | 59 | if(NOT WIN32) 60 | target_compile_definitions(${PROJECT_NAME} PRIVATE 61 | __LINUX 62 | _NO_MFC 63 | ) 64 | endif() 65 | 66 | target_include_directories(${PROJECT_NAME} PRIVATE 67 | "${PROJECT_SOURCE_DIR}/../../source" 68 | "${PROJECT_SOURCE_DIR}/../../source/Public" 69 | ) 70 | 71 | # If we have compiler requirements for this library, list them 72 | # here 73 | target_compile_features(${PROJECT_NAME} 74 | PUBLIC cxx_auto_type 75 | PRIVATE cxx_variadic_templates) 76 | 77 | # Depend on a library that we defined in the top-level file 78 | target_link_libraries(${PROJECT_NAME} PRIVATE 79 | Engine 80 | EngineNet) 81 | 82 | set_target_properties(${PROJECT_NAME} 83 | PROPERTIES 84 | RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../../bin 85 | RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/../../bin 86 | RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/../../bin 87 | OUTPUT_NAME ${PROJECT_NAME} 88 | OUTPUT_NAME_DEBUG "${PROJECT_NAME}_debug" 89 | ) -------------------------------------------------------------------------------- /Simulation/network_planning_5g_tdd.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #include "network_planning_5g_tdd.h" 7 | 8 | #define API_DATA_FOLDER "C:/Users/Administrator/PycharmProjects/Data/" 9 | 10 | #define SERVICES_5G 1 11 | #define MAX_CELLS 9 12 | 13 | int main(int argc, char** argv) 14 | { 15 | for (int i = 1; i <= 100; ++i) { 16 | int Error = 0; 17 | int ProjectHandle = 0; 18 | int ParaValueInt = 0; 19 | double ParaValueDouble = 0.; 20 | 21 | // ------ General and Propagation and Network Planing Parameters ------ // 22 | WinProp_ParaMain GeneralParameters; 23 | WinProp_Pattern WinPropPattern[MAX_CELLS]; 24 | WinProp_Antenna Antenna[MAX_CELLS]; 25 | WinProp_Carrier Carrier[MAX_CELLS]; 26 | 27 | // Propagation results 28 | WinProp_Result PropResults[MAX_CELLS]; 29 | 30 | // Prediction heights 31 | int NrPredictionHeights = 1; 32 | double PredictionHeights[1] = { 30.0 }; 33 | 34 | // ---------------------- Initialisation of parameters ---------------- // 35 | WinProp_Structure_Init_ParameterMain(&GeneralParameters); 36 | 37 | for (int cell = 0; cell < MAX_CELLS; cell++) 38 | { 39 | WinProp_Structure_Init_Pattern(&WinPropPattern[cell]); 40 | WinProp_Structure_Init_Antenna(&Antenna[cell]); 41 | WinProp_Structure_Init_Carrier(&Carrier[cell]); 42 | WinProp_Structure_Init_Result(&PropResults[cell]); 43 | } 44 | 45 | // ---------------- Definition of parameters -------------------------- // 46 | // Definition of scenario. 47 | GeneralParameters.BuildingsMode = BUILDINGSMODE_BINARY; // load a .odb database 48 | std::string my_odb_database_cstr = std::string(API_DATA_FOLDER) + "high_resolution_urbanmap_odbdata/map" + std::to_string(i);// name of .odb database without extensions 49 | const char* my_odb_database = my_odb_database_cstr.c_str(); 50 | sprintf(GeneralParameters.BuildingsName, "%s", my_odb_database); 51 | GeneralParameters.ScenarioMode = SCENARIOMODE_URBAN; // Urban prediction 52 | GeneralParameters.PredictionModelUrban = PREDMODEL_UDP; // Use IRT Model 53 | GeneralParameters.BuildingsMaterialsInd = 1; // Individual material properties for buildings 54 | GeneralParameters.VegetationMode = VEGETATION_BUILDING; // vegetation from building database 55 | GeneralParameters.VegetationPropertiesInd = 1; // Individual material properties for vegetation 56 | 57 | // Size of matrix with results. 58 | GeneralParameters.Resolution = 2; // Resolution in meter 59 | GeneralParameters.NrLayers = NrPredictionHeights; // Number of prediction heights 60 | GeneralParameters.PredictionHeights = PredictionHeights; // Prediction height in meter 61 | 62 | //// Get prediction area. 63 | 64 | int NumberCorners; 65 | int DatabaseFileType = DATABASE_TYPE_WINPROP_ODB; 66 | struct COORDPOINT* Polygon; 67 | double* Resolution = &GeneralParameters.Resolution; 68 | int NumberHeights = 0; 69 | int PolygonUsed = 0; 70 | 71 | OutdoorPlugIn_ReadPredictionArea(my_odb_database, &NumberCorners, &Polygon, DatabaseFileType, Resolution, &NumberHeights, nullptr, &PolygonUsed); 72 | 73 | //for (int i = 0; i < NumberCorners; ++i) { 74 | // std::cout << "Polygon[" << i << "].x: " << Polygon[i].x << std::endl; 75 | // std::cout << "Polygon[" << i << "].y: " << Polygon[i].y << std::endl; 76 | // std::cout << "Polygon[" << i << "].z: " << Polygon[i].z << std::endl; 77 | //} 78 | 79 | //return 0; 80 | 81 | //// Definition of prediction area. 82 | 83 | GeneralParameters.UrbanLowerLeftX = Polygon[0].x; 84 | GeneralParameters.UrbanLowerLeftY = Polygon[0].y; 85 | GeneralParameters.UrbanUpperRightX = Polygon[2].x; 86 | GeneralParameters.UrbanUpperRightY = Polygon[2].y; 87 | 88 | // Copy coordinates to prediction area of second model (not yet used). 89 | double LowerLeftX = GeneralParameters.UrbanLowerLeftX; 90 | double LowerLeftY = GeneralParameters.UrbanLowerLeftY; 91 | double UpperRightX = GeneralParameters.UrbanUpperRightX; 92 | double UpperRightY = GeneralParameters.UrbanUpperRightY; 93 | 94 | // Break point parameters 95 | GeneralParameters.BreakpointMode = BREAKPOINT_DEFAULT; 96 | GeneralParameters.BreakpointFactor = 4.; 97 | GeneralParameters.BreakpointOffset = 0; 98 | GeneralParameters.Resolution = 2; // Resolution in meter 99 | // Selection of paths 100 | GeneralParameters.MaxPathLossEnabled = 1; 101 | GeneralParameters.MaxPathLoss = 200.f; 102 | GeneralParameters.MaxDynamicPathsEnabled = 1; 103 | GeneralParameters.MaxDynamicPaths = 100.f; 104 | GeneralParameters.MaxNumberPathsUsed = 1; 105 | GeneralParameters.MaxNumberPaths = 20; 106 | 107 | // Antenna patten 108 | WinPropPattern[0].Mode = PATTERN_MODE_FILE; // Load pattern from file 109 | char PatternFileName[500]; 110 | sprintf(PatternFileName, "%s", API_DATA_FOLDER "antennas/18dBi.msi"); 111 | WinPropPattern[0].Filename = PatternFileName; // Pattern file 112 | 113 | // Desired propagation results in WinProp result format 114 | WinProp_Propagation_Results OutputResults; 115 | WinProp_Structure_Init_Propagation_Results(&OutputResults); 116 | char ResultPath[500]; 117 | sprintf(ResultPath, "%s", API_DATA_FOLDER "output/propagation"); 118 | OutputResults.ResultPath = ResultPath; // Output data directory 119 | OutputResults.Delay = 0; 120 | OutputResults.StatusLOS = 0; 121 | OutputResults.AdditionalResultsASCII = 1; 122 | GeneralParameters.OutputResults = &OutputResults; 123 | 124 | // Callback functions. 125 | WinProp_Callback Callback; 126 | Callback.Percentage = CallbackProgress; 127 | Callback.Message = CallbackMessage; 128 | Callback.Error = CallbackError; 129 | 130 | //-------------------------------------------------------------------------- 131 | // Compute wave propagation for cells 132 | //-------------------------------------------------------------------------- 133 | 134 | //// ---------------- Define IRT parameters -------------------------- // 135 | //Model_UrbanIRT ParameterIRT; 136 | //WinProp_Structure_Init_Model_IRT(&ParameterIRT); 137 | 138 | //// set path loss exponents 139 | //ParameterIRT.BreakpointExponentBeforeLOS = 2.3; 140 | //ParameterIRT.BreakpointExponentAfterLOS = 3.3; 141 | //ParameterIRT.BreakpointExponentBefore = 2.5; 142 | //ParameterIRT.BreakpointExponentAfter = 3.3; 143 | 144 | //// Number of interactions 145 | //ParameterIRT.MaxReflections = 2; 146 | //ParameterIRT.MaxDiffractions = 1; 147 | //ParameterIRT.MaxScatterings = 0; 148 | //ParameterIRT.MaxSumReflDiff = 2; 149 | 150 | //// Superposition and diffraction mode 151 | //ParameterIRT.Superposition = 0; 152 | //ParameterIRT.DiffractionModel = 'e'; 153 | //ParameterIRT.PostProcessingMode = 0; 154 | //ParameterIRT.Postprocessing = 0; 155 | //ParameterIRT.FreeSpaceCancel = 0; 156 | 157 | // -------------------------- antennas -------------------------------- // 158 | // Position and configuration of the antennas (cells). 159 | double Position1x = LowerLeftX + 1.0 / 4 * (UpperRightX - LowerLeftX); 160 | double Position1y = LowerLeftY + 3.0 / 4 * (UpperRightY - LowerLeftY); 161 | double Position2x = LowerLeftX + 3.0 / 4 * (UpperRightX - LowerLeftX); 162 | double Position2y = LowerLeftY + 3.0 / 4 * (UpperRightY - LowerLeftY); 163 | double Position3x = LowerLeftX + 1.0 / 2 * (UpperRightX - LowerLeftX); 164 | double Position3y = LowerLeftY + 1.0 / 4 * (UpperRightY - LowerLeftY); 165 | 166 | char AntennaName[MAX_CELLS][500] = { "Cell_1_A1", "Cell_1_A2", "Cell_1_A3", "Cell_2_A1", "Cell_2_A2", "Cell_2_A3", "Cell_3_A1", "Cell_3_A2" , "Cell_3_A3" }; 167 | double SiteX[MAX_CELLS] = { Position1x, Position1x, Position1x, Position2x, Position2x, Position2x, Position3x, Position3x, Position3x }; 168 | double SiteY[MAX_CELLS] = { Position1y, Position1y, Position1y, Position2y, Position2y, Position2y, Position3y, Position3y, Position3y }; 169 | double SiteZ[MAX_CELLS] = { 15., 15., 15., 15., 15., 15., 15., 15., 15. }; 170 | double Power[MAX_CELLS] = { 46., 46., 46., 46., 46., 46., 46., 46., 46. }; // Power in dBm 171 | double Azmith[MAX_CELLS] = { 0., 120., 240., 0., 120., 240., 0., 120., 240. }; 172 | double Downtilt[MAX_CELLS] = { 10., 10., 10., 10., 10., 10., 10., 10., 10. }; 173 | double Frequency[MAX_CELLS] = { 4750.0 }; // same frequencies in MHz as will defined for the carriers (for network planning) 174 | int AntennaCarrier[MAX_CELLS] = { 1 }; 175 | 176 | for (int cell = 0; cell < MAX_CELLS; cell++) 177 | { 178 | // set antenna pattern 179 | Antenna[cell].Pattern = &WinPropPattern[0]; 180 | 181 | // Set antenna properties now. 182 | AntennaPropertiesSet(&Antenna[cell], SiteX[cell], SiteY[cell], SiteZ[cell], Frequency[0], AntennaName[cell], 183 | Power[cell], WINPROP_POWER_OUTPUT, WINPROP_MODEL_DPM, Azmith[cell], Downtilt[cell], cell + 1); 184 | 185 | Carrier[cell].CarrierID = AntennaCarrier[0]; 186 | Carrier[cell].NrAntennaBeams = 1; 187 | Carrier[cell].SymbolsPerSlot = 14; 188 | Carrier[cell].Numerology = 1; 189 | Carrier[cell].TDD_Slots_DL = 7; 190 | Carrier[cell].TDD_Slots_UL = 7; 191 | Carrier[cell].TDD_Slots_Flex = 0; 192 | Carrier[cell].BeamGainCtrlServer = 0.; 193 | Carrier[cell].BeamGainCtrlInterferer = 0.; 194 | Carrier[cell].BeamGainDataServer = 0.; 195 | Carrier[cell].BeamGainDataInterferer = 0.; 196 | 197 | CarrierPropertiesSet(&Antenna[cell], &Carrier[cell]); 198 | 199 | /*--------------------- Compute outdoor prediction ------------------------*/ 200 | Error = OutdoorPlugIn_ComputePrediction(&Antenna[cell], &GeneralParameters, NULL, NULL, NULL, NULL, &Callback, &PropResults[cell], NULL, NULL, NULL); 201 | 202 | /*---------------------- write propagation results ------------------------*/ 203 | if (Error == 0) 204 | { 205 | char NameForOutput[200]; 206 | sprintf(NameForOutput, "%s%s%s%s", API_DATA_FOLDER, "output/propagation/", Antenna[cell].Name, ".txt"); 207 | 208 | write_ascii(&PropResults[cell], NameForOutput); 209 | } 210 | else 211 | { 212 | /* Error during prediction. Print error message. */ 213 | CallbackError(GeneralParameters.ErrorMessageMain, Error); 214 | } 215 | } 216 | 217 | 218 | // -------------------- Network Planning Project ----------------------- / 219 | 220 | // Create a new network planning project based on 5G TDD air interface 221 | if (Error == 0) 222 | { 223 | Error = WinProp_Net_Project_Open(&ProjectHandle, NET_AIRINTERFACE_5G_TDD_GENERIC, NULL); 224 | } 225 | 226 | // Add all propagation maps which have been computed. 227 | if (Error == 0) 228 | { 229 | int MapIndex[MAX_CELLS]; 230 | for (int Count = 0; Count < MAX_CELLS; Count++) 231 | { 232 | if (Error == 0) 233 | { 234 | Error = WinProp_Net_PropagationMap_Add(ProjectHandle, &MapIndex[Count], &Antenna[Count], &PropResults[Count]); 235 | } 236 | } 237 | } 238 | 239 | // Set a name for the project. 240 | if (Error == 0) 241 | { 242 | char ProjectName[200]; 243 | sprintf(ProjectName, "%s", "TDD-5G"); 244 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_PROJECTNAME, NULL, NULL, ProjectName); 245 | } 246 | 247 | // ------------------- numerology ----------------------- // 248 | // Set numerology and bandwidth 249 | if (Error == 0) 250 | { 251 | ParaValueInt = NET_PARA_5G_NUMEROLOGY1_100MHZ_FR1; 252 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_BANDWIDTH_MODE_5G, NULL, &ParaValueInt, NULL); 253 | } 254 | 255 | // ------------------- TDD ----------------------- // 256 | if (Error == 0) 257 | { 258 | ParaValueInt = 1; // TDD mode 259 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_DUPLEX_SUBMODE, NULL, &ParaValueInt, NULL); 260 | 261 | } 262 | 263 | if (Error == 0) 264 | { 265 | ParaValueInt = 3; // TDD properties specified for each carrier individually 266 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_TDD_VARIABLE_SWITCH, NULL, &ParaValueInt, NULL); 267 | } 268 | 269 | // -------------------------- Carriers -------------------------------- // 270 | // Add carriers in n1 band. 271 | if (Error == 0) 272 | { 273 | double FrequencyUL = 0.; 274 | double FrequencyDL = 0.; 275 | double CarrierSeparation = 100.; 276 | for (int CurrentCarrier = 0; CurrentCarrier < 1; CurrentCarrier++) 277 | { 278 | FrequencyUL = Frequency[0] + (CurrentCarrier * CarrierSeparation); 279 | FrequencyDL = Frequency[0] + (CurrentCarrier * CarrierSeparation); 280 | Error = WinProp_Net_Carrier_Add(ProjectHandle, CurrentCarrier + 1); 281 | 282 | Error = WinProp_Net_Carrier_Para_Set( 283 | ProjectHandle, CurrentCarrier + 1, NET_PARA_CARRIER_FREQ_DL, &FrequencyDL, NULL, NULL); 284 | Error = WinProp_Net_Carrier_Para_Set( 285 | ProjectHandle, CurrentCarrier + 1, NET_PARA_CARRIER_FREQ_UL, &FrequencyUL, NULL, NULL); 286 | } 287 | } 288 | 289 | // Check if number of carriers is correct. 290 | if (Error == 0) 291 | { 292 | int NrCarriers = 0; 293 | Error = WinProp_Net_Project_Para_Get(ProjectHandle, NET_PARA_CARRIERS, NULL, &NrCarriers, NULL); 294 | if (Error == 0) 295 | { 296 | if (NrCarriers != 1) 297 | Error = 1; 298 | } 299 | } 300 | 301 | // ------------------------- Transmission modes --------------------------- // 302 | // Define 5G transmission modes 303 | if (Error == 0) 304 | { 305 | //const char* TransmissionMode_Name[SERVICES_5G] = { 306 | // "00 - QPSK - R 120", 307 | // "01 - QPSK - R 193", 308 | // "02 - QPSK - R 308", 309 | // "03 - QPSK - R 449", 310 | // "04 - QPSK - R 602", 311 | // "06 - 16 QAM - R 378", 312 | // "07 - 16 QAM - R 490", 313 | // "08 - 16 QAM - R 658", 314 | // "09 - 64 QAM - R 466", 315 | // "10 - 64 QAM - R 666", 316 | // "11 - 64 QAM - R 873", 317 | // "12 - 256 QAM - R 797", 318 | // "13 - 256 QAM - R 948" }; 319 | //double TransmissionMode_Bitrate[SERVICES_5G] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 320 | //double TransmissionMode_SNIR[SERVICES_5G] = { -3.0, -2.0, -1.0, 0.0, 2.0, 7.0, 10.0, 12.0, 13.0, 16.0, 18.0, 22.0, 27.0 }; 321 | //int TransmissionMode_Coderate_K[SERVICES_5G] = { 120, 193, 308, 449, 602, 378, 490, 658, 466, 666, 873, 797, 948 }; 322 | //int TransmissionMode_Coderate_N[SERVICES_5G] = { 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024 }; 323 | //int TransmissionMode_MCS[SERVICES_5G] = { 2, 2, 2, 2, 2, 4, 4, 4, 6, 6, 6, 8, 8 }; 324 | //double TransmissionMode_Backoff[SERVICES_5G] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.0, 3.0, 3.0, 3.0, 3.0 }; 325 | //int TransmissionMode_Resource_Blocks_DL[SERVICES_5G] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; 326 | //int TransmissionMode_Resource_Blocks_UL[SERVICES_5G] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1, 1 }; 327 | //double TransmissionMode_Overhead_Ratio_DL[SERVICES_5G] = { 14., 14., 14., 14., 14., 14., 14., 14., 14., 14., 14., 14. , 14. }; 328 | //double TransmissionMode_Overhead_Ratio_UL[SERVICES_5G] = { 8., 8., 8., 8., 8., 8., 8., 8., 8., 8., 8., 8., 8. }; 329 | 330 | const char* TransmissionMode_Name[SERVICES_5G] = { "07 - 16 QAM - R 490" }; 331 | double TransmissionMode_Bitrate[SERVICES_5G] = { 0 }; 332 | double TransmissionMode_SNIR[SERVICES_5G] = { 10.0 }; 333 | int TransmissionMode_Coderate_K[SERVICES_5G] = { 490 }; 334 | int TransmissionMode_Coderate_N[SERVICES_5G] = { 1024 }; 335 | int TransmissionMode_MCS[SERVICES_5G] = { 4 }; 336 | double TransmissionMode_Backoff[SERVICES_5G] = { 0.0 }; 337 | int TransmissionMode_Resource_Blocks_DL[SERVICES_5G] = { 1 }; 338 | int TransmissionMode_Resource_Blocks_UL[SERVICES_5G] = { 1 }; 339 | double TransmissionMode_Overhead_Ratio_DL[SERVICES_5G] = { 14. }; 340 | double TransmissionMode_Overhead_Ratio_UL[SERVICES_5G] = { 8. }; 341 | 342 | for (int CurrentService = 0; CurrentService < SERVICES_5G; CurrentService++) 343 | { 344 | // Add new service. 345 | char ServiceName[100]; 346 | sprintf(ServiceName, "%s", TransmissionMode_Name[CurrentService]); 347 | Error = WinProp_Net_TransmissionMode_Add(ProjectHandle, ServiceName, CurrentService); 348 | 349 | // Set position/priority. 350 | ParaValueInt = SERVICES_5G - CurrentService; 351 | Error = WinProp_Net_TransmissionMode_Para_Set( 352 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_POSITION, NULL, &ParaValueInt, NULL); 353 | 354 | // Set bitrate. 355 | ParaValueDouble = TransmissionMode_Bitrate[CurrentService]; 356 | Error = WinProp_Net_TransmissionMode_Para_Set( 357 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_BITRATE_DL, &ParaValueDouble, NULL, NULL); 358 | Error = WinProp_Net_TransmissionMode_Para_Set( 359 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_BITRATE_UL, &ParaValueDouble, NULL, NULL); 360 | 361 | // Set code rate. 362 | ParaValueInt = TransmissionMode_Coderate_K[CurrentService]; 363 | Error = WinProp_Net_TransmissionMode_Para_Set( 364 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_CODERATE_K_DL, NULL, &ParaValueInt, NULL); 365 | Error = WinProp_Net_TransmissionMode_Para_Set( 366 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_CODERATE_K_UL, NULL, &ParaValueInt, NULL); 367 | 368 | ParaValueInt = TransmissionMode_Coderate_N[CurrentService]; 369 | Error = WinProp_Net_TransmissionMode_Para_Set( 370 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_CODERATE_N_DL, NULL, &ParaValueInt, NULL); 371 | Error = WinProp_Net_TransmissionMode_Para_Set( 372 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_CODERATE_N_UL, NULL, &ParaValueInt, NULL); 373 | 374 | // Set number of resource blocks. 375 | ParaValueInt = TransmissionMode_Resource_Blocks_DL[CurrentService]; 376 | Error = WinProp_Net_TransmissionMode_Para_Set( 377 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_RESOURCE_BLOCKS_DL, NULL, &ParaValueInt, NULL); 378 | ParaValueInt = TransmissionMode_Resource_Blocks_UL[CurrentService]; 379 | Error = WinProp_Net_TransmissionMode_Para_Set( 380 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_RESOURCE_BLOCKS_UL, NULL, &ParaValueInt, NULL); 381 | 382 | // Set overhead ratio. 383 | ParaValueDouble = TransmissionMode_Overhead_Ratio_UL[CurrentService]; 384 | Error = WinProp_Net_TransmissionMode_Para_Set( 385 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_OVERHEAD_RATIO_UL, &ParaValueDouble, NULL, NULL); 386 | ParaValueDouble = TransmissionMode_Overhead_Ratio_DL[CurrentService]; 387 | Error = WinProp_Net_TransmissionMode_Para_Set( 388 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_OVERHEAD_RATIO_DL, &ParaValueDouble, NULL, NULL); 389 | 390 | // Set required SNIR. 391 | ParaValueDouble = TransmissionMode_SNIR[CurrentService]; 392 | Error = WinProp_Net_TransmissionMode_Para_Set( 393 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_SNIR_DL, &ParaValueDouble, NULL, NULL); 394 | Error = WinProp_Net_TransmissionMode_Para_Set( 395 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_SNIR_UL, &ParaValueDouble, NULL, NULL); 396 | 397 | // Set modulation scheme. 398 | ParaValueInt = TransmissionMode_MCS[CurrentService]; 399 | Error = WinProp_Net_TransmissionMode_Para_Set( 400 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_MODULATION_UL, NULL, &ParaValueInt, NULL); 401 | Error = WinProp_Net_TransmissionMode_Para_Set( 402 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_MODULATION_DL, NULL, &ParaValueInt, NULL); 403 | 404 | // Set power backoff. 405 | ParaValueDouble = TransmissionMode_Backoff[CurrentService]; 406 | Error = WinProp_Net_TransmissionMode_Para_Set( 407 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_POWER_BACKOFF_UL, &ParaValueDouble, NULL, NULL); 408 | Error = WinProp_Net_TransmissionMode_Para_Set( 409 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_POWER_BACKOFF_DL, &ParaValueDouble, NULL, NULL); 410 | 411 | // Get bitrate in kBit/s for current transmission mode. Bitrate is automatically computed based 412 | // on parameters previously set and general air interface parameters. 413 | Error = WinProp_Net_TransmissionMode_Para_Get( 414 | ProjectHandle, CurrentService, NET_PARA_TRANS_MODE_BITRATE_DL, &ParaValueDouble, NULL, NULL); 415 | TransmissionMode_Bitrate[CurrentService] = ParaValueDouble; 416 | } 417 | } 418 | 419 | // Check if number of services is correct. 420 | if (Error == 0) 421 | { 422 | int NrServices = 0; 423 | Error = WinProp_Net_Project_Para_Get(ProjectHandle, NET_PARA_SERVICES, NULL, &NrServices, NULL); 424 | if (Error == 0) 425 | { 426 | if (NrServices != SERVICES_5G) 427 | Error = 1; 428 | } 429 | } 430 | 431 | // -------------------------- Project parameters -------------------------- // 432 | 433 | // Set resolution for result matrix. 434 | if (Error == 0) 435 | { 436 | ParaValueDouble = GeneralParameters.Resolution; 437 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_RESOLUTION, &ParaValueDouble, NULL, NULL); 438 | } 439 | // Set the simulation area 440 | if (Error == 0) 441 | { 442 | ParaValueDouble = GeneralParameters.UrbanLowerLeftX; 443 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_AREA_LL_X, &ParaValueDouble, NULL, NULL); 444 | } 445 | if (Error == 0) 446 | { 447 | ParaValueDouble = GeneralParameters.UrbanLowerLeftY; 448 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_AREA_LL_Y, &ParaValueDouble, NULL, NULL); 449 | } 450 | if (Error == 0) 451 | { 452 | ParaValueDouble = GeneralParameters.UrbanUpperRightX; 453 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_AREA_UR_X, &ParaValueDouble, NULL, NULL); 454 | } 455 | if (Error == 0) 456 | { 457 | ParaValueDouble = GeneralParameters.UrbanUpperRightY; 458 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_AREA_UR_Y, &ParaValueDouble, NULL, NULL); 459 | } 460 | 461 | // Set paths for additional output in WinProp file format. 462 | if (Error == 0) 463 | { 464 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_OUTPUT_WINPROP, NULL, NULL, API_DATA_FOLDER "output/network"); 465 | } 466 | 467 | // ------------------------ Cell assignment ------------------------------ // 468 | if (Error == 0) 469 | { 470 | int IntValue = 0; // highest Rx power for all carries mode 471 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_CELL_ASSIGNMENT_MODE, NULL, &IntValue, NULL); 472 | } 473 | 474 | // Set Min required SNIR 475 | if (Error == 0) 476 | { 477 | ParaValueDouble = -5.4; 478 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_CELL_ASSIGNMENT_MIN_REQ_SNIR, &ParaValueDouble, NULL, NULL); 479 | } 480 | 481 | // Set Min required power 482 | if (Error == 0) 483 | { 484 | ParaValueDouble = -95.; 485 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_CELL_ASSIGNMENT_MIN_REQ_POWER, &ParaValueDouble, NULL, NULL); 486 | } 487 | 488 | 489 | // ----------------------- OFDM parameters -------------------------------- // 490 | // Set control sub-carriers 491 | if (Error == 0) 492 | { 493 | ParaValueInt = 2500; 494 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_SUBCARRIERS_CONTROL, NULL, &ParaValueInt, NULL); 495 | } 496 | 497 | // Set reference sub-carriers 498 | if (Error == 0) 499 | { 500 | ParaValueInt = 500; 501 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_SUBCARRIERS_REFERENCE, NULL, &ParaValueInt, NULL); 502 | } 503 | 504 | // Set Guard sub-carriers 505 | if (Error == 0) 506 | { 507 | ParaValueInt = 29; 508 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_SUBCARRIERS_GUARD, NULL, &ParaValueInt, NULL); 509 | } 510 | 511 | // Set data symbols 512 | if (Error == 0) 513 | { 514 | ParaValueInt = 10; 515 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_SYMBOLS_DATA, NULL, &ParaValueInt, NULL); 516 | } 517 | 518 | // Set control symbols 519 | if (Error == 0) 520 | { 521 | ParaValueInt = 1; 522 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_SYMBOLS_CONTROL, NULL, &ParaValueInt, NULL); 523 | } 524 | 525 | // Set reference symbols 526 | if (Error == 0) 527 | { 528 | ParaValueInt = 3; 529 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_SYMBOLS_REFERENCE, NULL, &ParaValueInt, NULL); 530 | } 531 | 532 | // Set FFT order 533 | if (Error == 0) 534 | { 535 | ParaValueInt = 4096; 536 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_FFT_SIZE, NULL, &ParaValueInt, NULL); 537 | } 538 | 539 | // Desired network planning results in WinProp result format 540 | //if (Error == 0) 541 | //{ 542 | // Error = WinProp_Net_Project_Result_Switch(ProjectHandle, NET_RESULT_REC_POWER, 1); 543 | // Error = WinProp_Net_Project_Result_Switch(ProjectHandle, NET_RESULT_OFDM_POWER, 1); 544 | // Error = WinProp_Net_Project_Result_Switch(ProjectHandle, NET_RESULT_MAX_THROUGHPUT, 1); 545 | // Error = WinProp_Net_Project_Result_Switch(ProjectHandle, NET_RESULT_SNIR, 1); 546 | //} 547 | 548 | //-------------------------------------------------------------------------- 549 | // Compute network planning results 550 | //-------------------------------------------------------------------------- 551 | if (Error == 0) 552 | { 553 | char HeightString[200]; 554 | sprintf(HeightString, "%s", ""); 555 | 556 | // Generate string with height values, e.g. a string like "1.5 2.5 3.5". 557 | for (int Height = 0; Height < NrPredictionHeights; Height++) 558 | { 559 | // Add current height to string. 560 | sprintf(HeightString, "%s%.2f ", HeightString, PredictionHeights[Height]); 561 | } 562 | 563 | // Send heights to WinProp API. 564 | Error = WinProp_Net_Project_Para_Set(ProjectHandle, NET_PARA_HEIGHT_MULTIPLE, NULL, NULL, HeightString); 565 | 566 | // Start network computation. 567 | if (Error == 0) 568 | { 569 | Error = WinProp_Net_Project_Compute(ProjectHandle, &Callback); 570 | } 571 | } 572 | 573 | // ------------------------------------------------------------------------ 574 | // Retrieve results 575 | // ------------------------------------------------------------------------ 576 | // As an example: retrieve max. throughput (kbps) per pixel. 577 | if (Error == 0) 578 | { 579 | WinProp_Result* TOTAL_REC = NULL; 580 | Error = WinProp_Net_NetworkMap_Get(ProjectHandle, -1, NET_RESULT_TOTAL_REC, &TOTAL_REC); 581 | 582 | // Write max. throughput result to ASCII file. 583 | if (Error == 0) 584 | { 585 | char NameForOutput[200]; 586 | sprintf(NameForOutput, "%s%s%d.txt", API_DATA_FOLDER, "high_resolution_receivedpower_4750MHz/TOTAL_REC_4750MHz_", i); 587 | write_ascii(TOTAL_REC, NameForOutput); 588 | } 589 | 590 | } 591 | 592 | 593 | // ------------------------------------------------------------------------ 594 | // Free memory 595 | // ------------------------------------------------------------------------ 596 | for (int Count = 0; Count < MAX_CELLS; Count++) 597 | { 598 | // Free propagation results. 599 | WinProp_FreeResult(&PropResults[Count]); 600 | } 601 | 602 | // Close network project. 603 | Error = WinProp_Net_Project_Close(ProjectHandle); 604 | //return 0; 605 | } 606 | } 607 | 608 | int _STD_CALL CallbackMessage(const char* Text) 609 | { 610 | if (Text == nullptr) 611 | return 0; 612 | 613 | std::cout << "\n" << Text; 614 | 615 | return(0); 616 | } 617 | 618 | int _STD_CALL CallbackError(const char* Text, int Error) 619 | { 620 | if (Text == nullptr) 621 | return 0; 622 | 623 | std::cout << "\n"; 624 | 625 | #ifdef __LINUX 626 | std::cout << "\033[31m" << "Error (" << Error << "): "; // highlight error in red color 627 | #else 628 | HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 629 | SetConsoleTextAttribute(hConsole, FOREGROUND_RED); 630 | std::cout << "Error (" << Error << "): "; 631 | #endif // __LINUX 632 | std::cout << Text; 633 | 634 | #ifdef __LINUX 635 | std::cout << "\033[0m"; // highlight error in red color 636 | #else 637 | SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN); 638 | #endif // __LINUX 639 | 640 | return 0; 641 | } 642 | 643 | int _STD_CALL CallbackProgress(int value, const char* text) 644 | { 645 | char Line[200]; 646 | 647 | sprintf(Line, "\n%d%% %s", value, text); 648 | std::cout << Line; 649 | 650 | return(0); 651 | } 652 | 653 | // Helper functions 654 | void write_ascii(const WinProp_Result* Resultmatrix, const char* Filename) { 655 | 656 | if (Resultmatrix) 657 | { 658 | FILE* OutputFile = fopen(Filename, "w"); 659 | if (OutputFile) 660 | { 661 | /* Loop through WinPropall pixels. */ 662 | for (int x = 0; x < Resultmatrix->Columns; x++) 663 | { 664 | for (int y = 0; y < Resultmatrix->Lines; y++) 665 | { 666 | /* Compute real coordinates. */ 667 | double Coordinate_X = Resultmatrix->LowerLeftX + ((double)x + 0.5) * Resultmatrix->Resolution; 668 | double Coordinate_Y = Resultmatrix->LowerLeftY + ((double)y + 0.5) * Resultmatrix->Resolution; 669 | 670 | /* Check if pixel was computed or not */ 671 | if (Resultmatrix->Matrix[0][x][y] > -1000) 672 | { 673 | fprintf(OutputFile, "%.5f\t%.5f\t%.4f\n", Coordinate_X, Coordinate_Y, Resultmatrix->Matrix[0][x][y]); 674 | } 675 | else 676 | { 677 | fprintf(OutputFile, "%.5f\t%.5f\t%s\n", Coordinate_X, Coordinate_Y, "N.C."); 678 | } 679 | } 680 | } 681 | 682 | /* Close file. */ 683 | fclose(OutputFile); 684 | } 685 | else 686 | { 687 | printf("\nCould not open the File: %s for writing.\n", Filename); 688 | } 689 | } 690 | } 691 | 692 | void AntennaPropertiesSet( 693 | WinProp_Antenna* Antenna, 694 | double CoordinateX, 695 | double CoordinateY, 696 | double Height, 697 | double Frequency, 698 | char* Name, 699 | double Power, 700 | int PowerMode, 701 | int Model, 702 | double Azimuth, 703 | double Downtilt, 704 | int Id) 705 | { 706 | Antenna->Longitude_X = CoordinateX; 707 | Antenna->Latitude_Y = CoordinateY; 708 | Antenna->Height = Height; 709 | Antenna->Power = Power; 710 | Antenna->PowerMode = PowerMode; 711 | Antenna->Frequency = Frequency; 712 | Antenna->Name = Name; 713 | Antenna->Model = Model; 714 | Antenna->Azimuth = Azimuth; 715 | Antenna->Downtilt = Downtilt; 716 | Antenna->Id = Id; 717 | } 718 | 719 | void CarrierPropertiesSet(WinProp_Antenna* Antenna, const WinProp_Carrier* Carrier) { 720 | 721 | Antenna->Carriers.CarrierID = Carrier->CarrierID; 722 | Antenna->Carriers.SystemID = Carrier->SystemID; 723 | Antenna->Carriers.CellLoad = Carrier->CellLoad; 724 | Antenna->Carriers.MimoID = Carrier->MimoID; 725 | 726 | Antenna->Carriers.NoiseRiseUL = Carrier->NoiseRiseUL; 727 | Antenna->Carriers.PowerBackoffPilotDL = Carrier->PowerBackoffPilotDL; 728 | 729 | // 5G Carrier parameters 730 | Antenna->Carriers.Numerology = Carrier->Numerology; 731 | Antenna->Carriers.SymbolsPerSlot = Carrier->SymbolsPerSlot; 732 | Antenna->Carriers.NrAntennaBeams = Carrier->NrAntennaBeams; 733 | Antenna->Carriers.BeamGainCtrlServer = Carrier->BeamGainCtrlServer; 734 | Antenna->Carriers.BeamGainCtrlInterferer = Carrier->BeamGainCtrlInterferer; 735 | Antenna->Carriers.BeamGainDataServer = Carrier->BeamGainDataServer; 736 | Antenna->Carriers.BeamGainDataInterferer = Carrier->BeamGainDataInterferer; 737 | Antenna->Carriers.TDD_Slots_DL = Carrier->TDD_Slots_DL; 738 | Antenna->Carriers.TDD_Slots_UL = Carrier->TDD_Slots_UL; 739 | Antenna->Carriers.TDD_Slots_Flex = Carrier->TDD_Slots_Flex; 740 | } -------------------------------------------------------------------------------- /Simulation/network_planning_5g_tdd.h: -------------------------------------------------------------------------------- 1 | #ifndef NETWORK_PLANNING_5G_TDD__H 2 | #define NETWORK_PLANNING_5G_TDD__H 3 | 4 | #include "../Interface/OutdoorPlugIn.h" 5 | #include "../Net/Net.h" 6 | #include "../Interface/Init.h" 7 | 8 | // Callback functions 9 | int _STD_CALL CallbackMessage(const char *Text); 10 | int _STD_CALL CallbackProgress(int value, const char* text); 11 | int _STD_CALL CallbackError(const char *Message, int Mode); 12 | 13 | // Helper functions 14 | void write_ascii( 15 | const WinProp_Result *Resultmatrix, 16 | const char* Filename 17 | ); 18 | 19 | void AntennaPropertiesSet( 20 | WinProp_Antenna* Antenna, 21 | double CoordinateX, 22 | double CoordinateY, 23 | double Height, 24 | double Frequency, 25 | char* Name, 26 | double Power, 27 | int PowerMode, 28 | int Model, 29 | double Azimuth, 30 | double Downtilt, 31 | int Id 32 | ); 33 | 34 | void CarrierPropertiesSet( 35 | WinProp_Antenna* Antenna, 36 | const WinProp_Carrier* Carrier 37 | ); 38 | 39 | #endif // NETWORK_PLANNING_5G_TDD__H -------------------------------------------------------------------------------- /examples/3750MHz_1604_radiomap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/3750MHz_1604_radiomap.png -------------------------------------------------------------------------------- /examples/3750MHz_1604_urbanmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/3750MHz_1604_urbanmap.png -------------------------------------------------------------------------------- /examples/3750MHz_1700_radiomap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/3750MHz_1700_radiomap.png -------------------------------------------------------------------------------- /examples/3750MHz_1700_urbanmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/3750MHz_1700_urbanmap.png -------------------------------------------------------------------------------- /examples/5750MHz_2_radiomap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/5750MHz_2_radiomap.png -------------------------------------------------------------------------------- /examples/5750MHz_2_urbanmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/5750MHz_2_urbanmap.png -------------------------------------------------------------------------------- /examples/h5750_R24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/h5750_R24.png -------------------------------------------------------------------------------- /examples/h5750_R26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/h5750_R26.png -------------------------------------------------------------------------------- /examples/h5750_U24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/h5750_U24.png -------------------------------------------------------------------------------- /examples/h5750_U26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BRATLab-UCD/Radiomap-Data/23305f9758dfccab20c790f27cfdeed836fbe264/examples/h5750_U26.png --------------------------------------------------------------------------------