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

\[\begin{split}PL_{\text{UMa-LOS}} = \begin{cases} 28.0 + 22\log_{10}(d_{3D}) + 20\log_{10}(f_c), & 10\,\text{m} \le d_{2D} \le d'_{BP} \\ 28.0 + 40\log_{10}(d_{3D}) + 20\log_{10}(f_c) - 9\log_{10}\!\left((d'_{BP})^2 + (h_{BS}-h_{UT})^2\right), & d'_{BP} \le d_{2D} \le 5\,\text{km} \end{cases}\end{split}\]

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

\[PL_{\text{UMa-NLOS}} = \max\!\left(PL_{\text{UMa-LOS}},\; PL'_{\text{UMa-NLOS}}\right)\]
\[PL'_{\text{UMa-NLOS}} = 13.54 + 39.08\log_{10}(d_{3D}) + 20\log_{10}(f_c) - 0.6\,(h_{UT}-1.5)\]

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

\[\begin{split}PL_{\text{UMi-LOS}} = \begin{cases} 32.4 + 21\log_{10}(d_{3D}) + 20\log_{10}(f_c), & 10\,\text{m} \le d_{2D} \le d'_{BP} \\ 32.4 + 40\log_{10}(d_{3D}) + 20\log_{10}(f_c) - 9.5\log_{10}\!\left((d'_{BP})^2 + (h_{BS}-h_{UT})^2\right), & d'_{BP} \le d_{2D} \le 5\,\text{km} \end{cases}\end{split}\]

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

\[PL_{\text{UMi-NLOS}} = \max\!\left(PL_{\text{UMi-LOS}},\; PL'_{\text{UMi-NLOS}}\right)\]
\[PL'_{\text{UMi-NLOS}} = 35.3\log_{10}(d_{3D}) + 22.4 + 21.3\log_{10}(f_c) - 0.3\,(h_{UT}-1.5)\]

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

\[d'_{BP} = \frac{4\, h'_{BS}\, h'_{UT}\, f_c}{c}\]

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

References

  1. 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

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

  1. 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

  2. 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.py

  3. NVIDIA 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.json

  4. NVIDIA 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.py

  5. NVIDIA 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.json

  6. NVIDIA 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.py

  7. NVIDIA 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.json

  8. NVIDIA 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.json

  9. NVIDIA 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.json

  10. NVIDIA Aerial CUDA-Accelerated RAN, testBenches/chanModels/src/tdl_chan_src/tdl_pdp_table.h, pdp_38901_const TDL-B block (independent reimplementation of TR 38.901 Section 7.7.2). https://github.com/NVIDIA/aerial-cuda-accelerated-ran

  11. NVIDIA 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.json

  12. NVIDIA 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.json

  13. MathWorks 5G Toolbox, nrTDLChannel System object reference, KFactorFirstTap default (13.3 dB, attributed to TR 38.901 Table 7.7.2-4). https://www.mathworks.com/help/5g/ref/nrtdlchannel-system-object.html

  14. NVIDIA 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.json

  15. NVIDIA Sionna PHY, tr38901/models/CDL-A.json through CDL-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