DeepMIMO v2
- Matlab and Octave
- Python
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, etc.)
-
Allows for multiple antennas at both the BSs and UEs
-
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 parameters to generate the output dataset based on the parameters’ values specified in the DeepMIMO parameters file.
[Figure with the parameter list and possible outputs]
— outputs (on the figure) Generated datasets can include the information about
- MIMO OFDM wireless channels
- Locations of the users and basestations
- Path information (AoA, AoD, path loss etc.)
- Line-of-sight path availability
Check the detailed documentation below for more information about the DeepMIMO v2 parameters and outputs
How to Generate a DeepMIMO v2 Dataset?
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 check 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_x integer, num_ant_y integer, num_ant_z integer, ant_spacing float
The basestation antenna parameters. num_ant_x, num_ant_y, num_ant_z represent the number of antenna elements in x-y-z dimensions. The antenna spacing between array elements is determined as (ant_spacing x wavelength).
An antenna array (UPA) of (num_ant_x x num_ant_y x num_ant_z) elements is adopted for each active basestation.
The axes of the antennas match the axes of the ray-tracing scenario.
num_ant_MS_x integer, num_ant_MS_y integer, num_ant_MS_z integer, ant_spacing_MS float
The UE antenna parameters. num_ant_MS_x, num_ant_MS_y, num_ant_MS_z represent the number of antenna elements in x-y-z dimensions. The antenna spacing between array elements is determined as (ant_spacing_MS x wavelength).
An antenna array (UPA) of (num_ant_MS_x x num_ant_MS_y x num_ant_MS_z) elements is adopted for each active UE.
The axes of the antennas match the axes of the ray-tracing scenario.
enable_BS2BSchannels boolean
Enable (1) or disable (0) generation of the channels between basestations
bandwidth float
Total bandwidth of the channel in GHz.
transmit_power float
Basestation transmission power in dBm.
pulse_shaping integer in [1, 4]
Available pulse shaping choices:
(1) No pulse shaping and matched filter (Equivalent to DeepMIMO v1),
(2) sinc pulse shaping and matched filter,
(3) raised cosine pulse shaping and matched filter,
(4) user-defined pulse shaping and matched filter (Please edit the code in .\DeepMIMO_functions\userdefined_pulse.m).
activate_RX_ideal_LPF boolean
Activate (1) ideal receive LPF for pulse shaping choices 2, 3, and 4.
rolloff_factor float in [0, 1]
Raised cosine rolloff factor (a value between 0 and 1)
pulse_upsampling_factor integer
Upsampling factor for generating pulses and their convolution.
activate_FD_channels boolean
(0) activate time domain (TD) channel impulse response generation for non-OFDM systems
(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)
cyclic_prefix_ratio float in [0, 1]
Cyclic prefix ratio. The ratio of the cyclic prefix to the OFDM symbol length.
OFDM_limit,OFDM_sampling_factor integers
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}.
TDchannel_tap_length integer
Channel tap length to generate finite time domain channel impulse responses
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
Output Variables of Basestation i – User j
Channel Matrix
DeepMIMO_dataset{i}.user{j}.channel
Type and Dimensions:
(a) Frequency-domain channel matrix (activate_FD_channels=1)
Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of OFDM subcarriers)
(b) Time-domain channel matrix (activate_FD_channels=0)
Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of channel paths)
Description: The channel matrix between basestation i and user j. Each of the first two dimensions follows a certain reshaping sequence that can be obtained using the following function:
antennamap = antenna_channel_map(params.num_ant_x, params.num_ant_y, params.num_ant_z, 1);
Returns a vector antennamap; each entry in the vector has 3 integers in the form of ‘x y z’ representing the antenna index of the channel element in the x, y, z directions
Note: The DeepMIMO generator does not apply an array based normalization for the power. The details on the channel generation can be found in the channel generation document at the bottom of this page.
Line-of-Sight Status
DeepMIMO_dataset{i}.user{j}.LoS_status
Type and Dimensions: Integer of values {-1, 0, 1}
Description: The variable that indicates the existence of the LOS path in the channel.
The values correspond to
(1): The LoS path exists.
(0): Only NLoS paths exist. The LoS path is blocked (LoS blockage).
(-1): No paths exist between the transmitter and the receiver (Full blockage).
TX-RX Distance
DeepMIMO_dataset{i}.user{j}.distance
Type and Dimensions: Float
Description: The Euclidian distance between the RX and TX locations in meters.
Path loss
DeepMIMO_dataset{i}.user{j}.pathloss
Type and Dimensions: Float
Description: The combined path-loss of the channel between the RX and TX in dB.
User Location
DeepMIMO_dataset{i}.user{j}.loc
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
Basestation Location
DeepMIMO_dataset{i}.loc
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
User Rotation
DeepMIMO_dataset{i}.user{j}.rotation
Type and Dimensions: Float array of 3 dimensions
Description: The rotation applied to the UE antenna array in the form of [x_rot, y_rot, z_rot], corresponding to the three rotation angles (in degrees) around the local x-y-z axes
Basestation Rotation
DeepMIMO_dataset{i}.rotation
Type and Dimensions: Float array of 3 dimensions
Description: The rotation applied to the BS antenna array in the form of [x_rot, y_rot, z_rot], corresponding to the three rotation angles (in degrees) around the local x-y-z axes
Ray-tracing Path Parameters
DeepMIMO_dataset{i}.user{j}.path_params
Type and Dimensions: Structure
Description: The parameters of the ray tracing is provided within the struct. Specifically, for each path
- Azimuth and zenith angle-of-arrival (DoA_phi, DoA_theta)
- Azimuth and zenith angle-of-departure (DoD_phi, DoD_theta)
- Time of arrival (ToA)
- Phase (phase)
- Power (power)
- Number of paths (num_paths)
are provided in this struct.
Azimuth Angles of Departure
Type and Dimensions: Float array of size (number of channel paths)
Description: The azimuth angles (directions) of departure from basestation i, for every channel path traveling from basestation i to user j
DeepMIMO_dataset{i}.user{j}.path_params.DoD_phi
Zenith Angles of Departure
DeepMIMO_dataset{i}.user{j}.path_params.DoD_theta
Type and Dimensions: Float array of size (number of channel paths)
Description: The zenith angles (directions) of departure from basestation i, for every channel path traveling from basestation i to user j
Azimuth Angles of Arrival
DeepMIMO_dataset{i}.user{j}.path_params.DoA_phi
Type and Dimensions: Float array of size (number of channel paths)
Description: The azimuth angles (directions) of arrival at user j, for each channel path traveling from basestation i to user j
Zenith Angles of Arrival
DeepMIMO_dataset{i}.user{j}.path_params.DoA_theta
Type and Dimensions: Float array of size (number of channel paths)
Description: The zenith angles (directions) of arrival at user j, for each channel path traveling from basestation i to user j
Channel Path Power
DeepMIMO_dataset{i}.user{j}.path_params.power
Type and Dimensions: Float array of size (number of channel paths)
Description: The channel path power of every channel path traveling from basestation i to user j in watts
Channel Path Phase
DeepMIMO_dataset{i}.user{j}.path_params.phase
Type and Dimensions: Float array of size (number of channel paths)
Description: The channel path phase of every channel path traveling from basestation i to user j
Note: These phase values are the channel phase shift values before accounting for the phase shifts due to the path propagation delays
Time of Arrival
DeepMIMO_dataset{i}.user{j}.path_params.ToA
Type and Dimensions: Float array of size (number of channel paths)
Description: The time delay of each channel path traveling from basestation i to user j. Each slice from the third dimension of the time domain channel matrix corresponds to a value in the ToA array.
Number of Paths
DeepMIMO_dataset{i}.user{j}.path_params.num_paths
Type and Dimensions: Float
Description: The number of paths accounted for when constructing the channel between basestation i and user j.
Time of Arrival*
DeepMIMO_dataset{i}.user{j}.ToA
*Note: This is the same array available in path_params.ToA. We copied it here to simplify accessing it when activate_FD_channels=0.
Type and Dimensions: Float array of size (number of channel paths)
Description: The time delay of each channel path traveling from basestation i to user j. Each slice from the third dimension of the time domain channel matrix corresponds to a value in the ToA array.
This information is available only if activate_FD_channels=0 (time-domain channel impulse response).
Otherwise, it can be found under the path_params structure as explained next.
Output Variables of Basestation i – User j at Scene s
Channel Matrix
DeepMIMO_dataset{s}{i}.user{j}.channel
Type and Dimensions:
(a) Frequency-domain channel matrix (activate_FD_channels=1)
Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of OFDM subcarriers)
(b) Time-domain channel matrix (activate_FD_channels=0)
Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of channel paths)
Description: The channel matrix between basestation i and user j. Each of the first two dimensions follows a certain reshaping sequence that can be obtained using the following function:
antennamap = antenna_channel_map(params.num_ant_x, params.num_ant_y, params.num_ant_z, 1);
Returns a vector antennamap; each entry in the vector has 3 integers in the form of ‘x y z’ representing the antenna index of the channel element in the x, y, z directions.
Note: The DeepMIMO generator does not apply an array based normalization for the power. The details on the channel generation can be found in the channel generation document at the bottom of this page.
Line-of-Sight Status
DeepMIMO_dataset{s}{i}.user{j}.LoS_status
Type and Dimensions: Integer of values {-1, 0, 1}
Description: The variable that indicates the existence of the LOS path in the channel.
The values correspond to
(1): The LoS path exists.
(0): Only NLoS paths exist. The LoS path is blocked (LoS blockage).
(-1): No paths exist between the transmitter and the receiver (Full blockage).
TX-RX Distance
DeepMIMO_dataset{s}{i}.user{j}.distance
Type and Dimensions: Float
Description: The Euclidian distance between the RX and TX locations in meters.
Path loss
DeepMIMO_dataset{s}{i}.user{j}.pathloss
Type and Dimensions: Float
Description: The combined path-loss of the channel between the RX and TX in dB.
User Location
DeepMIMO_dataset{s}{i}.user{j}.loc
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
Basestation Location
DeepMIMO_dataset{s}{i}.loc
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
User Rotation
DeepMIMO_dataset{s}{i}.user{j}.rotation
Type and Dimensions: Float array of 3 dimensions
Description: The rotation applied to the UE antenna array in the form of [x_rot, y_rot, z_rot], corresponding to the three rotation angles (in degrees) around the local x-y-z axes
Basestation Rotation
DeepMIMO_dataset{s}{i}.rotation
Type and Dimensions: Float array of 3 dimensions
Description: The rotation applied to the BS antenna array in the form of [x_rot, y_rot, z_rot], corresponding to the three rotation angles (in degrees) around the local x-y-z axes
Ray-tracing Path Parameters
DeepMIMO_dataset{s}{i}.user{j}.path_params
Type and Dimensions: Structure
Description: The parameters of the ray tracing is provided within the struct. Specifically, for each path
- Azimuth and zenith angle-of-arrival (DoA_phi, DoA_theta)
- Azimuth and zenith angle-of-departure (DoD_phi, DoD_theta)
- Time of arrival (ToA)
- Phase (phase)
- Power (power)
- Number of paths (num_paths)
are provided in this struct.
Azimuth Angles of Departure
DeepMIMO_dataset{s}{i}.user{j}.path_params.DoD_phi
Type and Dimensions: Float array of size (number of channel paths)
Description: The azimuth angles (directions) of departure from basestation i, for every channel path traveling from basestation i to user j
Zenith Angles of Departure
DeepMIMO_dataset{s}{i}.user{j}.path_params.DoD_theta
Type and Dimensions: Float array of size (number of channel paths)
Description: The zenith angles (directions) of departure from basestation i, for every channel path traveling from basestation i to user j
Azimuth Angles of Arrival
DeepMIMO_dataset{s}{i}.user{j}.path_params.DoA_phi
Type and Dimensions: Float array of size (number of channel paths)
Description: The azimuth angles (directions) of arrival at user j, for each channel path traveling from basestation i to user j
Zenith Angles of Arrival
DeepMIMO_dataset{s}{i}.user{j}.path_params.DoA_theta
Type and Dimensions: Float array of size (number of channel paths)
Description: The zenith angles (directions) of arrival at user j, for each channel path traveling from basestation i to user j
Channel Path Power
DeepMIMO_dataset{s}{i}.user{j}.path_params.power
Type and Dimensions: Float array of size (number of channel paths)
Description: The channel path power of every channel path traveling from basestation i to user j in watts
Channel Path Phase
DeepMIMO_dataset{s}{i}.user{j}.path_params.phase
Type and Dimensions: Float array of size (number of channel paths)
Description: The channel path phase of every channel path traveling from basestation i to user j
Note: These phase values are the channel phase shift values before accounting for the phase shifts due to the path propagation delays
Time of Arrival
DeepMIMO_dataset{s}{i}.user{j}.path_params.ToA
Type and Dimensions: Float array of size (number of channel paths)
Description: The time delay of each channel path traveling from basestation i to user j. Each slice from the third dimension of the time domain channel matrix corresponds to a value in the ToA array.
Number of Paths
DeepMIMO_dataset{s}{i}.user{j}.path_params.num_paths
Type and Dimensions: Float
Description: The number of paths accounted for when constructing the channel between basestation i and user j.
Time of Arrival*
DeepMIMO_dataset{s}{i}.user{j}.ToA
* Note: This is the same array available in path_params.ToA. We copied it here to simplify accessing it when activate_FD_channels=0.
Type and Dimensions: Float array of size (number of channel paths)
Description: The time delay of each channel path between basestation i and user j. Each slice from the third dimension of the time domain channel matrix corresponds to a value in the ToA array.
This information is available only if activate_FD_channels=0 (time-domain channel impulse response).
Otherwise, it can be found under the path_params structure as explained next.
Output Variables of Basestation i – Basestation j
Channel Matrix
DeepMIMO_dataset{i}.basestation{j}.channel
Type and Dimensions:
(a) Frequency-domain channel matrix (activate_FD_channels=1)
Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of OFDM subcarriers)
(b) Time-domain channel matrix (activate_FD_channels=0)
Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of channel paths)
Description: The channel matrix between basestation i and basestation j. Each of the first two dimensions follows a certain reshaping sequence that can be obtained using the following function:
antennamap = antenna_channel_map(params.num_ant_x, params.num_ant_y, params.num_ant_z, 1);
Returns a vector antennamap; each entry in the vector has 3 integers in the form of ‘x y z’ representing the antenna index of the channel element in the x, y, z directions
Note: The DeepMIMO generator does not apply an array based normalization for the power. The details on the channel generation can be found in the channel generation document at the bottom of this page.
Line-of-Sight Status
DeepMIMO_dataset{i}.basestation{j}.LoS_status
Type and Dimensions: Integer of values {-1, 0, 1}
Description: The variable that indicates the existence of the LOS path in the channel.
The values correspond to
(1): The LoS path exists.
(0): Only NLoS paths exist. The LoS path is blocked (LoS blockage).
(-1): No paths exist between the transmitter and the receiver (Full blockage).
TX-RX Distance
DeepMIMO_dataset{i}.basestation{j}.distance
Type and Dimensions: Float
Description: The Euclidian distance between the RX and TX locations in meters.
Path loss
DeepMIMO_dataset{i}.basestation{j}.pathloss
Type and Dimensions: Float
Description: The combined path-loss of the channel between the RX and TX in dBm.
RX Basestation Location
DeepMIMO_dataset{i}.basestation{j}.loc
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
TX Basestation Location
DeepMIMO_dataset{i}.loc
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
RX Basestation Rotation
DeepMIMO_dataset{i}.basestation{j}.rotation
Type and Dimensions: Float array of 3 dimensions
Description: The rotation applied to the RX BS antenna array in the form of [x_rot, y_rot, z_rot], corresponding to the three rotation angles (in degrees) around the local x-y-z axes
TX Basestation Rotation
DeepMIMO_dataset{i}.rotation
Type and Dimensions: Float array of 3 dimensions
Description: The rotation applied to the TX BS antenna array in the form of [x_rot, y_rot, z_rot], corresponding to the three rotation angles (in degrees) around the local x-y-z axes
Ray-tracing Path Parameters
DeepMIMO_dataset{i}.basestation{j}.path_params
Type and Dimensions: Structure
Description: The parameters of the ray tracing is provided within the struct. Specifically, for each path
- Azimuth and zenith angle-of-arrival (DoA_phi, DoA_theta)
- Azimuth and zenith angle-of-departure (DoD_phi, DoD_theta)
- Time of arrival (ToA)
- Phase (phase)
- Power (power)
- Number of paths (num_paths)
are provided in this struct.
Azimuth Angles of Departure
DeepMIMO_dataset{i}.basestation{j}.path_params.DoD_phi
Type and Dimensions: Float array of size (number of channel paths)
Description: The azimuth angles (directions) of departure from basestation i, for every channel path traveling from basestation i to basestation j
Zenith Angles of Departure
DeepMIMO_dataset{i}.basestation{j}.path_params.DoD_theta
Type and Dimensions: Float array of size (number of channel paths)
Description: The zenith angles (directions) of departure from basestation i, for every channel path traveling from basestation i to basestation j
Azimuth Angles of Arrival
DeepMIMO_dataset{i}.basestation{j}.path_params.DoA_phi
Type and Dimensions: Float array of size (number of channel paths)
Description: The azimuth angles (directions) of arrival at basestation j, for each channel path traveling from basestation i to basestation j
Zenith Angles of Arrival
DeepMIMO_dataset{i}.basestation{j}.path_params.DoA_theta
Type and Dimensions: Float array of size (number of channel paths)
Description: The zenith angles (directions) of arrival at basestation j, for each channel path traveling from basestation i to basestation j
Channel Path Power
DeepMIMO_dataset{i}.basestation{j}.path_params.power
Type and Dimensions: Float array of size (number of channel paths)
Description: The channel path power of every channel path traveling from basestation i to basestation j in watts
Channel Path Phase
DeepMIMO_dataset{i}.basestation{j}.path_params.phase
Type and Dimensions: Float array of size (number of channel paths)
Description: The channel path phase of every channel path traveling from basestation i to basestation j
Note: These phase values are the channel phase shift values before accounting for the phase shifts due to the path propagation delays
Time of Arrival
DeepMIMO_dataset{i}.basestation{j}.path_params.ToA
Type and Dimensions: Float array of size (number of channel paths)
Description: The time delay of each channel path traveling from basestation i to basestation j. Each slice from the third dimension of the time domain channel matrix corresponds to a value in the ToA array.
Number of Paths
DeepMIMO_dataset{i}.basestation{j}.path_params.num_paths
Type and Dimensions: Float
Description: The number of paths accounted for when constructing the channel between basestation i and basestation j.
Time of Arrival*
DeepMIMO_dataset{i}.basestation{j}.ToA
* Note: This is the same array available in path_params.ToA. We copied it here to simplify accessing it when activate_FD_channels=0.
Type and Dimensions: Float array of size (number of channel paths)
Description: The time delay of each channel path between basestation i and basestation j. Each slice from the third dimension of the time domain channel matrix corresponds to a value in the ToA array.
This information is available only if activate_FD_channels=0 (time-domain channel impulse response).
Otherwise, it can be found under the path_params structure as explained next.
Output Variables of Basestation i – Basestation j at Scene s
Channel Matrix
DeepMIMO_dataset{s}{i}.basestation{j}.channel
Type and Dimensions:
(a) Frequency-domain channel matrix (activate_FD_channels=1)
Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of OFDM subcarriers)
(b) Time-domain channel matrix (activate_FD_channels=0)
Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of channel paths)
Description: The channel matrix between basestation i and basestation j. Each of the first two dimensions follows a certain reshaping sequence that can be obtained using the following function:
antennamap = antenna_channel_map(params.num_ant_x, params.num_ant_y, params.num_ant_z, 1);
Returns a vector antennamap; each entry in the vector has 3 integers in the form of ‘x y z’ representing the antenna index of the channel element in the x, y, z directions
Note: The DeepMIMO generator does not apply an array based normalization for the power. The details on the channel generation can be found in the channel generation document at the bottom of this page.
Line-of-Sight Status
DeepMIMO_dataset{s}{i}.basestation{j}.LoS_status
Type and Dimensions: Integer of values {-1, 0, 1}
Description: The variable that indicates the existence of the LOS path in the channel.
The values correspond to
(1): The LoS path exists.
(0): Only NLoS paths exist. The LoS path is blocked (LoS blockage).
(-1): No paths exist between the transmitter and the receiver (Full blockage).
TX-RX Distance
DeepMIMO_dataset{s}{i}.basestation{j}.distance
Type and Dimensions: Float
Description: The Euclidian distance between the RX and TX locations in meters.
Path loss
DeepMIMO_dataset{s}{i}.basestation{j}.pathloss
Type and Dimensions: Float
Description: The combined path-loss of the channel between the RX and TX in dB.
RX Basestation Location
DeepMIMO_dataset{s}{i}.basestation{j}.loc
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
TX Basestation Location
DeepMIMO_dataset{s}{i}.loc
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
RX Basestation Rotation
DeepMIMO_dataset{s}{i}.basestation{j}.rotation
Type and Dimensions: Float array of 3 dimensions
Description: The rotation applied to the RX BS antenna array in the form of [x_rot, y_rot, z_rot], corresponding to the three rotation angles (in degrees) around the local x-y-z axes
TX Basestation Rotation
DeepMIMO_dataset{s}{i}.rotation
Type and Dimensions: Float array of 3 dimensions
Description: The rotation applied to the TX BS antenna array in the form of [x_rot, y_rot, z_rot], corresponding to the three rotation angles (in degrees) around the local x-y-z axes
Ray-tracing Path Parameters
DeepMIMO_dataset{s}{i}.basestation{j}.path_params
Type and Dimensions: Structure
Description: The parameters of the ray tracing is provided within the struct. Specifically, for each path
- Azimuth and zenith angle-of-arrival (DoA_phi, DoA_theta)
- Azimuth and zenith angle-of-departure (DoD_phi, DoD_theta)
- Time of arrival (ToA)
- Phase (phase)
- Power (power)
- Number of paths (num_paths)
are provided in this struct.
Azimuth Angles of Departure
DeepMIMO_dataset{s}{i}.basestation{j}.path_params.DoD_phi
Type and Dimensions: Float array of size (number of channel paths)
Description: The azimuth angles (directions) of departure from basestation i, for every channel path traveling from basestation i to basestation j
Zenith Angles of Departure
DeepMIMO_dataset{s}{i}.basestation{j}.path_params.DoD_theta
Type and Dimensions: Float array of size (number of channel paths)
Description: The zenith angles (directions) of departure from basestation i, for every channel path traveling from basestation i to basestation j
Azimuth Angles of Arrival
DeepMIMO_dataset{s}{i}.basestation{j}.path_params.DoA_phi
Type and Dimensions: Float array of size (number of channel paths)
Description: The azimuth angles (directions) of arrival at basestation j, for each channel path traveling from basestation i to basestation j
Zenith Angles of Arrival
DeepMIMO_dataset{s}{i}.basestation{j}.path_params.DoA_theta
Type and Dimensions: Float array of size (number of channel paths)
Description: The zenith angles (directions) of arrival at basestation j, for each channel path traveling from basestation i to basestation j
Channel Path Power
DeepMIMO_dataset{s}{i}.basestation{j}.path_params.power
Type and Dimensions: Float array of size (number of channel paths)
Description: The channel path power of every channel path traveling from basestation i to basestation j in watts
Channel Path Phase
DeepMIMO_dataset{s}{i}.basestation{j}.path_params.phase
Type and Dimensions: Float array of size (number of channel paths)
Description: The channel path phase of every channel path traveling from basestation i to basestation j
Note: These phase values are the channel phase shift values before accounting for the phase shifts due to the path propagation delays
Time of Arrival
DeepMIMO_dataset{s}{i}.basestation{j}.path_params.ToA
Type and Dimensions: Float array of size (number of channel paths)
Description: The time delay of each channel path traveling from basestation i to basestation j. Each slice from the third dimension of the time domain channel matrix corresponds to a value in the ToA array.
Number of Paths
DeepMIMO_dataset{s}{i}.basestation{j}.path_params.num_paths
Type and Dimensions: Float
Description: The number of paths accounted for when constructing the channel between basestation i and basestation j.
Time of Arrival*
DeepMIMO_dataset{s}{i}.basestation{j}.ToA
* Note: This is the same array available in path_params.ToA. We copied it here to simplify accessing it when activate_FD_channels=0.
Type and Dimensions: Float array of size (number of channel paths)
Description: The time delay of each channel path between basestation i and basestation j. Each slice from the third dimension of the time domain channel matrix corresponds to a value in the ToA array.
This information is available only if activate_FD_channels=0 (time-domain channel impulse response).
Otherwise, it can be found under the path_params structure as explained next.
Examples
Parameters file in the example
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, etc.)
Allows for multiple antennas at both the BSs and UEs
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 parameters to generate the output dataset based on the parameters’ values specified in the DeepMIMO parameters file.
[Figure with the parameter list and possible outputs]
— outputs (on the figure) Generated datasets can include the information about
- MIMO OFDM wireless channels
- Locations of the users and basestations
- Path information (AoA, AoD, path loss etc.)
- Line-of-sight path availability
Check the detailed documentation below for more information about the DeepMIMO v2 parameters and outputs
How to Generate a DeepMIMO v2 Dataset?
Step 1: (Generator Package)
- Install DeepMIMO package from pip by
pip install DeepMIMO
Step 2: (Scenario)
- Select and download a scenario from the scenarios page.
- Extract scenario folder into a dataset folder.
Step 3: (Parameter Configuration and Dataset Generation)
- Start a new python script as follows
import DeepMIMO
# Load the default parameters
parameters = DeepMIMO.default_params()
# Set scenario name
parameters['scenario'] = 'O1_60'
# Set the main folder containing extracted scenarios
parameters['dataset_folder'] = r'C:\Users\xxx\Desktop\scenarios'
# Generate data
dataset = DeepMIMO.generate_data(parameters)
- Configure the parameters (For details, please refer to the input/output parameters and examples below)
- Run the code to generate the dataset!
Input Parameters
dataset_folder string
Folder of the unzipped scenarios. Inside the dataset folder, each scenario should have their own folder with the dataset files inside.
# If the O1_60 scenario is extracted in "C:/dataset/" folder, set
parameters['dataset_folder'] = r'C:/dataset/'
# The default value is set as './Raytracing_scenarios/'
scenario string
Name of the scenario to be loaded. To check and download available scenarios, please check the scenarios page.
# To load scenario O1_60, set the dictionary variable by
parameters['scenario'] = 'O1_60'
Dynamic scenario settings – first_scene, last_scene integers
[For dynamic scenarios] Determines the range of dynamic scenario scenes to be loaded [scene_first, scene_last]
# To load the first five scenes, set
parameters['dynamic_settings']['first_scene'] = 1
parameters['dynamic_settings']['last_scene'] = 5
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
# To only include 10 strongest paths in the channel computation, set
parameters['num_paths'] = 10
active_BS integer numpy array
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.
# To activate only the first basestation, set
parameters['active_BS'] = np.array([1])
# To activate the basestations 1, 5, and 8, set
parameters['active_BS'] = np.array([1, 5, 8])
user_row_first, user_row_last integers
The range of rows are determined by these parameters.
Specifically, the row of users with the ID in the range [user_row_first, user_row_last] are selected.
# To activate the user rows 1-5, set
parameters['user_row_first'] = 1
parameters['user_row_last'] = 5
row_subsampling float in the range (0, 1]
This parameter determines the ratio of the rows to be activated within the interval [user_row_first, user_row_last].
Specifically, it randomly samples round(row_subsampling*(user_row_last-user_row_first)) rows within the given interval.
The value 1 activates all the rows within the interval.
# To activate the half of the selected rows randomly, set
parameters['row_subsampling'] = 0.5
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 row_subsampling, user_row_first and user_row_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.
# To activate the half of the users in each selected row randomly, set
parameters['user_subsampling'] = 0.5
User antenna – shape integer numpy array, spacing float
The user antenna parameters. shape is a 3-dimensional array of number of antenna elements in x-y-z dimensions. The antenna spacing between array elements is determined as (spacing x wavelength).
An antenna array (UPA) of (shape[0] x shape[1] x shape[2]) elements is adopted for each active UE.
The axes of the antennas match the axes of the ray-tracing scenario.
# To adopt a 4 element ULA in y direction, set
parameters['ue_antenna']['shape'] = np.array([1, 4, 1])
# To adopt a 4x2 UPA in y-z directions with spacing 0.5*wavelength, set
parameters['ue_antenna']['shape'] = np.array([1, 4, 2])
parameters['ue_antenna']['spacing'] = 0.5
Basestation antenna – shape integer numpy array, spacing float
The basestation antenna parameters. shape is a 3-dimensional array of number of antenna elements in x-y-z dimensions. The antenna spacing between array elements is determined as (spacing x wavelength).
An antenna array (UPA) of (shape[0] x shape[1] x shape[2]) elements is adopted for each active BS.
The axes of the antennas match the axes of the ray-tracing scenario.
# To adopt a 4 element ULA in y direction, set
parameters['bs_antenna']['shape'] = np.array([1, 4, 1])
# To adopt a 4x2 UPA in y-z directions with spacing 0.5*wavelength, set
parameters['bs_antenna']['shape'] = np.array([1, 4, 2])
parameters['bs_antenna']['spacing'] = 0.5
enable_BS2BS boolean
Enable (1) or disable (0) generation of the channels between basestations
# To generate basestation to basestation output variables, set
parameters['enable_BS2BS'] = True
tx_power float
Basestation transmission power in dBm.
# For 30 dBm transmit power, set
parameters['tx_power'] = 30
activate_OFDM boolean
(0) activate time domain (TD) channel impulse response generation for non-OFDM systems
(1) activate frequency domain (FD) channel generation for OFDM systems
# For OFDM channels, set
parameters['activate_OFDM'] = 1
# For time-domain channels, set
parameters['activate_OFDM'] = 0
OFDM – bandwidth float
Total bandwidth of the channel in GHz.
# To generate channels at 50 MHz bandwidth, set
parameters['OFDM']['bandwidth'] = 0.05
OFDM – subcarriers integer
Number of OFDM subcarriers
# To generate OFDM channels with 256 subcarriers, set
parameters['OFDM']['subcarriers'] = 256
OFDM – subcarriers_limit, subcarriers_sampling integers
The constructed channels will be calculated only at the sampled subcarriers to reduce the size of the dataset. The first subcarriers_limit subcarriers are subsampled with OFDM_sampling_factor spacing between the selected consecutive subcarriers.
For subcarriers_limit = 64 and OFDM_sampling_factor = 8, the subcarriers {1, 9, 17, 26, 33, …} are subsampled from the available subcarriers {1, 2, …, 64}.
# To sample first 64 subcarriers by 8 spacing between each, set
parameters['OFDM']['subcarriers_limit'] = 64
parameters['OFDM']['subcarriers_sampling'] = 8
OFDM – cyclic_prefix_ratio float in [0, 1]
Cyclic prefix ratio. The ratio of the cyclic prefix to the OFDM symbol length.
# For a cyclic prefix duration equal to the 25% of an OFDM symbol, set
parameters['OFDM']['cyclic_prefix_ratio'] = 0.25
OFDM – pulse_shaping integer in [0, 2] or function
Available pulse shaping choices:
(0) No pulse shaping and matched filter (Equivalent to DeepMIMO v1),
(1) sinc pulse shaping and matched filter,
(2) raised cosine pulse shaping and matched filter with a roll-off factor defined by rolloff_factor float in [0, 1],
(function) provide a pulse shaping function of time
# With no pulse shaping, equivalently to DeepMIMOv1, set
parameters['OFDM']['pulse_shaping'] = 0
# For sinc pulse shape, set
parameters['OFDM']['pulse_shaping'] = 1
# For raised cosine pulse shape with a roll-off factor 0.5, set
parameters['OFDM']['pulse_shaping'] = 2
parameters['OFDM']['rolloff_factor'] = 0.5
# For a custom delta function define
def pulse_delta(t):
pulse = np.zeros(t.shape)
pulse[t==0] = 1
# and set
parameters['OFDM']['pulse_shaping'] = pulse_delta
OFDM – low_pass_filter_ideal boolean
(0) Applies no LPF at the receiver
(1) Activates ideal receive LPF for pulse shaping choices 2, 3, and custom options.
# For an ideal LPF (rectangular in frequency domain and sinc in time domain), set
parameters['OFDM']['low_pass_filter_ideal'] = 1
OFDM – upsampling_factor integer
Upsampling factor for generating pulses and their convolution.
#For an upsampling factor of 50 in the generation of the pulses and LPF, set
parameters['OFDM']['upsampling_factor'] = 50
Output Parameters
Output Variables of Basestation i – User j
Channel Matrix
dataset[i]['user']['channel'][j]
Type and Dimensions: Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of OFDM subcarriers)
Description: The channel matrix between basestation i and user j. Each of the first two dimensions follows a certain reshaping sequence that can be obtained using the following function:
antennamap = DeepMIMO.ant_indices(parameters['ue_antenna']['shape'])
# or
antennamap = DeepMIMO.ant_indices(np.array([x, y, z]))
Returns a matrix antennamap; each column in the matrix has 3 integers in the form of ‘x y z’ representing the antenna index of the channel element in the x, y, z directions.
Note: The DeepMIMO generator does not apply an array based normalization for the power. The details on the channel generation can be found in the channel generation document at the bottom of this page.
Ray-tracing Path Parameters
dataset[i]['user']['paths'][j]
Type and Dimensions: Dictionary
Description: The parameters of the ray tracing is provided within the dictionary. Specifically, for each path
- Azimuth and zenith angle-of-arrivals – degrees (DoA_phi, DoA_theta)
- Azimuth and zenith angle-of-departure – degrees (DoD_phi, DoD_theta)
- Time of arrival – seconds (ToA)
- Phase – degrees (phase)
- Power – watts (power)
- Number of paths (num_paths)
are provided in this dictionary.
Line-of-Sight Status
dataset[i]['user']['LoS'][j]
Type and Dimensions: Integer of values {-1, 0, 1}
Description: The variable that indicates the existence of the LOS path in the channel.
The values correspond to
(1): The LoS path exists.
(0): Only NLoS paths exist. The LoS path is blocked (LoS blockage).
(-1): No paths exist between the transmitter and the receiver (Full blockage).
TX-RX Distance
dataset[i]['user']['distance'][j]
Type and Dimensions: Float
Description: The Euclidian distance between the RX and TX locations in meters.
Path loss
dataset[i]['user']['pathloss'][j]
Type and Dimensions: Float
Description: The combined path-loss of the channel between the RX and TX in dB.
User Location
dataset[i]['user']['location'][j]
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
Basestation Location
dataset[i]['location']
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
Output Variables of Basestation i – User j at Scene s
Channel Matrix
dataset[s][i]['user']['channel'][j]
Type and Dimensions: Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of OFDM subcarriers)
Description: The channel matrix between basestation i and user j. Each of the first two dimensions follows a certain reshaping sequence that can be obtained using the following function:
antennamap = DeepMIMO.ant_indices(parameters['ue_antenna']['shape'])
# or
antennamap = DeepMIMO.ant_indices(np.array([x, y, z]))
Returns a matrix antennamap; each column in the matrix has 3 integers in the form of ‘x y z’ representing the antenna index of the channel element in the x, y, z directions.
Note: The DeepMIMO generator does not apply an array based normalization for the power. The details on the channel generation can be found in the channel generation document at the bottom of this page.
Ray-tracing Path Parameters
dataset[s][i]['user']['paths'][j]
Type and Dimensions: Dictionary
Description: The parameters of the ray tracing is provided within the dictionary. Specifically, for each path
- Azimuth and zenith angle-of-arrivals – degrees (DoA_phi, DoA_theta)
- Azimuth and zenith angle-of-departure – degrees (DoD_phi, DoD_theta)
- Time of arrival – seconds (ToA)
- Phase – degrees (phase)
- Power – watts (power)
- Number of paths (num_paths)
are provided in this dictionary.
Line-of-Sight Status
dataset[s][i]['user']['LoS'][j]
Type and Dimensions: Integer of values {-1, 0, 1}
Description: The variable that indicates the existence of the LOS path in the channel.
The values correspond to
(1): The LoS path exists.
(0): Only NLoS paths exist. The LoS path is blocked (LoS blockage).
(-1): No paths exist between the transmitter and the receiver (Full blockage).
TX-RX Distance
dataset[s][i]['user']['distance'][j]
Type and Dimensions: Float
Description: The Euclidian distance between the RX and TX locations in meters.
Path loss
dataset[s][i]['user']['pathloss'][j]
Type and Dimensions: Float
Description: The combined path-loss of the channel between the RX and TX in dB.
User Location
dataset[s][i]['user']['location'][j]
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
Basestation Location
dataset[s][i]['location']
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the user in the form of [x, y, z].
Output Variables of Basestation i – Basestation j
Channel Matrix
dataset[i]['basestation']['channel'][j]
Type and Dimensions: Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of OFDM subcarriers)
Description: The channel matrix between basestation i and basestation j. Each of the first two dimensions follows a certain reshaping sequence that can be obtained using the following function:
antennamap = DeepMIMO.ant_indices(parameters['bs_antenna']['shape'])
# or
antennamap = DeepMIMO.ant_indices(np.array([x, y, z]))
Returns a matrix antennamap; each column in the matrix has 3 integers in the form of ‘x y z’ representing the antenna index of the channel element in the x, y, z directions.
Note: The DeepMIMO generator does not apply an array based normalization for the power. The details on the channel generation can be found in the channel generation document at the bottom of this page.
Ray-tracing Path Parameters
dataset[i]['basestation']['paths'][j]
Type and Dimensions: Dictionary
Description: The parameters of the ray tracing is provided within the dictionary. Specifically, for each path
- Azimuth and zenith angle-of-arrivals – degrees (DoA_phi, DoA_theta)
- Azimuth and zenith angle-of-departure – degrees (DoD_phi, DoD_theta)
- Time of arrival – seconds (ToA)
- Phase – degrees (phase)
- Power – watts (power)
- Number of paths (num_paths)
are provided in this dictionary.
Line-of-Sight Status
dataset[i]['basestation']['LoS'][j]
Type and Dimensions: Integer of values {-1, 0, 1}
Description: The variable that indicates the existence of the LOS path in the channel.
The values correspond to
(1): The LoS path exists.
(0): Only NLoS paths exist. The LoS path is blocked (LoS blockage).
(-1): No paths exist between the transmitter and the receiver (Full blockage).
TX-RX Distance
dataset[i]['basestation']['distance'][j]
Type and Dimensions: Float
Description: The Euclidian distance between the RX and TX locations in meters.
Path loss
dataset[i]['basestation']['pathloss'][j]
Type and Dimensions: Float
Description: The combined path-loss of the channel between the RX and TX in dB.
RX Basestation Location
dataset[i]['basestation']['location'][j]
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the receive basestation j in the form of [x, y, z].
TX Basestation Location
dataset[i]['location']
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the transmit basestation i in the form of [x, y, z].
Output Variables of Basestation i – Basestation j at Scene s
Channel Matrix
dataset[s][i]['basestation']['channel'][j]
Type and Dimensions: Float matrix of size (number of RX antennas) x (number of TX antennas) x (number of OFDM subcarriers)
Description: The channel matrix between basestation i and basestation j. Each of the first two dimensions follows a certain reshaping sequence that can be obtained using the following function:
antennamap = DeepMIMO.ant_indices(parameters['bs_antenna']['shape'])
# or
antennamap = DeepMIMO.ant_indices(np.array([x, y, z]))
Returns a matrix antennamap; each column in the matrix has 3 integers in the form of ‘x y z’ representing the antenna index of the channel element in the x, y, z directions.
Note: The DeepMIMO generator does not apply an array based normalization for the power. The details on the channel generation can be found in the channel generation document at the bottom of this page.
Ray-tracing Path Parameters
dataset[s][i]['basestation']['paths'][j]
Type and Dimensions: Dictionary
Description: The parameters of the ray tracing is provided within the dictionary. Specifically, for each path
- Azimuth and zenith angle-of-arrivals – degrees (DoA_phi, DoA_theta)
- Azimuth and zenith angle-of-departure – degrees (DoD_phi, DoD_theta)
- Time of arrival – seconds (ToA)
- Phase – degrees (phase)
- Power – watts (power)
- Number of paths (num_paths)
are provided in this dictionary.
Line-of-Sight Status
dataset[s][i]['basestation']['LoS'][j]
Type and Dimensions: Integer of values {-1, 0, 1}
Description: The variable that indicates the existence of the LOS path in the channel.
The values correspond to
(1): The LoS path exists.
(0): Only NLoS paths exist. The LoS path is blocked (LoS blockage).
(-1): No paths exist between the transmitter and the receiver (Full blockage).
TX-RX Distance
dataset[s][i]['basestation']['distance'][j]
Type and Dimensions: Float
Description: The Euclidian distance between the RX and TX locations in meters.
Path loss
dataset[s][i]['basestation']['pathloss'][j]
Type and Dimensions: Float
Description: The combined path-loss of the channel between the RX and TX in dB.
RX Basestation Location
dataset[s][i]['basestation']['location'][j]
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the receive basestation j in the form of [x, y, z].
TX Basestation Location
dataset[s][i]['location']
Type and Dimensions: Float array of 3 dimensions
Description: The Euclidian location of the transmit basestation i in the form of [x, y, z].