├── 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 | Urban Map1 |
23 | Radio Map1 |
24 |
25 |
26 |
27 |
28 |
29 |  |
30 |  |
31 |
32 |
33 | Urban Map2 |
34 | Radio Map2 |
35 |
36 |
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 | Urban Map1 |
53 | Radio Map1 |
54 |
55 |
56 |
57 |
58 |
59 |  |
60 |  |
61 |
62 |
63 | Urban Map2 |
64 | Radio Map2 |
65 |
66 |
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
--------------------------------------------------------------------------------