DeepMIMO v2 - Matlab and Octave

Table of Contents

DeepMIMO v2 Features

  • Includes all features of DeepMIMO v1

  • Optimized memory requirements and generation speed

  • Generates the channels between BSs and UEs

  • Generates the channels between BSs and BSs (enabling integrated access-backhaul, RIS, etc.)

  • Allows for multiple antennas at both the BSs and UEs

  • Allows for changing panel orientations at the BS and UEs

  • Allows for applying receiver filtering for more accurate channel generation 

  • Generates OFDM and time-domain channels

  • Outputs path parameters, path-loss, distances, among other possible outputs

  • Outputs transmitter/receiver locations

  • Available in Matlab, Octave, and Python

How Does it Work?

DeepMIMO v2 dataset generator processes the input ray-tracing file based on the parameters’ values specified in the DeepMIMO parameters file to generate the output dataset

 

Check the detailed documentation below for more information about the DeepMIMO v2 parameters and outputs

Download and Installation

Step 1: (Generator scripts)

  • Download DeepMIMO v2 MATLAB generator scripts.
  • Extract the file DeepMIMOv2.zip

Step 2: (Scenario)

  • Select and download a scenario from the scenarios page.
  • Extract scenario folder into the path DeepMIMOv2/Raytracing_scenarios/

Step 3: (Parameter Configuration)

  • Configure DeepMIMO parameters  in parameters.m file.

Step 4: (Data Generation)

  • Edit and run DeepMIMO_Dataset_Generator.m to configure and generate the dataset.

Input Parameters

scenario string

 

Name of the scenario to be loaded. To check and download available scenarios, please see the scenarios page.

scene_first, scene_last integers

 

[For dynamic scenarios] Determines the range of dynamic scenario scenes to be loaded [scene_first, scene_last]

active_BS integer array of active BSs

 

The ID of the basestations to be included in the dataset. The basestation IDs can be selected from the scenario description. In the final dataset, the activated basestations IDs are renumbered in the same order starting from 1 to the number of active basestations.

active_user_first, active_user_last integers

 

The range of rows are determined by these parameters. 

Specifically, the row of users with the ID in the range [active_user_first, active_user_last] are selected.

row_subsampling float in the range (0, 1]

 

This parameter determines the ratio of the rows to be activated within the interval [active_user_first, active_user_last].

Speficially, it randomly samples round(row_subsampling*(active_user_last-active_user_first)) rows within the given interval.

The value 1 activates all the rows within the interval.

user_subsampling float in the range (0,1)

 

This parameter determines the ratio of the users to be activated within the active rows determined by the parameters user_subsampling, active_user_first and active_user_last. In each row, it allows random sampling of round(user_subsampling*number_of_users_in_row) users for activation.

The value 1 activates all the users within the active rows.

num_ant_BS integer array of 3 dimensions, ant_spacing_BS float

 

The basestation antenna parameters. num_ant represent the number of antenna elements in x-y-z dimensions, e.g., [1, 4, 2]. The antenna spacing between array elements is determined as (ant_spacing x wavelength).

 

An antenna array (UPA) of (num_ant(1) x num_ant(2) x num_ant(3)) elements is adopted for each active basestation.

The axes of the antennas match the axes of the ray-tracing scenario.

 

If there are multiple active antennas, a matrix of 3 dimensional panel sizes can be given as input. For example, if basestations 3 and 4 are activated, the num_ant can be set as [[1, 1,  1]; [1, 4, 1]], equipping basestation 3 with a single antenna and basestation 4 with a ULA of 4 antenna elements.

num_ant_UE integer array of 3 dimensions, ant_spacing_UE float 

 

The UE antenna parameters. num_ant_UE represent the number of antenna elements in x-y-z dimensions, e.g., [1, 4, 2]. The antenna spacing between array elements is determined as (ant_spacing_UE x wavelength).

 

An antenna array (UPA) of (num_ant_UE(1) x num_ant_UE(2) x num_ant_UE(3)) elements is adopted for each active UE.

The axes of the antennas match the axes of the ray-tracing scenario.

activate_array_rotation boolean

 

This parameter activates the following BS and UE array rotation parameters. If it is set to 0, no rotation will be applied to any antenna array.

array_rotation_BS float array of 3 dimensions

 

The BS antenna array rotation parameters, which consists of three rotation angles (in degrees). These angles rotate the BS antenna array in the given angles around the local x, y, z axes, respectively. To assign the same array rotation parameters to all active BSs, the following variable setting can be applied.

				
					params.array_rotation_BS = [x_rot, y_rot, z_rot]
				
			

Alternative setting (different parameters for multiple BSs)

 

To assign different array rotation parameters to each active BS, set an N x 3 matrix, with N being the number of active BSs. For instance, with two active BSs, the following variable setting can be applied.

				
					params.array_rotation_BS = [x_rot_1, y_rot_1, z_rot_1;
                            x_rot_2, y_rot_2, z_rot_2]
				
			

array_rotation_UE float array of 3 dimensions

 

The UE antenna array rotation parameters, which consists of three rotation angles (in degrees). These angles rotate the UE antenna array in the given angles around the local x, y, z axes, respectively. To assign the same array rotation parameters to all UEs, the following variable setting can be applied.

				
					params.array_rotation_UE = [x_rot, y_rot, z_rot]
				
			

Alternative setting (random parameters)

 

To assign uniformly random array rotations to each UE, set a 3 x 2 matrix, where the first column defines the lower limits of the uniform distribution, and the second column defines the upper limits. For instance, for each UE, uniformly random values between the minimum and the maximum limits can be assigned for the array rotation angles as follows.

				
					params.array_rotation_UE = [x_rot_min, x_rot_max;
                            y_rot_min, y_rot_max;
                            y_rot_min, y_rot_max]
				
			

enable_BS2BSchannels boolean

 

Enable (1) or disable (0) generation of the channels between basestations

radiation_pattern boolean

 

(0) activate isotropic radiation patterns for each BS and user antenna element

(1) activate half-wave dipole radiation patterns for each BS and user antenna element

bandwidth float

 

Total bandwidth of the channel in GHz. 

activate_RX_filter boolean

 

Activate (1) receive LPF for OFDM channels.

generate_OFDM_channels boolean

 

(0) activate time domain (TD) channel impulse response generation.

(1) activate frequency domain (FD) channel generation for OFDM systems.

num_paths integer in [1, 25]

 

Maximum number of paths to be considered (a value between 1 and 25), e.g., choose 1 if you are only interested in the strongest path 

num_OFDM integer

 

Number of OFDM subcarriers (e.g., 256, 512, 1024)

OFDM_limit integerOFDM_sampling_factor integer

 

The constructed channels will be calculated only at the sampled subcarriers to reduce the size of the dataset. The first OFDM_limit subcarriers are subsampled with OFDM_sampling_factor spacing between the selected subcarriers.

For OFDM_limit = 64 and OFDM_sampling_factor = 8, the subcarriers {1, 9, 17, 26, 33, …} are subsampled from the available subcarriers {1, 2, …, 64}.

saveDataset boolean

 

Autosaving option for the dataset.

(1) The generated dataset will be saved to the file ‘./DeepMIMO_dataset/DeepMIMO_dataset.mat’

(0) The generated dataset will only be returned but not saved.

Output Parameters

Examples

Example 1: Introduction to the DeepMIMOv2 Generator

The functions used in this example

DeepMIMOv2_example_1

The main script used to illustrate 'Example 1'

DeepMIMOv2_example_1_params

The 'parameters' file used in generating 'Example 1' outputs

Example 2: Visualization of an Antenna Array Orientation

The functions used in this example

DeepMIMOv2_example_2

The main script used to illustrate 'Example 2'

DeepMIMOv2_example_2_params

The 'parameters' file used in generating 'Example 2' outputs

Visualize_ant_array_orientation

This function is used to visualize the antenna array orientation.

plotcube

Olivier (2022), PLOTCUBE, MATLAB Central File Exchange. Retrieved February 17, 2022.

Example 3: Time domain samples at discrete time steps

The functions used in this example

DeepMIMOv2_example_3_DT

The main script used to illustrate 'Example 3'

DeepMIMOv2_example_3_DT_params

The 'parameters' file used in generating 'Example 3' outputs

How Are the Channels Generated?

The following report provides a detailed formulation on the DeepMIMO v2 channel generation process

DeepMIMOv2 Channel Generation Report

The detailed formulation of the channel generation process in the DeepMIMO v2 dataset