# Macro in ALG Language

For simulation convenience, there are macros defined above the level of ALG language. That is, some configuration variables may be used in ALG.

There are two types of macros:

• predefined macros: They are defined by mmCEsim and can be used directly without declaring;
• user defined macros: They are placed in the macros: list, and should not have the same name as those in predefined macros. They may appear in the top level of .sim file, or under each job algorithm.

## Macro Usage

Macro is wrapped within the character backtick(), for example PILOT.

## Predefined Macros

Macro Descriptions Scope
ALG_NAME Algorithm Name 1
ALG_PARAMS Algorithm Parameters 1
ALG_NUM Number of Algorithms in One Job 12
BEAM.R.x Receiver Beam in $$x$$ Dimension 12345
BEAM.R.y Receiver Beam in $$y$$ Dimension 12345
BEAM.R Receiver Beam (Antenna Number) 12345
BEAM.T.x Transmitter Beam in $$x$$ Dimension 12345
BEAM.T.y Transmitter Beam in $$y$$ Dimension 12345
BEAM.T Transmitter Beam (Antenna Number) 12345
BEAM.* Multiplication of Tx and Rx Beam 12345
BF[<id>] Beamforming Matrix of Node <id> 12345
CARRIERS_NUM Number of OFDM Carriers 1234
CAS_CH Cascaded Channel 12345
DICTIONARY.R Receiver Dictionary Matrix 12345
DICTIONARY.T Transmitter Dictionary Matrix 12345
GRID.R.x Receiver Grid in $$x$$ Dimension 12345
GRID.R.y Receiver Grid in $$y$$ Dimension 12345
GRID.R Receiver Grid (Antenna Number) 12345
GRID.T.x Transmitter Grid in $$x$$ Dimension 12345
GRID.T.y Transmitter Grid in $$y$$ Dimension 12345
GRID.T Transmitter Grid (Antenna Number) 12345
GRID.* Multiplication of Tx and Rx Grid 12345
JOB_NUM Number of Estimation Jobs 1234
JOB_CNT The Current Job Count (From 0) 123
MEASUREMENT Number of Measurements 12
NMSE NMSE Result Matrix 123
PILOT Pilot Overhead Number 12
SIZE.R.x Receiver Size in $$x$$ Dimension 12345
SIZE.R.y Receiver Size in $$y$$ Dimension 12345
SIZE.R Receiver Size (Antenna Number) 12345
SIZE.T.x Transmitter Size in $$x$$ Dimension 12345
SIZE.T.y Transmitter Size in $$y$$ Dimension 12345
SIZE.T Transmitter Size (Antenna Number) 12345
SIZE.* Multiplication of Tx and Rx Size 12345
SNR_dB Signal-to-Noise Ratio (SNR) in dB 12
SNR_LINEAR Signal-to-Noise Ratio (SNR) 12
VAR Variable Name in Beamforming Design temp
VERSION mmCEsim Version 123456

The supported scope is listed in in the corresponding scope listed in the Scope section.

### Scope

In the table above, the scope of macro means where the macro can be used safely. Those marked as temp are temporary macros.

Scope Description
1. Algorithm Between BRANCH and MERGE in estimation
2. Estimation Other part of estimation
3. Conclusion conclusion part of configuration
4. Appendix appendix part of configuration
5. Preamble preamble part of configuration
6. Others Any other part where ALG language is used.

### Temporary Macro

Temporary macros are also valid in a small scope that can not be listed in 1-6 scopes. For example, the macro VAR is only valid for beamforming design custom scheme.

### BF[<id>]

Get the beamforming matrix/cube variable name. For RIS, it is the reflection matrix. For Tx and Rx, it is the beamforming cube.

### DICTIONARY.R

Receiver dictionary matrix. Return a c2c (const complex matrix). This macro actually expands to CALC function \dictionary.

### DICTIONARY.T

Transmitter dictionary matrix. Return a c2c (const complex matrix). This macro actually expands to CALC function \dictionary.

### NMSE

Normalized mean square error result is stored as a matrix with dimension of {Test Number of SNR/Pilot} $$\times$$ {Algorithm Number}.

### VAR

This macro returns the variable field of beamforming of a channel node. This is only valid in nodes/<>/beamforming/formula for the custom scheme.

Source

Macro replacing is defined in /src/export/macro.cpp.

It is advised not to use macros when you can get the value elsewhere easily for example from the size of a matrix.

## User Defined Macros

### Top-Level Macros

Top-level macros defined in the top-level macro field. They are specified as a sequence (array). For each macro, you need to define

• name: The name for the macro without the wrapping ;
• value: The value for the macro;
• in_alg: (Optional) Whether the macro is used in job algorithms. Default as false.

Example

You may define the macro SPARSITY_EST of value 6 which is used inside job algorithms with the following code:

macro:
- name: SPARSITY_EST
value: 6
in_alg: true


If in_alg is set to true, the macro can only be used in scope 1 and 2. But this allows the macro able to be overwritten by algorithm macros.

### Algorithm Macros

Algorithm macros are defined similar to top-level macros, except for algorithm macros are defined inside the job algorithm, on the same level as alg and label. This will overwrite top-level macros which has in_alg as true.