3GPP TR 38.901 propagation tables¶
Note
Layer 3 shipped, Pass-1. The Layer 3 implementation (emitters,
device-fingerprint, tx-impairments, propagation, rx-frontend) landed
on branch rfgen-impl-2026-06-25-105955 (PR #94). The class names,
Pydantic schemas, and Transformation enum members referenced below
match the shipped surface; Pass-1 stubs (GNU Radio OOT emitters,
cellular emitters, Sionna propagation backends) construct cleanly and
raise an EmitterError or ChannelError tagged with
stage="pass1_stub" until backend wiring lands. See
Reference / rfgen.emitters and
Reference / rfgen.channels for the shipped
class roster.
This page records the numeric content used to validate Sionna-backed statistical propagation (SionnaUMa, SionnaUMi, SionnaRMa, SionnaTDL, and SionnaCDL) against 3GPP TR 38.901 V18.0.0. Most users will never read this page: Sionna handles the math internally and rfgen exposes only wrapper configuration.
Read this page when:
Verifying that the framework’s outputs match the spec for a regression test or HIL-validation harness.
Implementing a new backend that needs the same coefficient set.
Comparing rfgen results to a reference implementation (Sionna, MathWorks 5G Toolbox, NVIDIA Aerial).
Most rows below are accept-with-caveat: ranges and coefficients were verified against published reference implementations (Sionna PHY source, MathWorks 5G Toolbox, NVIDIA Aerial), but the primary 3GPP PDF was not re-fetched verbatim for every row in the research budget. The Verification follow-ups section enumerates which rows still need a primary-source confirmation pass.
UMa and UMi path loss (TR 38.901 Table 7.4.1-1)¶
Used as validation traceability for the SionnaUMa and SionnaUMi wrappers. See Concepts / Channels / Propagation for the framework-side description.
(TR 38.901 Table 7.4.1-1)¶
The UMa and UMi formulas below are reproduced from 3GPP TR 38.901 V18.0.0, Table 7.4.1-1 [7]. In all expressions \(f_c\) is the carrier frequency normalized by 1 GHz, distances are in metres, and the breakpoint distance uses the effective antenna heights \(h'_{BS} = h_{BS} - h_E\) and \(h'_{UT} = h_{UT} - h_E\) (Note 1 of the table).
UMa LOS (verified verbatim against TR 38.901 V18.0.0, Table 7.4.1-1 [7]):
Shadow fading: \(\sigma_{SF} = 4\) dB. Applicability: \(1.5\,\text{m} \le h_{UT} \le 22.5\,\text{m}\), \(h_{BS} = 25\) m. For UMa, \(h_E = 1\) m with probability \(1/(1+C(d_{2D}, h_{UT}))\), otherwise drawn from the discrete uniform set \(\{12, 15, \dots, h_{UT}-1.5\}\) (Note 1 of the table). Frequency validity: \(0.5 < f_c < 100\) GHz (Note 2).
UMa NLOS (accept with caveat, verified against the Sionna PHY reference implementation [8, 9]; primary 3GPP PDF was not re-fetched for the NLOS row in the verification budget):
Shadow fading: \(\sigma_{SF} = 6.0\) dB. The breakpoint applies only to the LOS reference inside the \(\max(\cdot)\); the NLOS-prime branch itself is not piecewise. Same antenna and distance applicability as UMa LOS.
UMi-Street Canyon LOS (verified verbatim against TR 38.901 V18.0.0, Table 7.4.1-1 [7], cross-checked against Sionna [10, 11]):
Shadow fading: \(\sigma_{SF} = 4\) dB. Applicability: \(1.5\,\text{m} \le h_{UT} \le 22.5\,\text{m}\), \(h_{BS} = 10\) m. For UMi, \(h_E = 1.0\) m (deterministic). Frequency validity: \(0.5 < f_c < 100\) GHz.
UMi-Street Canyon NLOS (accept with caveat, verified against the Sionna PHY reference implementation [12, 13]; primary 3GPP PDF was not re-fetched for the NLOS row):
Shadow fading: \(\sigma_{SF} = 7.82\) dB. Same antenna and distance applicability as UMi LOS; \(h_E = 1\) m for the LOS reference invoked inside the \(\max(\cdot)\).
Breakpoint distance (both scenarios):
where \(f_c\) is in Hz and \(c = 3.0 \times 10^8\) m/s; \(h'_{BS} = h_{BS} - h_E\), \(h'_{UT} = h_{UT} - h_E\).
TDL per-tap tables (TR 38.901 Table 7.7.2)¶
Delays are normalized; physical delays are obtained by multiplying by the user-specified RMS delay spread (TR 38.901 Section 7.7.3 [3]). All NLOS profiles (TDL-A, TDL-B, TDL-C) are pure Rayleigh fading per tap. TDL-D and TDL-E are LOS profiles in which tap 1 is Ricean: the table splits tap 1 into a deterministic LOS specular ray and a co-located Rayleigh component, and the K-factor in dB is the difference of the two powers.
TDL-A (NLOS, 23 taps; verified against Sionna [14] and TR 38.901 Table 7.7.2-1 [3]):
Tap |
Normalized delay |
Power (dB) |
Distribution |
|---|---|---|---|
1 |
0.0000 |
-13.4 |
Rayleigh |
2 |
0.3819 |
0.0 |
Rayleigh |
3 |
0.4025 |
-2.2 |
Rayleigh |
4 |
0.5868 |
-4.0 |
Rayleigh |
5 |
0.4610 |
-6.0 |
Rayleigh |
6 |
0.5375 |
-8.2 |
Rayleigh |
7 |
0.6708 |
-9.9 |
Rayleigh |
8 |
0.5750 |
-10.5 |
Rayleigh |
9 |
0.7618 |
-7.5 |
Rayleigh |
10 |
1.5375 |
-15.9 |
Rayleigh |
11 |
1.8978 |
-6.6 |
Rayleigh |
12 |
2.2242 |
-16.7 |
Rayleigh |
13 |
2.1718 |
-12.4 |
Rayleigh |
14 |
2.4942 |
-15.2 |
Rayleigh |
15 |
2.5119 |
-10.8 |
Rayleigh |
16 |
3.0582 |
-11.3 |
Rayleigh |
17 |
4.0810 |
-12.7 |
Rayleigh |
18 |
4.4579 |
-16.2 |
Rayleigh |
19 |
4.5695 |
-18.3 |
Rayleigh |
20 |
4.7966 |
-18.9 |
Rayleigh |
21 |
5.0066 |
-16.6 |
Rayleigh |
22 |
5.3043 |
-19.9 |
Rayleigh |
23 |
9.6586 |
-29.7 |
Rayleigh |
Note: the spec deliberately does not sort taps by delay; preserve the order above when populating implementations.
TDL-B (NLOS, 23 taps; verified against Sionna [15] and the NVIDIA Aerial reference [16]):
Tap |
Normalized delay |
Power (dB) |
Distribution |
|---|---|---|---|
1 |
0.0000 |
0.0 |
Rayleigh |
2 |
0.1072 |
-2.2 |
Rayleigh |
3 |
0.2155 |
-4.0 |
Rayleigh |
4 |
0.2095 |
-3.2 |
Rayleigh |
5 |
0.2870 |
-9.8 |
Rayleigh |
6 |
0.2986 |
-1.2 |
Rayleigh |
7 |
0.3752 |
-3.4 |
Rayleigh |
8 |
0.5055 |
-5.2 |
Rayleigh |
9 |
0.3681 |
-7.6 |
Rayleigh |
10 |
0.3697 |
-3.0 |
Rayleigh |
11 |
0.5700 |
-8.9 |
Rayleigh |
12 |
0.5283 |
-9.0 |
Rayleigh |
13 |
1.1021 |
-4.8 |
Rayleigh |
14 |
1.2756 |
-5.7 |
Rayleigh |
15 |
1.5474 |
-7.5 |
Rayleigh |
16 |
1.7842 |
-1.9 |
Rayleigh |
17 |
2.0169 |
-7.6 |
Rayleigh |
18 |
2.8294 |
-12.2 |
Rayleigh |
19 |
3.0219 |
-9.8 |
Rayleigh |
20 |
3.6187 |
-11.4 |
Rayleigh |
21 |
4.1067 |
-14.9 |
Rayleigh |
22 |
4.2790 |
-9.2 |
Rayleigh |
23 |
4.7834 |
-11.3 |
Rayleigh |
TDL-C (NLOS, 24 taps; verified against Sionna [17]):
Tap |
Normalized delay |
Power (dB) |
Distribution |
|---|---|---|---|
1 |
0.0000 |
-4.4 |
Rayleigh |
2 |
0.2099 |
-1.2 |
Rayleigh |
3 |
0.2219 |
-3.5 |
Rayleigh |
4 |
0.2329 |
-5.2 |
Rayleigh |
5 |
0.2176 |
-2.5 |
Rayleigh |
6 |
0.6366 |
0.0 |
Rayleigh |
7 |
0.6448 |
-2.2 |
Rayleigh |
8 |
0.6560 |
-3.9 |
Rayleigh |
9 |
0.6584 |
-7.4 |
Rayleigh |
10 |
0.7935 |
-7.1 |
Rayleigh |
11 |
0.8213 |
-10.7 |
Rayleigh |
12 |
0.9336 |
-11.1 |
Rayleigh |
13 |
1.2285 |
-5.1 |
Rayleigh |
14 |
1.3083 |
-6.8 |
Rayleigh |
15 |
2.1704 |
-8.7 |
Rayleigh |
16 |
2.7105 |
-13.2 |
Rayleigh |
17 |
4.2589 |
-13.9 |
Rayleigh |
18 |
4.6003 |
-13.9 |
Rayleigh |
19 |
5.4902 |
-15.8 |
Rayleigh |
20 |
5.6077 |
-17.1 |
Rayleigh |
21 |
6.3065 |
-16.0 |
Rayleigh |
22 |
6.6374 |
-15.7 |
Rayleigh |
23 |
7.0427 |
-21.6 |
Rayleigh |
24 |
8.6523 |
-22.8 |
Rayleigh |
TDL-D (LOS, 13 taps; tap 1 Ricean with \(K = 13.3\) dB; verified against Sionna [18] and MathWorks 5G Toolbox [19]):
Tap |
Normalized delay |
Power (dB) |
Distribution |
|---|---|---|---|
1 (LOS specular) |
0.0000 |
-0.2 |
LOS |
1 (Rayleigh) |
0.0000 |
-13.5 |
Rayleigh |
2 |
0.0350 |
-18.8 |
Rayleigh |
3 |
0.6120 |
-21.0 |
Rayleigh |
4 |
1.3630 |
-22.8 |
Rayleigh |
5 |
1.4050 |
-17.9 |
Rayleigh |
6 |
1.8040 |
-20.1 |
Rayleigh |
7 |
2.5960 |
-21.9 |
Rayleigh |
8 |
1.7750 |
-22.9 |
Rayleigh |
9 |
4.0420 |
-27.8 |
Rayleigh |
10 |
7.9370 |
-23.6 |
Rayleigh |
11 |
9.4240 |
-24.8 |
Rayleigh |
12 |
9.7080 |
-30.0 |
Rayleigh |
13 |
12.5250 |
-27.7 |
Rayleigh |
K-factor: \(K = -0.2 - (-13.5) = 13.3\) dB.
TDL-E (accept with caveat, LOS, 14 taps; tap 1 Ricean with \(K = 22.0\) dB; verified against Sionna [20]; the source citation should reference TR 38.901 Table 7.7.2-5, not 7.7.2-1):
Tap |
Normalized delay |
Power (dB) |
Distribution |
|---|---|---|---|
1 (LOS specular) |
0.0000 |
-0.03 |
LOS |
1 (Rayleigh) |
0.0000 |
-22.03 |
Rayleigh |
2 |
0.5133 |
-15.8 |
Rayleigh |
3 |
0.5440 |
-18.1 |
Rayleigh |
4 |
0.5630 |
-19.8 |
Rayleigh |
5 |
0.5440 |
-22.9 |
Rayleigh |
6 |
0.7112 |
-22.4 |
Rayleigh |
7 |
1.9092 |
-18.6 |
Rayleigh |
8 |
1.9293 |
-20.8 |
Rayleigh |
9 |
1.9589 |
-22.6 |
Rayleigh |
10 |
2.6426 |
-22.3 |
Rayleigh |
11 |
3.7136 |
-25.6 |
Rayleigh |
12 |
5.4524 |
-20.2 |
Rayleigh |
13 |
12.0034 |
-29.8 |
Rayleigh |
14 |
20.6519 |
-29.2 |
Rayleigh |
K-factor: \(K = -0.03 - (-22.03) = 22.0\) dB.
CDL structural metadata (TR 38.901 Tables 7.7.1-1 to 7.7.1-5)¶
Only structural metadata is reproduced here. The full per-cluster AOD, AOA, ZOD, and ZOA tables are large and should be read directly from 3GPP TR 38.901 Tables 7.7.1-1 (CDL-A) through 7.7.1-5 (CDL-E) [3] or from a verified machine-readable mirror such as the Sionna PHY model JSON files [21]. This is a deliberate scope limit on this page, not a TODO.
The angle-spread columns below are the per-cluster (intra-cluster) ray spreads \(c_{ASD}\), \(c_{ASA}\), \(c_{ZSD}\), \(c_{ZSA}\) from the Per-Cluster Parameters footer of each CDL table. They are not scenario-level RMS angle spreads; scenario-level spreads come from Table 7.5-6 and are applied at runtime via the angular-scaling procedure of TR 38.901 Section 7.7.5.1 [3]. Cluster delays in all five CDL profiles are normalized and scaled by the user-specified desired RMS delay spread per Section 7.7.3.
Profile |
LOS |
Clusters |
K-factor (dB) |
\(c_{ASD}\) |
\(c_{ASA}\) |
\(c_{ZSD}\) |
\(c_{ZSA}\) |
XPR (dB) |
|---|---|---|---|---|---|---|---|---|
CDL-A |
NLOS |
23 |
n/a |
5.0 |
11.0 |
3.0 |
3.0 |
10 |
CDL-B (accept with caveat) |
NLOS |
23 |
n/a |
10.0 |
22.0 |
3.0 |
7.0 |
8 |
CDL-C |
NLOS |
24 |
n/a |
2.0 |
15.0 |
3.0 |
7.0 |
7 |
CDL-D (accept with caveat) |
LOS |
13 |
13.3 |
5.0 |
8.0 |
3.0 |
3.0 |
11 |
CDL-E |
LOS |
14 |
~9.27 (model \(K_{model}\) from cluster powers, eq. 7.7.6-2); user-tunable via \(K_{desired}\) |
5.0 |
11.0 |
3.0 |
7.0 |
8 |
For CDL-D and CDL-E, the listed cluster count follows the spec convention in which cluster 1 contains both a deterministic LOS specular component and a co-located Laplacian sub-cluster but counts as a single cluster. The K-factor is the ratio of the LOS specular power to the cluster-1 Laplacian power. K-factor scaling per TR 38.901 Section 7.7.6 lets the user retune K to a desired value; after rescaling, delays must be re-normalized so that the resulting RMS delay spread equals 1 before applying the user-supplied DS [3].
Verification follow-ups¶
The following rows were verified against the Sionna reference implementation only; the primary 3GPP/ETSI TR 38.901 PDF could not be re-fetched within the verification budget. Confirm directly against TR 38.901 V18.0.0 before any normative use:
UMa NLOS row (formula coefficients, \(\sigma_{SF} = 6.0\) dB, antenna and distance applicability). Verifier recommendation: accept_with_caveat.
UMi-Street Canyon NLOS row (formula coefficients, \(\sigma_{SF} = 7.82\) dB, antenna and distance applicability). Verifier recommendation: accept_with_caveat.
CDL-B intra-cluster spreads (table footer of Table 7.7.1-2). Verifier recommendation: accept_with_caveat.
CDL-D intra-cluster spreads and the labeling of \(c_{ASD}/c_{ASA}/c_{ZSD}/c_{ZSA}\) versus scenario-level ASD/ASA/ZSD/ZSA. Verifier recommendation: accept_with_caveat. The page now uses the per-cluster \(c_{AS}\) keys explicitly to avoid confusion.
TDL-E source-table number: the original research metadata cited TR 38.901 Table 7.7.2-1, but TDL-E lives in Table 7.7.2-5 (Table 7.7.2-1 is TDL-A). The page now references 7.7.2-5; confirm against the PDF.
See Also¶
Concepts / Channels / Propagation for the framework-side description and backend selection matrix.
Background / Sionna stack for how Sionna PHY’s TDL/CDL classes consume these tables.
Reference /
rfgen.channelsfor the proposed Sionna-backed propagation APIs.
References¶
3GPP TR 38.901 V18.0.0 (2024-05). Study on channel model for frequencies from 0.5 to 100 GHz. Sections 7.4.1 (path loss), 7.7.1 (CDL profiles), 7.7.2 (TDL profiles), 7.7.3 (delay-spread scaling), 7.7.5 (angular scaling), 7.7.6 (K-factor scaling). https://www.3gpp.org/dynareport/38901.htm
ETSI mirror of TR 138 901 V18.0.0. https://www.etsi.org/deliver/etsi_tr/138900_138999/138901/18.00.00_60/tr_138901v180000p.pdf
The numbered footnotes used inline above resolve as follows:
3GPP TR 38.901 V18.0.0 (2024-05) / ETSI TR 138 901 V18.0.0, Section 7.4.1, Table 7.4.1-1 (Pathloss models), UMa LOS row and Notes 1, 2, 6. https://www.etsi.org/deliver/etsi_tr/138900_138999/138901/18.00.00_60/tr_138901v180000p.pdf
NVIDIA Sionna PHY,
tr38901/uma_scenario.py, NLOS branch (pl_3 = 13.54 + 39.08*log10(d_3D) + 20*log10(f_c/1e9) - 0.6*(h_UT - 1.5);pl_nlos = max(pl_los, pl_3)). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/uma_scenario.pyNVIDIA Sionna PHY,
tr38901/models/UMa_NLoS.json(sigmaSF = 6.0). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/models/UMa_NLoS.jsonNVIDIA Sionna PHY,
tr38901/umi_scenario.py, LOS breakpoint and PL1/PL2 expressions. https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/umi_scenario.pyNVIDIA Sionna PHY,
tr38901/models/UMi_LoS.json(sigmaSF = 4.0). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/models/UMi_LoS.jsonNVIDIA Sionna PHY,
tr38901/umi_scenario.py, NLOS branch (pl_3 = 35.3*log10(d_3D) + 22.4 + 21.3*log10(f_c/1e9) - 0.3*(h_UT - 1.5)). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/umi_scenario.pyNVIDIA Sionna PHY,
tr38901/models/UMi_NLoS.json(sigmaSF = 7.82). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/models/UMi_NLoS.jsonNVIDIA Sionna PHY,
tr38901/models/TDL-A.json(mirrors TR 38.901 Table 7.7.2-1, NLOS, 23 taps). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/models/TDL-A.jsonNVIDIA Sionna PHY,
tr38901/models/TDL-B.json(mirrors TR 38.901 Table 7.7.2-2). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/models/TDL-B.jsonNVIDIA Aerial CUDA-Accelerated RAN,
testBenches/chanModels/src/tdl_chan_src/tdl_pdp_table.h,pdp_38901_constTDL-B block (independent reimplementation of TR 38.901 Section 7.7.2). https://github.com/NVIDIA/aerial-cuda-accelerated-ranNVIDIA Sionna PHY,
tr38901/models/TDL-C.json(mirrors TR 38.901 Table 7.7.2-3, NLOS, 24 taps). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/models/TDL-C.jsonNVIDIA Sionna PHY,
tr38901/models/TDL-D.json(mirrors TR 38.901 Table 7.7.2-4, LOS, 13 taps). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/models/TDL-D.jsonMathWorks 5G Toolbox,
nrTDLChannelSystem object reference,KFactorFirstTapdefault (13.3 dB, attributed to TR 38.901 Table 7.7.2-4). https://www.mathworks.com/help/5g/ref/nrtdlchannel-system-object.htmlNVIDIA Sionna PHY,
tr38901/models/TDL-E.json(mirrors TR 38.901 Table 7.7.2-5, LOS, 14 taps). https://raw.githubusercontent.com/NVlabs/sionna/main/src/sionna/phy/channel/tr38901/models/TDL-E.jsonNVIDIA Sionna PHY,
tr38901/models/CDL-A.jsonthroughCDL-E.json(machine-readable mirrors of TR 38.901 Tables 7.7.1-1 to 7.7.1-5). https://github.com/NVlabs/sionna/tree/main/src/sionna/phy/channel/tr38901/models