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.
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.
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.:
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.
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.
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
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).
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
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.