NTN

One LEO satellite with earth-moving beams (layout.kind: ntn, since 2.0.0).

handoverlab.channel.ntn

Non-terrestrial network: one LEO satellite with earth-moving beams (layout.kind: ntn; since 2.0.0).

Sources (texts in code/std3gpp; equations read from the PDF pages):

  • TR 38.811 V15.4.0: Earth as a sphere of radius 6371 km (clause 6.3); the satellite antenna G / Gmax = 4 |J1(ka sin t) / (ka sin t)|^2 with a the aperture radius (clause 6.4.1); the LOS probability of Table 6.6.1-1 at the nearest reference elevation; the basic path loss PLb = FSPL + SF + CL (Eq. 6.6-4), FSPL = 32.45 + 20 log10(fc) + 20 log10(d) (Eq. 6.6-2, d in m, fc in GHz), the slant range d = sqrt(R^2 sin^2(a) + h^2 + 2 h R) - R sin(a) (Eq. 6.6-3), shadowing and clutter loss of Tables 6.6.2-1..3 (clutter only in NLOS), the atmospheric loss Azenith / sin(a) (Eq. 6.6-8), shadowing correlation 37 m (LOS) and 120 m (NLOS) in the rural S band (Tables 6.7.2-7a, -8a).
  • TR 38.821 V16.2.0: the satellite sets of Tables 6.1.1.1-1 and -2, the handheld UE of Table 6.1.1.1-3, the 19-beam layout on the UV plane with the adjacent beam spacing sqrt(3) sin(HPBW / 2) (Table 6.1.1.1-4; since 2.1.0 from the tabled 3 dB beamwidth, as that table asks, with the pattern scaled to it), frequency reuse 1 (Table 6.1.1.1-5, option 1), optionally the baseline propagation condition "Clear Sky, Line of sight" of Table 6.1.1.1-5 (ntn.los_model: los), the link budget of clause 6.1.3 (Table 6.1.3.3-1), the LEO speed of 7.56 km/s and the round-trip delays of Table 7.1-1.

All beams belong to one satellite, so a user sees them over one propagation path: slant range, LOS state, shadowing, clutter, atmospheric and scintillation loss are common to the beams; only the antenna gain differs. The beams are fixed in the satellite frame and sweep over the ground with the satellite (scenarios C2 and D2, which RAN2 prioritised for mobility, TR 38.821 clause 7.3.2.4).

NtnGeometry

The satellite, its orbit and its beams for one scenario (see the module text).

sat_pos(t)

ECEF positions (T, 3) of the satellite at times t [s].

frame(t)

Satellite frame (u along track, v across, w towards the Earth centre), each (T, 3).

boresights(t)

ECEF unit vectors (T, B, 3) of the beam boresights at times t.

beam_centres(t) -> np.ndarray

Ground points (B, 2) [m, local] where the beam boresights meet the Earth at time t (moving references).

Elevation [deg] (P,), slant range [m] (P,) and normalised antenna gain [dB] (P, B) at points and times.

NtnMap

The part of a radio map that the engine and the rules use: the nominal best beam (no buildings, no field).

nominal_cell(x, y) -> np.ndarray

Beam whose ground centre at the middle of the run is nearest (the operator's plan).

NtnSource

Received powers of every beam at every user and step, chunk by chunk (the contract of RadioSource).

slant_range(alpha_deg, h_m)

Eq. 6.6-3 of TR 38.811: distance [m] from a ground terminal to a satellite at altitude h_m.

fspl_db(d_m, fc_ghz)

Eq. 6.6-2 of TR 38.811: free-space path loss [dB], d_m in metres, fc_ghz in GHz.

antenna_gain(theta_rad, ka)

Normalised satellite antenna gain of TR 38.811 clause 6.4.1 (linear, 1 at boresight).

ka_from_aperture(aperture_m, fc_ghz)

ka of the antenna pattern: the aperture radius a = aperture / 2 times the wave number.

hpbw_deg(ka)

3 dB beamwidth [deg] of the pattern: twice the angle where the normalised gain is 1/2.

ka_from_hpbw(hpbw: float) -> float

ka of the pattern whose 3 dB beamwidth is hpbw degrees (the inverse of hpbw_deg).

beamwidth_deg(scenario) -> float

The 3 dB beamwidth of the satellite beams [deg]: ntn.hpbw_deg, or unset (since 2.1.0) the tabled width of TR 38.821 Tables 6.1.1.1-1/-2 for the aperture at 2 GHz with radio.channel_detail "3gpp" (Table 6.1.1.1-4: "Only the 3dB beam width parameters should be used"), else the width of the Bessel pattern of the aperture.

orbital_speed(h_m)

Speed [m/s] of a circular orbit at altitude h_m.

nearest_reference(alpha_deg)

Index 0..8 of the nearest reference elevation 10..90 degrees (TR 38.811 Tables 6.6.1-1, 6.6.2-x).

hex_uv(n_beams: int, spacing: float) -> np.ndarray

UV offsets of a hexagonal beam layout: the centre beam and rings around it (19 = two rings).

to_ecef(x, y)

Local coordinates [m] (x east, y north of the area centre at latitude 0, longitude 0) on the sphere.

to_local(p)

Inverse of to_ecef for points on (or projected to) the sphere.

ntn_layout(scenario, geom: NtnGeometry)

The users' area (layout.area_m, centred on the origin) with the beams' ground centres at mid-run.

handoverlab.verify.ntn

NTN against TR 38.821 and TR 38.811 (since 2.0.0): handoverlab verify --only ntn.

N2 (since 2.1.0) the satellite beams of the simulator have the tabled 3 dB beamwidth of TR 38.821 Tables 6.1.1.1-1 and -2 for both S-band apertures (Table 6.1.1.1-4: only the 3 dB beamwidth is used), the antenna pattern of TR 38.811 clause 6.4.1 scaled to it has that 3 dB width within 0.0001 degree, and the adjacent beam spacing sqrt(3) sin(HPBW / 2) is within 0.0002 of the informative values of Table 6.1.1.1-6 (0.0668 and 0.1334); until 2.0.0 the width came from the aperture (8.8462 instead of 8.8320 degrees for 1 m); N3 the orbital speed at 600 km is within 0.5 % of 7.56 km/s (TR 38.821 Table 7.1-1) and the nadir 3 dB footprint of the Set-1 S-band beam within 10 % of the informative 50 km of Table 6.1.1.1-1.

The criteria were fixed in a plan before the first run.

handheld_gt_db(gain_dbi: float = 0.0, nf_db: float = 7.0, t_ant: float = 290.0) -> float

G/T [dB/K] of the handheld UE of TR 38.821 Table 6.1.1.1-3 (Eq. 6.1.3.1-3).

(FSPL, atmospheric loss, CNR) [dB] of an S-band downlink to a handheld UE (TR 38.821 clause 6.1.3).