ACM margin

Key Concepts

Adaptive Coding and Modulation (ACM): With ACM, the modulator dynamically selects the MODCOD (modulation and coding) to use for each link from its MODCOD table based on closed-loop feedback about current link conditions from the demodulator. In NMTS, the MODCOD table is a CarrierToNoisePlusInterferenceThresholdToDataRateList: each entry is a minimum carrier to noise-plus-interference ratio (C/(N+I)) and the data rate achieved above it.

ACM margin: The ACM margin is an estimate of the amount that the channel’s gain can degrade before the modem has time to switch to a lower MODCOD. This includes the error in the modem’s calculation of signal-to-noise ratio (SNR) and an estimate of possible rain fade and other atmospheric effects. The margin is subtracted from the predicted C/(N+I) before the modem selects a MODCOD, so that the selected MODCOD remains supported for one control interval.

The ACM margin affects which MODCOD is selected, not whether a link closes. See Applying the margin.

The need for this margin, and the effects it accounts for, are well established in the design of fade mitigation techniques. ITU-R P.1623 characterizes fade slope specifically for “the evaluation of internal parameters inside a fade mitigation technique (FMT) control loop”. However, no ITU-R recommendation defines a single equation for the ACM margin. The equations below describe how Spacetime combines the terms, and which ITU-R recommendations it uses for each.

Corresponding Fields in NMTS

The parameters of the control loop are modeled in AcmMargin, set on the receiving Demodulator as Demodulator.acm_margin:

  • AcmMargin.snr_measurement_error_db: a bound on the expected error of the demodulator’s estimate of the received SNR, in dB.
  • AcmMargin.control_loop_response_time: the time from a change in channel conditions until the loop has selected the corresponding MODCOD.
  • AcmMargin.fade_slope_control_points: a piecewise-linear curve giving the rate at which a rain fade deepens, in dB/s, as a function of the rain attenuation on the link, in dB.

Because AcmMargin is set per demodulator, the margin can differ between link directions. For example, a ground terminal’s demodulator and a satellite’s demodulator can each carry their own estimator error.

The margin also depends on the receiver’s system noise temperature, which comes from existing fields. See Sources of noise:

  • The noise temperature of each element of the receive signal processing chain
  • Antenna.antenna_noise_temperature_k, which is optional. If it is set, Spacetime takes it as everything the antenna picks up from its surroundings, including the background it looks at and any weather, and uses it in place of its own prediction of sky noise. If it is not set, Spacetime predicts the sky noise for each receiver (see Sky noise), and any hardware noise, including the antenna’s own losses, must be modeled in the signal processing chain.

Platform positions, including altitude, come from each platform’s Platform.motion, whether given as geodetic coordinates with a height or as an orbit. Spacetime derives the geometry of each link from these positions, and the atmosphere along the path from its weather forecast. No field describes the atmosphere or the link direction, and no field sets an altitude cutoff for any term.

How Spacetime computes the margin

The ACM margin, in dB, is:

acm_margin = snr_measurement_error + scintillation + fade_slope_loss + noise_slope_loss

where each term is described below. The terms are added in dB, which is conservative: it assumes every term is at its worst at the same time.

Spacetime predicts the margin separately for each time step of a link, because rain attenuation, sky noise and scintillation all vary over time.

SNR measurement error

snr_measurement_error = AcmMargin.snr_measurement_error_db

This is a constant property of the demodulator. It is zero if the demodulator has no AcmMargin.

Scintillation

Tropospheric scintillation is a rapid fluctuation of the received signal about its mean level, caused by turbulence in the atmosphere. Much of it is faster than any ACM control loop can follow, so Spacetime books its full fade depth in the margin.

Spacetime computes scintillation from the link geometry, the weather forecast and the ground terminal antenna:

  • For RF links, using the method of ITU-R P.618 § 2.4.1 (Spacetime implements the P.618-12 edition), which gives the fade depth exceeded for a chosen percentage of time. Spacetime evaluates it at the percentile that the deployment configures, typically the 95th, or the 99.9th when the deployment models rain. The method applies at elevation angles of 5° and above; below 5°, Spacetime evaluates it at 5°, which under-predicts scintillation at the lowest elevations.
  • For optical links, using ITU-R P.1814 § 5, which gives the attenuation due to scintillation as 2 * sigma_chi.

Scintillation depends only on propagation, not on the modem, so it is included in the margin whether or not the demodulator has an AcmMargin.

Scintillation is a fluctuation about the mean, not a mean loss. ITU-R P.618 likewise excludes it from the attenuation used to compute sky noise (eq. (69)). Spacetime therefore does not include it in the mean path loss of the link, or in the path loss of interfering signals. On channels without a choice of MODCOD it is booked as a loss instead (see Applying the margin).

Fade slope loss

Wherever rain can occur on the path, a rain fade can begin or deepen during the control interval. The fade slope term is the attenuation that can be added within one interval:

fade_slope_loss = R(A_rain) * control_loop_response_time

where

  • A_rain is the predicted rain attenuation on the link, in dB
  • R(A_rain) is AcmMargin.fade_slope_control_points evaluated at A_rain, in dB/s. Spacetime interpolates linearly between control points, and uses the value of the nearest control point outside the range they cover.
  • control_loop_response_time is AcmMargin.control_loop_response_time, in seconds

A_rain is computed from Spacetime’s weather forecast, applying the specific attenuation model of ITU-R P.838 to the forecast rain rate. It is zero above the forecast 0 °C isotherm, the melting layer above which precipitation is ice rather than liquid water.

The fade slope applies while rain can occur on the path, that is, while the link’s lower end is below the rain height. Spacetime takes the rain height as the forecast 0 °C isotherm height plus 0.36 km, the definition of ITU-R P.839 that ITU-R P.618 § 2.2.1.1 uses. The fade slope applies there even when no rain is currently predicted, because rain can begin within one control interval; the curve’s value at 0 dB books that onset. Where rain cannot occur, the fade slope is zero: above the rain height, on a path with no troposphere, or in a deployment that does not model rain. An operator who wants no fade slope on dry time steps can add a control point at 0 dB with a fade slope of 0 dB/s.

The fade-slope curve is supplied as data, not computed from an ITU-R model. ITU-R P.1623 § 3.2 models fade slope as a distribution whose spread is proportional to the attenuation, but that model is validated only for intervals of 2 s to 200 s. A typical ACM control loop responds in tens of milliseconds. The P.1623 model also depends on the bandwidth of the receiver’s own filtering, which varies between modems. Operators who have characterized their own loop can encode the result as control points.

Noise slope loss

Rain emits noise as well as attenuating the signal. As a rain fade deepens, the sky noise seen by the receiver rises, so the C/(N+I) degrades through both the carrier and the noise. The noise slope term is the change in noise temperature due to deepening fade:

noise_slope_loss = 10 * log10((N_sys + T_sky(A + fade_slope_loss)) / (N_sys + T_sky(A)))

where

  • N_sys is the noise temperature of the receive signal processing chain, in K
  • T_sky(A) is the sky noise temperature at attenuation A (see Sky noise)
  • A is the atmospheric attenuation along the link, in dB

The system noise temperature is the noise temperature of the receiver plus the sky noise temperature, T_sys = N_sys + T_sky(A_rain) (this is the same value that Spacetime uses for the link’s predicted C/(N+I), see Sources of noise). Putting noise_slope_loss in terms of T_sys gives the equation that Spacetime uses to calculate noise slope loss:

noise_slope_loss = 10 * log10(1 + dT_sky / T_sys)

where dT_sky is how much the noise from the sky rises, in K, when the fade deepens by fade_slope_loss (see How the sky noise rises during a fade).

This applies when the receive antenna does not set antenna_noise_temperature_k. When it does, the system noise temperature is T_sys = antenna_noise_temperature_k + N_sys. Spacetime takes the antenna noise temperature as already including any weather, so T_sys does not change as the fade deepens, and the noise slope is zero (see Uplink and downlink).

Sky noise

Radio engineers describe the noise an antenna picks up from its surroundings as a temperature, in kelvin: the warmer and more opaque the things the antenna looks at, the more noise it picks up. Clear sky looking out to space is very cold, roughly 2.7 K, because the antenna mostly sees the cosmic microwave background through a thin atmosphere. The ground, at around 290 K, is warm. Rain, which only exists as liquid below the melting layer, is at roughly 275 K.

Spacetime predicts the sky noise temperature T_sky that each receiver sees at each time step. It follows the receiver’s entire line of sight, through the transmitter and beyond it, until the line reaches either space or the Earth’s surface. It counts the noise given off by the atmosphere along that line (gases, clouds and rain, but not scintillation), plus what lies at the far end, dimmed by the atmosphere in between. This is the model of ITU-R P.618-14 eq. (69) in its general form:

T_sky = T_mr * (1 - 10^(-A/10)) + T_bg * 10^(-A/10)

where

  • A is the predicted atmospheric attenuation along the line of sight, in dB
  • T_mr is the atmospheric mean radiating temperature along the line of sight, in K, estimated from a standard temperature profile of the atmosphere
  • T_bg is the temperature of whatever the line of sight ends on: 2.7 K for space, or, for a receiver looking down at the Earth, the brightness temperature of the Earth’s surface. Spacetime takes this as about 260 K, using a single emissivity averaged over land and sea.

The more the atmosphere attenuates, the more of what the antenna sees is warm atmosphere rather than the background behind it.

How the sky noise rises during a fade

Taking the derivative of T_sky with respect to A yields the incremental change in sky noise temperature dT_sky due to the change in attenuation fade_slope_loss:

dT_sky = max(0, T_rain - T_sky) * (1 - 10^(-fade_slope_loss/10))

where the max() term prevents Spacetime from underpredicting the noise slope loss if T_sky exceeds T_rain.

This has the same effect as treating this additional rain during the control interval as a thin layer at the temperature of rain, T_rain = 275 K, in front of everything the receiver already sees. The new rain blocks a small fraction of what the antenna saw before, 1 - 10^(-fade_slope_loss/10), and replaces it with noise at the temperature of rain. So:

  • An antenna looking at cold sky, with T_sky of a few tens of kelvin, sees a large rise. For a receiver with a low system noise temperature, the noise slope loss can exceed the fade slope loss itself.
  • An antenna that already sees something about as warm as rain, such as one looking through heavy rain already, or looking down at the ground, sees little or no rise.

275 K is the temperature for rain given in ITU-R P.618-14 § 3 and ITU-R P.372 § 3.1.

When each term applies

Each term follows from the model and from the physical conditions on the link. Spacetime takes platform altitudes from each platform’s motion and has no availability input:

Term Applies when Zero when
SNR measurement error The receiving demodulator has an AcmMargin The demodulator has no AcmMargin
Scintillation The link passes through the troposphere, at a frequency the scintillation model covers The path has no troposphere, such as an inter-satellite link, or, for RF links, the ground terminal is above the deployment’s scintillation altitude limit (7 km by default)
Fade slope The demodulator’s AcmMargin sets fade_slope_control_points and control_loop_response_time, and rain can occur on the path, even if none is currently predicted Rain cannot occur on the path: the deployment does not model rain, the link’s lower end is above the rain height, or the path has no troposphere
Noise slope The fade slope loss is non-zero, and the receive antenna does not set antenna_noise_temperature_k The fade slope loss is zero, or the receive antenna sets antenna_noise_temperature_k

Uplink and downlink

Spacetime computes the noise of every receiver the same way, whether it is on the ground, at sea, in the air, or on a satellite. Whether the noise slope term applies or not depends on whether the receive antenna sets antenna_noise_temperature_k:

  • Not set: Spacetime adds its predicted sky noise to the noise of the receive signal processing chain. A deepening fade raises the sky noise, so the noise slope applies.
  • Set: Spacetime takes the antenna noise temperature as a fixed estimate of everything the antenna picks up from its surroundings, including any weather, and adds no sky noise. The receiver’s noise does not change during a fade, so the noise slope is zero.

When the noise slope applies, its size depends mostly on the link direction. A ground terminal looks through the atmosphere at a cold background, so the emission of rain is a large relative change in its noise. A satellite looks down at warm Earth, so its sky noise is already close to the temperature of rain and dT_sky is small. This is why link budgets commonly treat a satellite’s antenna noise temperature as a fixed value. ITU-R P.372 § 3.2 likewise models the noise of a space station as the brightness of the Earth in its beam, and gives the brightness seen from geostationary orbit as a single value averaged over the beam (Figure 9).

Rain does change the scene a satellite sees, particularly over the ocean. Seawater reflects much of the cold sky, so to a satellite it looks colder than land, and rain over it raises the noise. Spacetime does not distinguish land from sea; it uses a single average brightness for the Earth. Satellite receivers are warm, though, so the resulting noise slope is small either way: an upper-bound estimate at Ka-band is a few thousandths of a dB, against about a hundredth of a dB on a typical ground-terminal downlink. Setting antenna_noise_temperature_k on a satellite antenna, which makes its noise slope zero, therefore costs very little accuracy.

Platform altitude

The fade slope has no fixed altitude cutoff. It applies while the link’s lower end is below the forecast rain height at that time and place, and is zero above it, such as for an aircraft at cruise altitude. This follows the actual melting layer, which varies with location, season and weather, rather than a fixed altitude.

Availability

Some link budgets book atmospheric attenuation statically, at the attenuation exceeded for a chosen percentage of time (the availability). Spacetime instead predicts the attenuation at each time step from its weather forecast, so there is no availability input. A deployment that does not model rain behaves like a clear-sky budget: rain attenuation, fade slope and noise slope are all zero, and scintillation is evaluated at the configured percentile, typically the 95th.

Applying the margin

The margin is applied when Spacetime selects a MODCOD from the predicted C/(N+I), and only on channels where there is a choice of MODCOD:

  • More than one C/(N+I) threshold: the channel runs ACM. Spacetime selects the MODCOD as follows:
    1. If C/(N+I) - acm_margin meets the lowest threshold, it selects the highest MODCOD whose threshold C/(N+I) - acm_margin meets.
    2. Otherwise, if C/(N+I) meets the lowest threshold, it selects the lowest MODCOD. There is no lower MODCOD to fall back to, so holding margin would only report a working link as closed.
    3. Otherwise, the link does not close.
  • A single C/(N+I) threshold: the MODCOD is fixed, so no margin is applied. Scintillation is subtracted from C/(N+I) as a loss instead, so that it still affects whether the link closes.
  • LinkRangeToDataRateList: the data rate depends on range alone, so no margin is applied.

Rule 2 keeps the selected data rate from decreasing as C/(N+I) improves. Without it, a link just above the lowest threshold could select a higher MODCOD than a slightly stronger link that has to hold the full margin.

Comparing with other link budgets

Link-budget guides differ in how they write some of these terms. When comparing a Spacetime prediction with another budget, check:

  • The sky noise temperature. Spacetime uses eq. (69) of ITU-R P.618-14, which weights the atmosphere’s emission by 1 - 10^(-A/10) and the background by 10^(-A/10). A form such as (T_mr + 2.7) * (1 - 10^(-A/10)) is not eq. (69), and gives a slightly larger noise increment.
  • Satellite receiver noise. Some budgets treats a satellite receiver’s noise as fixed, so its noise slope on an uplink is always zero. Spacetime will do the same if the satellite receive antenna’s antenna_noise_temperature_k is set, but will otherwise calculate a small non-zero noise slope loss based on the predicted sky noise.
  • The fade slope without rain. Some budgets apply the fade-slope curve at every rain attenuation. Spacetime applies it, including its value at 0 dB, only when rain can occur on the path.
  • Altitude cutoffs. Fixed altitude cutoffs on rain-related terms approximate the melting layer, which Spacetime takes from its forecast.
  • Availability. Spacetime predicts attenuation from forecast weather rather than booking it at an availability percentile.
  • The lowest MODCOD. A rule that drops the margin entirely when it would put C/(N+I) below the lowest threshold, and then selects from the full C/(N+I), can select a higher MODCOD for a weaker link. Spacetime selects the lowest MODCOD in that case.