(c) 2020 Seyed Hadi Mirfarshbafan e-mail: [email protected]
If you are using the simulator (or parts of it) for a publication, then you must cite our paper:
S. H. Mirfarshbafan, A. Gallyas-Sanhueza, R. Ghods, and C. Studer, "Beamspace Channel Estimation for Massive MIMO mmWave Systems: Algorithm and VLSI Design", IEEE Trans. Circuits Syst. I (TCAS-I), to appear, 2020
and clearly mention this in your paper. In the following, by paper, we mean the above paper.
To regenerate the plots in figures 4 and 5 of the paper, simply assign one of the letters 'a'
, 'b'
, 'c'
or 'd'
to the variable sim_scenario
in the main_sim.m
and run the script. It will generate a plot with BER curves and another one with MSE curves corresponding to the chosen letter (subfigure) of figure 4 and 5, respectively.
Also note that the list of denoisers to be simulated are set in the par.denoiser_list
variable in the par_config.m
file.
IMPORTANT: The TF variable INCLUDE_ANM_NOMP
in main_sim.m
determines whether NOMP and ANM should be simulated along with other denoisers.
For ANM and NOMP to work, please download their codes at [https://github.com/badrinarayan/astlinespec] and [https://bitbucket.org/wcslspectralestimation/continuous-frequency-estimation/src/NOMP/], respectively and extract the zip files to ./denoisers/
directory of the simulator.
In order to simulate with simulation parameters other than the default ones, define a new set of parameters in the switch case
block of par_config.m
file and assign a value to the variable sim_scenario
in the main_sim.m
that corresponds to the new set of parameters. Please consider the following guidelines when creating a new set of simulation parameters:
-
Assign a unique runID to each simulation scenario to enable reproducibility and to make different simulations distinguishable.
-
Set the number of BS antennas and UEs and other parameters in the
par_config.m
file. Note that channel condition inpar.channel
has to be set to one of the values defined in./channel/channel.m
. IMPORTANT: The LoS and nonLoS mmMagic channel models which are generated by the QuaDRiGa channel simulator ([https://quadriga-channel-model.de/]) are available only for the default simulation scenarios (a,b,c,d) which correspond to the paper simulation settings. We have included a set of pre-generated channel matrices for the default simulation parameters, using the QuaDRiGa matlab code, as mat files and stored them in./channel/generated_channels/
. The functiongenerate_channels
accepts the par struct which contains the parameters of simulation as its input argument. It first searches the folder./channel/generated_channels/
to see if the channels with requested parameters already exist as mat files. If not it attempts to generate them by calling the functionchannel
. However, if the channel type assigned topar.channel
is'QuadMMLoS'
orQuadMMnLoS'
, it cannot generate new channels unless the QuaDRiGa package is on the simulation path. Interested readers can download the QuaDRiGa software package, unzip the package and add it to matlab's path, and then generate realistic channels for their desired set of parameters. -
Tha cell array
par.denoiser_list
defines the denoisers to be simulated. The number of elements in this array must match the number of elements (which are row vectors) of the cell arrayspar.SNRdB_list_L
andpar.n_channel_trials_L
. For example, thel
th denoiser of the listpar.SNRdB_list_L
is simulated over the SNR values defined by thel
th vector in the cell arraypar.SNRdB_list_L
. The entries of thel
th vector in the cell arraypar.n_channel_trials_L
, determine the number of channel realization (per worker) to be simulated in each SNR point. The overall number of trials in each SNR pointk
is given by
par.n_channel_trials_L{l}(k)*par.trials_per_channel*par.n_parallel_workers
. Note thatmain_sim.m
consists of aparfor
that launchespar.n_parallel_workers
parallel workers that each simulatepar.n_channel_trials*par.trials_per_channel
trials and then fuses the results of these parallel workers to get better averaging and more reliable error rate results. Additionally, this allows for a faster simulation by leveraging matlab's parallel computing features whenever supported by the underlying machine. -
The simulation results, as well as the par struct holding all the simulation parameters, for each denoiser simulation are saved as a mat file in the
./results/sim_res
subfolder. Theplot_BER
andplot_MSE
We highly recommend you to execute the code step-by-step (using MATLAB's debug mode) in order to get a detailed understanding of the simulator.
In order to do so, you should change the parfor in the main_sim.m
to a simple for (just replace parfor with for) so that debugging is possible.
- Version 1 (Sep. 06 2020) - [email protected] - uploaded the simulation