Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

OpenNTN

3GPP TR 38.811 non-terrestrial network channel models for Sionna

PyPI version Python versions Licence: MIT AND Apache-2.0 Paper: WSA 2025

Overview

OpenNTN is an open-source extension of Sionna that implements the non-terrestrial network (NTN) channel models of 3GPP TR 38.811 for satellite links. Its channel models follow the interface of Sionna's TR 38.901 models, so they can be used in Sionna's link-level and system-level simulations. OpenNTN 2 is built on Sionna 2, which uses PyTorch.

Key features

  • Scenarios: dense urban (DenseUrban), urban (Urban) and suburban (SubUrban), with the parameter tables of TR 38.811 clause 6.7.2 and the fast-fading process of TR 38.901 clause 7.5.
  • Bands and links: S band (1.9 GHz to 4 GHz) and Ka band (19 GHz to 40 GHz), uplink and downlink, elevation angles from 10 to 90 degrees.
  • Propagation (TR 38.811 clause 6.6): line-of-sight probability, free-space path loss, shadow fading, clutter loss, atmospheric gas absorption, ionospheric scintillation in the S band and tropospheric scintillation in the Ka band. The shadow fading is the large scale parameter SF of TR 38.901 clause 7.5, step 4, applied once in step 12: TR 38.811 eq. (6.6-4) writes it into the basic path loss, and its Tables 6.7.2-1a to 6.7.2-8b give its cross-correlations and correlation distance, so the basic path loss of the models is the free-space path loss plus the clutter loss.
  • Satellite Doppler: the Doppler shift of the satellite's orbital motion, in addition to the motion of the user terminals; it can be switched off.
  • Antennas: Sionna-style antenna elements, panels and arrays with the TR 38.901 element pattern, an omnidirectional pattern, a circular-aperture pattern and the co-phased dual-linear-polarization pattern of 3GPP R1-1802551.
  • Topology: a generator for one satellite and the user terminals of a single sector at a given elevation angle and satellite height.
  • Sionna integration: the models are Sionna channel models. They return path coefficients and delays in Sionna's format and work with Sionna's channel functions and blocks, such as cir_to_ofdm_channel and OFDMChannel.

Installation and requirements

OpenNTN 2 requires Python 3.11 or later and Sionna 2.0.1 or later within 2.x (sionna>=2.0.1,<3.0). Further dependencies (PyTorch, NumPy, matplotlib) are installed with it.

  1. Install PyTorch for your platform, CPU or CUDA, as described at https://pytorch.org/get-started/locally/.

  2. Install OpenNTN:

    python -m pip install openntn
    

OpenNTN 2 is a pre-release until 2.0.0, and its interfaces can still change. pip installs a pre-release only if no final release of openntn is available; otherwise --pre is needed (python -m pip install --pre openntn). The changes of this version are listed in the changelog.

Note: openntn 2.x requires Sionna 2.x. Installing it into an environment with Sionna 1.x upgrades Sionna to 2.x. For Sionna 1.x and Sionna 0.19, use the corresponding versions of OpenNTN from the repository at https://github.com/ant-uni-bremen/OpenNTN.

Quickstart

from sionna.phy.channel import cir_to_ofdm_channel, subcarrier_frequencies

from openntn import Antenna, AntennaArray, Urban
from openntn.utils import gen_single_sector_topology

carrier_frequency = 2.2e9   # S band downlink
elevation_angle = 50.0      # degrees

# User terminal: one antenna; satellite: 4 x 4 dual-polarized array
ut_array = Antenna(polarization="single", polarization_type="V",
                   antenna_pattern="omni", carrier_frequency=carrier_frequency)
bs_array = AntennaArray(num_rows=4, num_cols=4, polarization="dual",
                        polarization_type="cross", antenna_pattern="38.901",
                        carrier_frequency=carrier_frequency)

channel_model = Urban(carrier_frequency=carrier_frequency, ut_array=ut_array,
                      bs_array=bs_array, direction="downlink",
                      elevation_angle=elevation_angle)

# 16 examples of a single sector: one satellite at 600 km, 4 user terminals
topology = gen_single_sector_topology(batch_size=16, num_ut=4, scenario="urb",
                                      elevation_angle=elevation_angle, bs_height=600e3)
channel_model.set_topology(*topology)

# One channel realization: path coefficients a and path delays tau
a, tau = channel_model(num_time_samples=1, sampling_frequency=15e3)

# Frequency response on 72 subcarriers with Sionna's channel functions
frequencies = subcarrier_frequencies(num_subcarriers=72, subcarrier_spacing=30e3)
h_freq = cir_to_ofdm_channel(frequencies, a, tau, normalize=True)
print(h_freq.shape)  # [batch, rx, rx antennas, tx, tx antennas, time steps, subcarriers]

A channel model runs on the device given by its argument device, for example device="cuda:0", which defaults to sionna.phy.config.device at the construction of the model; create the antennas on the same device, with their argument device, which has the same default. A model stays on its device and in its precision: build it with the device and precision it is to use instead of moving it with .to() or casting it. Moved or cast after the last set_topology, its call raises ValueError; a move or cast at another point fails with an error from PyTorch.

Citation

If you use OpenNTN in your research, please cite:

T. Düe, M. Vakilifard, C. Bockelmann, D. Wübben and A. Dekorsy, "OpenNTN: An Open-Source Framework for Non-Terrestrial Network Channel Simulations," 2025 28th International Workshop on Smart Antennas (WSA), Erlangen, Germany, 2025, https://doi.org/10.1109/WSA65299.2025.11202820

@inproceedings{OpenNTNPaper,
  author = {T. D\"{u}e and M. Vakilifard and C. Bockelmann and D. W\"{u}bben and A. Dekorsy},
  title = {OpenNTN: An Open-Source Framework for Non-Terrestrial Network Channel Simulations},
  booktitle = {2025 28th International Workshop on Smart Antennas (WSA)},
  address = {Erlangen, Germany},
  year = {2025},
  month = {Sep},
  pages = {1--7},
  doi = {10.1109/WSA65299.2025.11202820}
}

Licence

OpenNTN is distributed under the licence expression MIT AND Apache-2.0:

  • Files derived from NVIDIA Sionna are licensed under the Apache License 2.0 (LICENSE-APACHE). Their headers keep NVIDIA's copyright notice and, for modified files, state that they were modified at the University of Bremen.
  • All other files are licensed under the MIT License (LICENSE).

Data files cannot carry a header. TDL-A30.json, TDL-B100.json and TDL-C300.json in openntn/models are unchanged copies of Sionna's files and therefore under Apache-2.0; the other TDL and CDL files hold the NTN-TDL and NTN-CDL parameters of TR 38.811 (Tables 6.9.1-1 to 6.9.1-4 and 6.9.2-1 to 6.9.2-4) and are under MIT like all other files.

The OpenNTN logo is not covered by these licences.

Maintainer and contact

Louis Lagona lagona@ant.uni-bremen.de

Bug reports and questions: https://github.com/ant-uni-bremen/OpenNTN/issues

Acknowledgements

OpenNTN was originally written by Tim Düe at the Department of Communications Engineering (Arbeitsbereich Nachrichtentechnik) of the University of Bremen, https://www.ant.uni-bremen.de/. It builds on NVIDIA Sionna.

Metadata

Release files for openntn 2.0.0a3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for openntn 2.0.0a3
File Size Uploaded Provenance
openntn-2.0.0a3.tar.gz 299.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for openntn 2.0.0a3
File Interpreter ABI Platform
openntn-2.0.0a3-py3-none-any.whl Python 3 none any Details

Total release size: 448.3 kB

Release files / openntn-2.0.0a3.tar.gz

Download URL openntn-2.0.0a3.tar.gz
Size 299.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3c3010b9afdf5e214bfe8e2a3817b29d15dbc33b1d9e28be2f1f3bae744e39bc
BLAKE2b-256 checksum
How to use checksums
4b25828f01241119e60cc3d3e2cb7c9e7d8fa0d1a5ca55065ec24710105dfae8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / openntn-2.0.0a3-py3-none-any.whl

Download URL openntn-2.0.0a3-py3-none-any.whl
Size 148.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ed9fc5fcb84b0b6ddf2e3842b492836e3ebce64dd95254fa4ef16ccc2b48d6c5
BLAKE2b-256 checksum
How to use checksums
f2049c32af2d431c6f0aadfb6edf8f9948a6c3b64b6fe5886e2ef9141f0c687b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Security for openntn 2.0.0a3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for openntn-2.0.0a3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page