Skip to content
Tauran Bastien edited this page Apr 5, 2022 · 4 revisions

Adaptive Coding and Modulation (ACM)

Table of content

Adaptive Coding and Modulation (ACM) is one of the three coding and modulation schemes for the forward link implemented in OpenSAND.

When using ACM, the MODCOD used in the forward link carriers changes dynamically (downlink on regenerative systems), depending on the link budget. When the attenuation is greater, more robust MODCODs are used, whereas when the attenuation is lesser, a MODCOD with more capacity is favored. This allows to maximize the link availability (in adverse conditions) and throughput (in good conditions).

The optimal MODCOD is calculated using forward link C/N information sent back from the terminals to the gateways (or to the satellite on regenerative systems), effectively creating a control loop.

OpenSAND Exploitation

ACM is the default mode of operation in the forward link. Its use is particularly meaningful when attenuation is enabled, since the Link Budget will evolve in time.


In order to use ACM on the forward link, the forward link layer 2 FIFOs must also be configured to use ACM.


Other configurations concerning ACM are available. These are:

  • acm_period_refresh: the refresh period for ACM MODCOD calculation (default value: 1 second). NOTE: this parameter is also used as the reference period for the attenuation in the physical layer.
  • forward_down_acm_loop_margin: specifies an ACM loop margin (in dB) for the forward link. When calculating the optimal MODCOD, the algorithm will take into account the measured SNR plus this margin for extra safety.
  • return_up_acm_loop_margin: specifies an ACM loop margin (in dB) for the return link. When calculating the optimal MODCOD, the algorithm will take into account the measured SNR plus this margin for extra safety.

Although ACM use is mostly meaningful when attenuation is enabled, it can also be used when it is disabled (by default, attenuation is enabled, and ACM is used without it). In this case, SNR values carried in the headers are not considered, and the MODCOD to use is defined by a simulation file.


Finally, by default, OpenSAND does not use the ACM Loop minimal condition plugin, which is needed for a correct operation of the adaptive coding and modulation (consult the link budget page for more information).

OpenSAND Software Design

ACM is used when scheduling packets in the forward link. This is performed by the ForwardSchedulingS2 in the DVB Block.

When the scheduling is performed for one superframe, the capacity of each ACM subcarrier (each particular MODCOD) is calculated. Then, for each QoS FIFO using a ACM carrier, encapsulated packets are scheduled using the MODCODs supported by each subcarrier, until there is no capacity left.

The available MODCOD for each carrier is calculated on the block DVB. On terminal side, when a SAC message is sent, the measured SNR of the last packet received is added to the RCS burst header. The gateway, when processing packets in the block DVB, reads the required SNR value, and updates the necessary SNR needed. This will update the required MODCOD for that terminal (taking into account the ACM margin value specified). The MODCOD selected is the one with the most capacity that can be decoded with the measured SNR.

Regenerative mode

In regenerative mode, the ACM loop is different from the transparent case, since the satellite is also involved in the control loop.

For downlinks (satellite to terminal and satellite to gateway), the satellite calculates the optimal MODCOD when creating the BBFrames. The satellite obtains the the downlink SNR information carried in messages from the terminals and gateways, and calculates the best MODCOD in the same fashion as the gateway in transparent mode. Since SNR information is carried in SAC messages, and gateways do not send SACs, "fake" SAC messages are used to transmit ACM information to the satellite.

Clone this wiki locally