User Tools

Site Tools



Adaptive Coding and Modulation (ACM)

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 configuration window

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.

It can be configured in the forward link carrier configuration window, by clicking in the Configure button under the MODCOD label.

In the window that pops up, ACM must be selected at the left (in the Access Type box). In the Wave Form box, the available MODCODs are listed. Only those that are ticked will be used during the emulation.

Forward layer 2 FIFOs configuration

In order to use ACM on the forward link, the forward link layer 2 FIFOs must also be configured to use ACM. This can be done from the Advanced window, in the Configuration tab. This configuration is found under each gateway, in the dvb_ncc section, and for every spot (e.g.: GW0→dvb_ncc→spot1).

For each Layer 2 FIFO (consult the QoS page for more information), select ACM to use Adaptive Coding and Modulation for that type of traffic.

Physical Layer configuration

Other configurations concerning ACM are available in the Advanced configurations window, in the GLOBAL→physical_layer section. 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.

Physical Layer configuration for each spot

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.

This file can be edited from the Advanced configurations window, in the GLOBAL→physical_layer section. For each combination of GW and Spot, a different forward_down_modcod_time_series can be used. A file can be uploaded by clicking in the Upload button, or edited, by clicking in the Edit button.

forward_down_modcod_time_series edit window

In this file, each line represents a different point in the time series. Each line is a list of space-separated integer values. The first value corresponds to the time in acm_period_refresh units. The rest of the values correspond to the MODCOD to use when communicating with the ST1, ST2, …

If the parameter loop_on_file is activated, the file will loop (start from zero) once the end is reached.

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 with the method setRequiredCniOutput, called from the handleFrameCni. 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.

When attenuation layer is not enabled, the used MODCODs for the forward link are read from the simulation file forward_down_modcod_time_series.

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.

opensand/emulated_satcom_features/physical/acm/index.txt · Last modified: 2019/06/11 16:22 (external edit)