Skip to content

Latest commit

 

History

History
44 lines (32 loc) · 5.06 KB

README.md

File metadata and controls

44 lines (32 loc) · 5.06 KB

Simulator for beamspace channel estimator (BEACHES) for mmWave/THz massive MU-MIMO

(c) 2020 Seyed Hadi Mirfarshbafan e-mail: [email protected]

Important information

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.

How to start a simulation:

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 in par.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 function generate_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 function channel. However, if the channel type assigned to par.channel is 'QuadMMLoS' or QuadMMnLoS', 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 arrays par.SNRdB_list_L and par.n_channel_trials_L. For example, the lth denoiser of the list par.SNRdB_list_L is simulated over the SNR values defined by the lth vector in the cell array par.SNRdB_list_L. The entries of the lth vector in the cell array par.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 point k is given by
    par.n_channel_trials_L{l}(k)*par.trials_per_channel*par.n_parallel_workers. Note that main_sim.m consists of a parfor that launches par.n_parallel_workers parallel workers that each simulate par.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. The plot_BER and plot_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 history