Table of contents

Configuration file is in YAML format. For more information about why YAML, please refer to this blog.


This field (version) takes a string value representing the targeted mmCEsim version. For compatibility convenience, this string can be used by the compiler to decide the behavior. The current default value is the same as the compiler version (0.3.0).


The meta is a map that provides metadata which can be used in the report. The used fields now include: title, description, author.


The physics map contains physical system settings.


The bandwidth is specified in frequency filed. which can have value narrow for narrowband or wide for wideband.


This is actually about the model. With the geometric channel model with grid, there can be off-grid (or power leakage) problems. Recently, there are also super resolution formulations to solve the problem. But we still adopt the grid representation for its popularity and simplicity. By setting off_grid field inside physics to false, the off grid effect is discarded, i.e. all angles fall on the grid. The default value is true.


For a wideband system, you may specify the number of carriers used in OFDM. Its corresponding macro in CALC is `CARRIERS_NUM`.


A sequence (array) of nodes in the channel network. Transmitter (Tx), Receiver (Rx), Reconfigurable Intelligent Surface (RIS) are all considered node (channels are the connecting edges to these nodes). For each of its elements, you need to specify the following fields.


You need to specify a unique id for each node. They are used in channels so that we know the direction of channel.


The role field has valid values transmitter (Tx), receiver (Rx), and RIS (IRS).


The field num can be used to replicate several copies of the same node. This is often used for multi-user scenarios. Currently, this value is discarded, and the number is always 1.


The size means the antenna/element number for a node. For transmitters and receivers, it is the antenna number. For RIS, it is the number of reflecting elements. The value is a scalar for uniform linear array (ULA), and is a 2-value array (for example [8, 4]) for uniform planar array (UPA). For a 2-value array that has the second value set to 1, it is still regarded as a ULA.

Its corresponding macros in CALC are `SIZE[<id>]`, `SIZE[<id>].x`, `SIZE[<id>].y`, `SIZE.T.x`, `SIZE.T.y`, `SIZE.T`, `SIZE.R.x`, `SIZE.R.y`, `SIZE.R`, `SIZE.*`.


The number of beams. Dimensions similar to Size.

Its corresponding macros in CALC are `BEAM[<id>]`, `BEAM[<id>].x`, `BEAM[<id>].y`, `BEAM.T.x`, `BEAM.T.y`, `BEAM.T`, `BEAM.R.x`, `BEAM.R.y`, `BEAM.R`, `BEAM.*`.


The number of grids. Dimensions similar to Size. This is used in CALC function \dictionary and macro `DICTIONARY.T` and `DICTIONARY.R`.

Its corresponding macros in CALC are `GRID[<id>]`, `GRID[<id>].x`, `GRID[<id>].y`, `GRID.T.x`, `GRID.T.y`, `GRID.T`, `GRID.R.x`, `GRID.R.y`, `GRID.R`, `GRID.*`.


In the beamforming field, the variable name variable is set, and the beamforming scheme scheme is defined. The scheme supports random and custom. For a custom beamforming scheme, you also need to set the formula field with ALG language.

The random active beamforming scheme (for Tx and Rx) is defined in /include/mmcesim/sys/random_RIS_BF.alg as

`VAR` = \randn(SIZE, TIMES) # generate random
`VAR` = `VAR` / \abs(Psi)   # normalize


User-defined macros are defined here. Please refer to documentation of macro for more information.


The configuration channels is a sequence (array) of channel links. The settings for each channel link is shown below.


Similar to ID in Nodes, each channel link has a unique identifier as in field id.


The node which the link channel is transmitted from. (from)


The node which the link channel transmits to. (to)


The sparsity (number of clusters) of the channel.


The channel gains consisting of pass loss. There are two types of gains supported (mode): normal and uniform. For normal gains, mean and variance need to be specified. For uniform gains, min and max need to be set.


Information related to the sounding procedure is defined here.


Channel variables names are defined here.

  • received: received signal vector
  • noise: received noise vector
  • channel: the cascaded channel


The preamble is code part before main simulation (including sounding, estimation and report generation).

Custom functions can be defined here.

This part is specified using the ALG language.


The main code for estimation. Function ESTIMATE is used here to call the compressed sensing (CS) algorithms either defined in the standard ALG library or in the preamble.

Basic MIMO Example

For a basic MIMO example, the estimation part is about converting the mmWave channel estimation to a compressed sensing problem before using ESTIMATE, and recover the channel from the sparse result with RECOVER.

This part is specified using the ALG language.


In conclusion, additional code after each simulation job is added here.

This part is specified using the ALG language.


The code in appendix is added after all jobs are done.

This part is specified using the ALG language.



The backend includes cpp (C++ with Armadillo library), python (Python with NumPy library) and matlab or octave. This sets the language it exports to and the backend simulation bases on.



Text Report

The simulation report can be exported as plain text report, for example

LaTeX and PDF Report

LaTeX and its generated PDF report is also supported in addition to the plain text .rpt report.


PDF Report Example with configuration example.