3 Path Solver

Refer to caption
Figure 7: The path solver constructs propagation paths that connect a source and a target in a scene.

A path solver aims to determine a set of paths that connect two endpoints in a scene, as illustrated in Figure 7. From this set of paths, a time- or frequency-domain CIR can be computed. The path solver leverages SBR to efficiently compute paths in a scene. SBR operates as follows: First, rays22 2 The processing of the rays is parallelized for accelerated computation. are traced from the source into directions specified by a lattice on the unit sphere (see Section 3.1.1). Then, an SBR loop iteratively tests the intersection of the rays with the scene geometry. At every intersection, an interaction type is selected from specular reflection, diffuse reflection, and refraction, and a new ray is spawned according to the selected interaction type. The method for choosing interaction types is detailed in Section 3.1.2. The loop terminates when no more rays remain active, meaning they have either bounced out of the scene, reached a predefined maximum number of bounces, or satisfied another termination criterion. Notably, at each interaction of a ray with a surface in the scene, only one scattered ray is spawned, as spawning multiple rays would result in an exponential increase in the number of rays, quickly overwhelming the available computational resources.

When a diffuse reflection occurs during the SBR loop, the solver checks whether there is a line-of-sight (LoS) to the target, meaning that the ray segment from the interaction point to the target point is not occluded. If such a connection exists, the path is deemed valid and is returned by the solver. This process is known as next-event estimation. Subsequently, a new ray is spawned in a random direction within the hemisphere defined by the surface normal of the primitive involved. This new ray may lead to the discovery of additional paths. Next-event estimation is only possible for diffuse reflections that scatter energy into all directions. For specular reflection and refraction, only a single ray is spawned in the only possible direction. Consequently, the probability of finding paths connecting the source to the target that end with a specular reflection or refraction by SBR is effectively zero, as depicted in Figure 8. This is because hitting a specific point (the target) with a specular reflection or refraction requires perfect alignment of the incident ray, which has zero probability in continuous space. Therefore, paths ending with a specular suffix cannot be determined solely by SBR. Especially, specular chains cannot be computed by SBR. Since specular chains typically carry a significant amount of the transported energy, SBR alone is insufficient for computing CIRs.

Refer to caption
Figure 8: When a diffuse reflection occurs, next event estimation tests whether the LoS between the intersection point and the target is occluded (represented by the dotted line). This process is not applicable for specular reflection (represented by the dashed line) and refraction, as only one single direction for the scattered ray is valid.

To compute paths ending with a specular suffix, including specular chains, the path solver uses an image method-based algorithm. However, a brute-force implementation of the image method would test all possible combinations of primitives that constitute the scene and hence is prohibitive even for moderately large scenes. Therefore, the path solver uses SBR as an heuristic to find path candidates. A path candidate consists of a sequence of primitives and interaction types ending with a specular reflection or refraction. As the path vertices determined during the SBR do not form a path that connects to the target, the image method is used to adjust the vertex locations to establish the connection. Intuitively, SBR pre-selects path candidates in the vicinity of the transmitter and receiver for the image method to compute corresponding valid paths to be returned by the solver. These steps of the Sionna RT path solver are depicted in Figure 9. Notably, only path candidates ending with a specular suffix (including specular chains) require further processing by the image method algorithm. Finally, for each valid path identified, the path solver computes the corresponding channel coefficients and propagation delays that characterize the EM wave propagation along that path.

Alternative methods for identifying paths that include specular chains or specular suffixes may involve detection spheres centered at the targets to capture paths ending with a specular suffix, and/or extending the direction of specular reflection (or refraction) to a lobe around the specular (or refracted) direction. Such methods only approximate the path vertex locations and the directions of the scattered rays, yielding inaccurate path coefficients and consequently resulting in incorrect CIRs.

Refer to caption
Figure 9: Main steps of the Sionna RT path solver.

The remainder of this section follows the architecture of the path solver shown in Figure 9. First, Section 3.1 presents the SBR-based candidate generator. Section 3.2 then describes the image method-based algorithm that processes candidates to find valid paths with specular suffixes. Finally, Section 3.3 details how the solver computes the complex-valued channel coefficients and propagation delays, which characterize the radio channel.

3.1 Generating Candidates by Shooting and Bouncing of Rays (SBR)

Refer to caption
Figure 10: Algorithm for one sample as implemented in the SBR-based candidate generator. In practice, many samples are processed in parallel.

The candidate generator utilizes the SBR-based method as illustrated in Figure 10. We first provide an overview of the SBR procedure, followed by a detailed explanations. We consider a scene with a single source located at 𝐬3 and NT targets at 𝐭k3, where k=1,,NT. Although the path solver built into Sionna RT can handle multiple sources, we focus on a single source for the sake of clarity. The process is identical for all sources. The paths traced by the candidate generator during the SBR procedure are referred to as samples in this section to avoid confusion with the valid paths returned to the user and the candidate paths forwarded to the image method-based algorithm. A sample therefore consists of a sequence of rays connected end-to-end, traced by the candidate generator. As we will see, a single sample can result in multiple valid or candidate paths, as illustrated in Figure 11.

Refer to caption
Figure 11: SBR procedure for a single sample n at depths 1, 2, and 3. At each interaction (i.e. iteration of the SBR loop), the sample may result in a candidate or valid path, and a new ray is spawned from the current interaction point to prolong the sample path. Shown in 2D for clarity.

The SBR procedure begins by spawning a user-specified number of rays, denoted by NS, from the source 𝐬 in directions 𝐤^n(0) on a Fibonacci lattice, where n=1,,NS. Each ray starts a sample that is traced by the candidate generator. Details on the implemented Fibonacci lattice can be found in Section 3.1.1. The SBR loop then iterates until either all samples bounce out of the scene or reach a user-specified maximum number of bounces, denoted as the maximum depth L. We denote the depth of the samples by =0,,L. The first step of the SBR loop involves testing the intersection of the samples with the scene geometry. If a sample does not intersect any object, it has bounced out of the scene, and is deactivated. When a sample n with depth intersects the scene, we denote by 𝐯n()3 the intersection point, by 𝐧^n()3(𝐧^n()2=1) the surface normal at the intersection point oriented towards the half-space containing the incident field, by on()0 the index of the intersected object, and by mn()0 the index of the specific intersected primitive within that object. An interaction type, denoted by χn(), is then sampled among specular reflection, diffuse reflection, and refraction, which determines how the sample will continue to propagate. Details on the sampling of the interaction type are provided in Section 3.1.2. The rest of the loop depends on the sampled interaction type.

Diffuse Reflection

As previously indicated, diffuse reflection is assumed to scatter energy in all directions of the half-space containing the incident field, which enables next event estimation. Therefore, if a diffuse reflection is sampled (i.e. χn()=𝒮), the LoS between the intersection point and each target 𝐭1,,𝐭NT is tested. For each target 𝐭k with an unobstructed LoS to the intersection point, a path connecting the source to the target

pn()=(𝐬,(𝐯n(1),on(1),mn(1),χn(1)),,(𝐯n(),on(),mn(),χn()),𝐭k) (11)

is recorded as a valid path to be returned to the user. Note that the path here is enriched with the intersected primitives and the interaction types. Finally, a new ray is spawned to continue the sample path, with its direction selected uniformly at random from the hemisphere defined by 𝐧^n(), i.e. 𝐤^n(+1)𝒰2π(𝐧^n()), where 𝒰2π(𝐧^n()) represents the uniform distribution on the hemisphere.

Specular Reflection and Refraction

When a specular reflection or refraction is sampled (i.e. χn()= or χn()=𝒯), the path (11) is a valid path for target 𝐭k, where k{1,,NT}, only if

𝐭k𝐯n()𝐭k𝐯n()2=𝐤^n(+1), (12)

where

𝐤^n(+1)={𝐤^n()2((𝐤^n())𝖳𝐧^n())𝐧^n()if χn()=𝐤^n()if χn()=𝒯 (13)

and where 𝐮𝖳 denotes the transpose of 𝐮. Since targets are modeled as points, condition (12) effectively occurs with zero probability, and, consequently, the path (11) is not a valid path. However, the specular suffix pn(d:), where d is defined as in (10), can be further processed to determine vertices (𝐯~n(d+1),,𝐯~n()) such that

p~n()=(𝐬,(𝐯n(1),on(1),mn(1),χn(1)),,(𝐯~n(d+1),on(d+1),mn(d+1),χn(d+1)),,(𝐯~n(),on(),mn(),χn()),𝐭kProcessed specular suffix) (14)

is a valid path, as illustrated in Figure 12. This additional processing is performed using the image method in the algorithm described in Section 3.2.

Refer to caption
Figure 12: Processing a candidate specular chain of depth =2 (pn(2), dashed line) to produce a valid path (p~n(2), solid line). The same process applies to specular suffixes. Shown in 2D for clarity.

Importantly, for a sequence of primitives and interaction types

(𝐯n(d),(on(d+1),mn(d+1),χn(d+1)),,(on(),mn(),χn()),𝐭i) (15)

where 𝐯n(0)=𝐬, there exists at most a single set of vertices 𝐯~n(d+1),,𝐯~n() such that p~n() is a valid path. Consequently, if d=0, i.e. pn() is a specular chain, then further processing by the image method of multiple identical candidates (15) would result in multiple identical valid paths, which would lead to erroneous CIRs. Therefore, if the sample pn() is a specular chain, a hashing-based de-duplication mechanism, detailed in Section 3.1.3, ensures that specular chain candidates are only evaluated once. Notably, the path hashing mechanism discards redundant candidates “on-the-fly”, significantly reducing memory and compute requirements. However, when d>0, then 𝐯n(d) corresponds to a diffuse reflection point that is the result of a randomly sampled ray direction (either at the source or the last previous diffuse reflection point). Since the probability of two different paths having identical randomly sampled diffuse reflection points is effectively zero, path uniqueness is guaranteed in these cases without requiring the de-duplication mechanism. As shown in Figure 10, a LoS occlusion test to the target is used as a heuristic to discard path candidates that have little chance of resulting in a valid path after processing by the image method-based algorithm. Finally, a new ray is traced into the direction (13) to continue the sample path.

The candidate generator depicted in Figure 10 thus yields a set of valid paths connecting the source to all targets that do not require further processing (except for the computation of the corresponding path coefficients and delays) and end with a diffuse reflection. Additionally, it produces a set of candidate paths ending with specular suffixes, which require further processing to be either discarded or refined into valid paths. The path solver constructs paths that may include any combination and number of specular reflections, diffuse reflections, and refractions.

3.1.1 Sampling Initial Ray Directions

The SBR procedure starts by spawning rays from the source with directions obtained from a spherical Fibonacci lattice with NS points, which is defined as follows:

𝐤^n(0)=[sinθncosϕnsinθnsinϕncosθn] (16)

where

θn = arccos2nNS
ϕn = 2πnφ

and NS2nNS21, φ=1+52 is the golden ratio, and and the floor and ceiling function, respectively. Note that when defining the Fibonacci lattice, the index n takes values in the range NS2,,NS21 instead of the usual 1,,NS. Sampling rays from the Fibonacci lattice results in ray tubes sharing approximately the same opening angle 4πNS.

Refer to caption
(a) 100 points.
Refer to caption
(b) 1000 points.
Refer to caption
(c) 10000 points.
Figure 13: Spherical Fibonacci lattice.

The Fibonacci lattice was selected for its simple construction and its benefits over other lattices for numerical integration [12, 13]. Figure 13 shows the spherical Fibonacci lattice with 100, 1000, and 10000 points. The Sionna RT path solver uses 106 points as the default value for NS, and higher values will ensure that more valid paths are found.

3.1.2 Sampling Interaction Types

Within the SBR loop, when a ray intersects the scene geometry, the algorithm generates at most one scattered ray. This constraint is necessary because generating multiple rays at each intersection, such as both reflected and refracted rays, would lead to an exponential increase in computational complexity and memory usage with the depth of the path. Instead, a single interaction type is randomly chosen based on a distribution:

𝒬={q(),q(𝒮),q(𝒯)},where q()+q(𝒮)+q(𝒯)=1 and q()0. (17)

Here, q(χ) represents the probability of selecting the interaction type χ. Importantly, the choice of distribution 𝒬 does not affect the correctness of the calculated paths, which are solely dependent on the propagation environment. However, the choice of distribution 𝒬 significantly impacts the sample efficiency of the ray tracer, which is the number of samples NS needed to compute paths that connect a source to a target and capture the majority of the transported energy. Sampling only one interaction type per intersection may appear limiting, but this is offset by the large number of samples generated from each source. In most scenarios, a high sample count allows for identifying all significant paths.

For each sample n at depth , the interaction type is sampled independently from other interactions and such that the probability of sampling each event type is proportional to the squared amplitudes of the reflection and refraction coefficients:

q() =R2|r|2+|r|2|r|2+|r|2+|t|2+|t|2 (18)
q(𝒮) =S2|r|2+|r|2|r|2+|r|2+|t|2+|t|2
q(𝒯) =|t|2+|t|2|r|2+|r|2+|t|2+|t|2

Here, r, r, t, and t are the Fresnel coefficients (116), S is the scattering coefficient (see Section A.8), and R is the reflection reduction factor (119). This approach ensures that the interaction types that scatter more energy are sampled more frequently–a technique known as importance sampling [14]. This is similar to techniques for importance sampling of light transport paths as used in computer graphics.

Refer to caption
(a) Scene used for the comparison.
Refer to caption
(b) Channel gain at the target.
Figure 14: Comparison of sampling strategies for interaction types. The scene consists of a closed metallic box containing a glass screen, with a source (red ball) and target (green ball) on opposite sides. The box is shown open to visualize the interior. Importance sampling achieves faster convergence of the channel gain compared to uniform sampling.

To illustrate the importance of optimized sampling strategies, we compare uniform sampling, where each interaction type is selected with equal probability, to importance sampling using the scene shown in Figure 14(a). The scene consists of a metallic box containing a glass screen, with a source and target positioned on opposite sides. Diffuse reflection, specular reflection, and refraction are enabled, and the maximum depth L is set to 5. As shown in Figure 14(b), using importance sampling leads to better sample efficiency when compared to uniform sampling, as convergence requires approximately 100× less samples to capture most of the received energy. This demonstrates the benefit of selecting interactions according to the material properties of the scatterers.

3.1.3 Hashing of Specular Chains

As mentioned in Section 3.1 and illustrated in Figure 10, to avoid storing multiple identical specular chain candidates, a path hashing method is used to discard duplicates of previously found candidates “on-the-fly”. Recall that a specular chain candidate is defined by a sequence of interactions with the scene, each characterized by the intersected object on()0, the corresponding intersected primitive mn()0, and the interaction type χn(), as in (15) with d=0, i.e.

cn()=(𝐬,(on(1),mn(1),χn(1)),,(on(),mn(),χn())). (19)

For specular chain candidates, we do not need to store the path vertices. If the candidate leads to a valid path, these vertices will be computed. Invalid candidates will be discarded.

1: hashn(0)0
2: 1
3: while <Stop condition> do SBR loop
4:      
5:      inter_hashn()hash_intersection(on(),mn(),χn())
6:      hashn()hash_update(hashn(1),inter_hashn())
7:      
8:      +1
9: end while
10:
11: procedure hash_intersection(o,m,s)
12:      h1cantor_pair(o,m) Pair object and primitive
13:      h2cantor_pair(h1,s) Pair with interaction type
14:      return h2
15: end procedure
16:
17: procedure hash_update(curr_hash,inter_hash)
18:      return (1373curr_hash+inter_hash) Update rolling hash
19: end procedure
20:
21: procedure cantor_pair(x,y)
22:      zx2+x+2xy+3y+y22
23:      return z
24: end procedure
Algorithm 1 Hashing of specular chains

Algorithm 1 demonstrates how path hashing works during ray tracing to avoid duplicate specular chain candidates. It starts by initializing a hash value hashn(0) to 0 for each sample n=1,,NS being traced. Then, as the sample interacts with objects in the scene, the algorithm computes a hash value inter_hashn() for each intersection based on the object that was hit on(), the specific primitive of that object mn(), and the type of interaction χn(). The overall path hash hashn() gets updated by combining it with the hash of each new intersection, creating a unique identifier for the entire sample up to that point.

Computing the hash after a given intersection is implemented by combining the three components of an intersection into a single hash value through a two-step process using the Cantor pairing function. The Cantor pairing function is a mapping between pairs of natural numbers and single natural numbers [15]. This bijective function guarantees that distinct input pairs always yield distinct output values, making it suitable for combining multiple values into a single hash. Hashing of the interaction first pairs the object and primitive indices, then combines the resulting value with the interaction type.

The hash_update function updates the sample hash value hashn() through a polynomial rolling hash function [16] with a prime base of 1373. For each new intersection, it updates the running hash by multiplying the current hash value by the prime number and adding the new intersection hash. When a specular chain candidate is considered for a target k{1,,NT}, the hash value of the candidate is paired with the target index k to form a new hash value

hashn,k()=cantor_pair(hashn(),k). (20)

This ensures that the specular chain candidate is unique for each target.

Practical Considerations

To track information about previously encountered specular chains, an array of integers of size NH is allocated in memory and initialized to zero, referred to as the hash array. When considering a specular chain candidate for target k with corresponding hash value hashn,k(), the corresponding index in,k() in the hash array is computed as

in,k()=hashn,k()modNH. (21)

If the hash array entry at index in,k() is greater than zero, it indicates that this path has already been encountered and should be discarded. Otherwise, the entry is incremented by one and the candidate is retained for further processing by the image method. It is important to note that the index in,k() is not guaranteed to be unique for different specular chains. When two different specular chains share the same index value despite being different, the path solver will discard one of them. Such an event is referred to as a collision, and can result in the discarding of valid paths. However, when two candidates are identical, their indices values will also be identical.

Refer to caption
Figure 15: The hash array is used to track encountered path candidates. New candidates are stored in the buffer if they haven’t been encountered before. Non-specular chains are added to the buffer without a uniqueness check (not depicted in the figure).

Valid paths and candidates are stored in a buffer of size NB. This buffer holds, for each path, the sequence of interaction types, vertices, intersected objects, primitives, and more. When a valid path is found or a candidate is identified as unique, indicated by its corresponding entry in,k() (21) in the hash array being set to zero, the path data are stored in the buffer. It is important to note that the index in,k() is solely used for indexing the hash array and not for storing path data in the buffer. Instead, path data are stored contiguously in the next available slot of the path buffer, as shown in Figure 15. If the buffer becomes full, any newly found paths or candidates are discarded. Discarding paths rather than overwriting existing ones is based on the reason that paths with lower depth, which are added to the buffer first as the SBR loop advances from =0 to =L, typically carry more energy and should not be replaced by higher depth paths when the buffer becomes full. Consequently, the buffer size NB determines the maximum number of paths and candidates that can be stored.

Due to the substantial amount of data stored for each path, setting NB to excessively high values can lead to memory issues. This necessitates separating the hash array size NH from the buffer size NB. This is because a small hash array size can increase the probability of different hash values mapping to the same array index through the modulo operation (21), leading to collisions. To reduce the risk of collisions, NH is set to

NH=max(NB,106) (22)

ensuring a minimum array size of 106 elements. In the interface of the Sionna RT built-in path solver, NB corresponds to the samples_per_src parameter, and NH corresponds to max_num_paths_per_src.

3.1.4 Potential Improvements

Several potential improvements can be made to enhance the SBR-based candidate generator. To begin with, optimizing the sampling of ray directions can be achieved by incorporating importance sampling based on the transmit antenna pattern for initial ray spawning and the scattering pattern for diffusely reflected rays. This approach is motivated by the substantial sample efficiency gains shown in Section 3.1.2 through the use of importance sampling. By applying optimized sampling strategies for ray directions, further improvements may be realized as illustrated in Figure 16.

Refer to caption
Figure 16: Gain of the 3GPP TR 38.901 [17, Table 7.3-1] antenna pattern for each sample direction on a Fibonacci lattice with 104 points. The majority of sample directions exhibit low gain, indicating that importance sampling of ray directions may be beneficial.
Refer to caption
(a) Considered scene.
Refer to caption
(b) Compute time and number of candidates found vs. the number of targets.
Refer to caption
(c) Compute time and number of candidates found vs. the number of sources and with a constant number of samples per source.
Refer to caption
(d) Compute time and number of candidates found vs. the total number of samples with a constant number of samples in total.
Figure 17: Computation time and number of candidates found as a function of the number of sources and targets. The experiments are conducted on an NVIDIA RTX 4090 GPU.

Moreover, the current method for handling multiple targets involves iterating over all targets during each SBR loop iteration. This approach may be optimized by selecting only targets near intersection points or the source, which will enhance scalability when dealing with a large number of targets. Figure 17(b) illustrates this, showing the compute time of the candidate generator and the average number of candidates per target found as the number of targets varies. In this experiment, the built-in Sionna RT scene “simple street canyon” depicted in Figure 17(a), was used. Targets were sampled uniformly at random on a plane parallel to the ground at an elevation of 1.5 meters. The maximum depth L was set to 5, diffuse reflections were disabled, and the number of samples NS was set to 106. As observed, the compute time increases with the number of targets due to the iteration over all targets in each SBR loop iteration. However, the number of candidates per target remains stable, although with variations due to hash collisions. Note that, as discussed in Section 3.2, most candidates do not result in valid paths.

Scaling with the number of sources presents its own set of challenges. When NS samples are generated per source, the total number of samples produced by the candidate generator becomes NSNO, where NO denotes the number of sources. This results in increased computation time as the number of sources grows, as illustrated in Figure 17(c). However, the number of candidates per source remains stable. In this experiment, a single target is positioned at the center of the scene at an elevation of 1.5 meters, while sources are randomly sampled on a plane parallel to the ground at an elevation of 70 meters, above all buildings. Recall that variations in the number of candidates per source may occur due to collisions. For a comprehensive view, Figure 17(d) presents results where the total number of samples is kept constant at 106, resulting in NS=106NO samples per source. In this scenario, the computation time increases at a much slower rate with the number of sources, but the number of candidates found per source decreases rapidly as the number of sources increases.

3.2 Image Method-based Candidate Processing

The image method processes path candidates to determine valid paths that are specular chains, or end with specular suffixes. Consider a candidate path

cn()=(𝐬,(on(1),mn(1),χn(1)),,(on(d+1),mn(d+1),χn(d+1)),,(on(),mn(),χn()),𝐭Specular suffix) (23)

where denotes the path depth, d is the specular suffix index defined as in (10), and 𝐭 is the target of the path. Recall that the sequence of interactions 𝝌()=(χn(1),,χn()) was determined by the SBR-based candidate generator. For path candidates that end with a specular suffix but are not specular chains (i.e. d>0), the image method processes only the specular suffix. In these cases, the vertex of the last diffuse reflection 𝐯n(d) serves as the source point for the image method calculations. Since the processing algorithm is identical for both specular chains and specular suffixes, we treat them equivalently in the following discussion. For simplicity of notation, we will refer to both types as specular chains and assume d=0 throughout the remainder of this section.

Refer to caption
(a) Computing images of the source.
Refer to caption
(b) Backtracking the path.
Figure 18: Two-step process of the image method: (a) source image computation and (b) path backtracking. Shown in 2D for clarity.

Figure 18 illustrates the image method process, which consists of two main steps. First, the method iteratively computes images of the source by reflecting it across each plane at which a specular reflection occurs. Since refracted paths are modeled without angular deflection, incorporating refraction into the image method is straightforward: refraction events may simply be skipped when computing the source images, as they do not alter the ray’s direction. Then, the algorithm backtracks from the target to determine the actual path vertices by intersecting lines between successive image sources.

Formally, the image method iteratively computes images of the source 𝐬~n(i) for i=0,,, starting from the original source 𝐬:

𝐬~n(i)={𝐬if i=0𝐬~n(i1)2(𝐬~n(i1)𝐩n(i))𝖳𝐧^n(i)if χn(i)=𝐬~n(i1)if χn(i)=𝒯 (24)

Here, 𝐩n(i) represents any point on the plane containing the primitive (on(i),mn(i)), and 𝐧^n(i) denotes the surface’s normal vector. For specular reflections (χn(i)=), the image is computed by reflecting the previous image across the surface plane, while for refractions (χn(i)=𝒯), the image position remains unchanged.

During backtracking, the algorithm traces rays iteratively from the target 𝐭 back to the source 𝐬 by intersecting lines between successive image points. Specifically, a sequence of rays (𝐭~n(i),𝐝^n(i)), i=,,0, is traced according to

𝐭~n(i) ={𝐭if i=𝐯~n(i+1)if 1i< (25)
𝐝^n(i) =𝐬~n(i)𝐭~n(i)𝐬~n(i)𝐭~n(i)2
𝐯~n(i) =intersection((𝐭~n(i),𝐝^n(i)),(on(i),mn(i))),only if i>0

where 𝐯~n(i) is the intersection point between the ray (𝐭~n(i),𝐝^n(i)) and the primitive (on(i),mn(i)), yielding the path vertex 𝐯~n(i) as shown in Figure 18(b). The path is considered valid only if two conditions are met: (i) each ray successfully intersects its corresponding primitive (on(i),mn(i)), and (ii) the line segment between 𝐭~n(i) and 𝐯~n(i) is unobstructed by any other scene geometry. If either condition fails, the path will be discarded. The case i=0 corresponds to the final segment of the path, which connects to the source 𝐬. If the path is valid, then the returned path will be (14).

Refer to caption
(a) Scene for this experiment. Red ball: source, green ball: target.
Refer to caption
(b) Number of candidates and valid paths.
Figure 19: The image method typically discards most candidates.

Typically, most of the candidates are discarded by the image method. This is illustrated in Figure 19, which shows the number of candidates discarded as a function of the path depth for a single source and target. The considered scene is shown in Figure 19(a). The number of samples NS is 106 and diffuse reflection is disabled. As seen in Figure 19(b), most of the candidates are discarded by the image method because only specular chains are generated by the candidate generator, and most of them do not result in valid paths.

3.3 Channel Coefficients, Delays, and Doppler Shifts Computation

The final step of the path solver computes complex-valued channel coefficients and real-valued delays for each valid path (see Figure 9). For clarity, we will focus our discussion on a single valid path with index n and depth , though the same procedure applies to all valid paths computed by both the SBR-based candidate generator and image method. We denote the path vertices as 𝐯n(i),i=1,,, which may correspond to vertices previously computed by the image method (denoted earlier as 𝐯~n(i)). The directions of propagation between vertices are represented by unit vectors 𝐤^n(i),i=0,,, defined as

𝐤^n(i)=𝐯n(i+1)𝐯n(i)𝐯n(i+1)𝐯n(i)2,i=0,, (26)

where 𝐯n(0)=𝐬 is the source and 𝐯n(+1)=𝐭 is the target. Note that these propagation directions may differ from those used during the initial SBR loop described in Section 3.1 due to the refinement by the image method.

Refer to caption
Figure 20: Due to the random sampling of interaction types, only some of the ray tubes that should reach the diffusely reflective surface (Scatterer 2) are traced. In this example, two out of four initial rays are transmitted when interacting with Scatterer 1, while the other two are reflected and reach the diffusely reflective surface.

Ensuring Energy Conservation

As explained in Section 3.1.2, at each interaction point, an interaction type is randomly chosen based on the probability distribution 𝒬 (17). Initially, the energy emitted by the source is distributed across NS samples according to the transmit antenna pattern (see Section A.3). Since only one interaction type is selected at each interaction point, ray tubes that do not match the chosen interaction type are discarded, as illustrated in Figure 20. The remaining ray tubes must therefore compensate for the discarded ones to maintain energy conservation. Specular reflection and refraction on planar surfaces only change the direction of the ray tube’s propagation. Given that there is a finite number of specular chains with a specific depth, the channel gain (5) observed at the target due to specular chains is accurate if all specular chains are identified by the path solver, which is assumed to be the case. This assumption will be reasonable if the number of samples NS is sufficiently large.

In the context of diffuse reflections, an incident ray tube scatters an amount of energy that is determined by its footprint on the diffusely reflective surface (see Section A.8). Due to the random sampling of interaction types, only a portion of the ray tubes that should reach a diffusely reflective surface are actually traced (see Figure 20), which requires compensating for the untraced ones. For a given path p() that includes a diffuse reflection and has a specular suffix index d (10), we denote by Pr(𝝌n(d))==1dq(χn()) the probability of sampling the prefix leading to the last diffuse reflection point, where q() is defined in (17). Consequently, on average, only a fraction Pr(𝝌n(d)) of the ray tubes that should reach the diffusely reflective surface are actually traced. To account for this, the electric field is scaled by 1/Pr(𝝌n(d)) at the point of diffuse reflection.

Algorithm 2 Electric field computation
1: 𝐄n(0)tx_pattern(𝐤^n(0)) Electric field vector
2: τn(0)0 Cumulative delay
3: rn(0)0 Cumulative ray tube length
4: γn(0)1 Cumulative path probability
5: 1
6: while not <Stop condition> do
7:      𝐓n()Evaluate_Material(on(),χn(),𝐄n(1),𝐤^n(1),𝐤^n())
8:      𝐄n()𝐓n()𝐄n(1)
9:      γn()γn(1)qn()(χn())
10:      if χn()=𝒮 then
11:          𝐄n()𝐄n()γn()
12:          γn()1
13:          rn(1)0
14:      end if
15:      rn()rn(1)+𝐯n()𝐯n(1)2
16:      τn()τn(1)+𝐯n()𝐯n(1)2c
17:      +1
18: end while
19: τnτn()+𝐭𝐯n()2c
20: if χn()=𝒮 then
21:      rn(1)0
22: end if
23: rn()rn(1)+𝐭𝐯n()2
24: 𝐄n(r)rx_pattern(𝐤^n())
25: anλ4πrn()((𝐄n())𝖳𝐄n(r))
26: return an,τn

Path Coefficient and Delay Computation

Algorithm 2 details the computation of the electric field propagation along a valid path, leveraging the EM background presented in Appendix A. The algorithm begins by initializing the electric field vector 𝐄n(0) using the transmit antenna’s pattern evaluated in the initial propagation direction 𝐤^n(0). Note that the path solver supports dual polarization by considering two independent electric field vectors for each traced path. The variable τn(0) tracks the cumulative path delay and is initialized to zero, and the variable rn(0) tracks the ray tube length and is also initialized to zero. The variable γn(0) is used to track the cumulative path probability and is initialized to one (see previous paragraph). For each interaction point along the path, the electric field is updated by a transformation matrix 𝐓n(), which is computed based on the intersected object on(), interaction type χn(), incident field 𝐄n(1), and both incident 𝐤^n(1) and scattered 𝐤^n() directions. The cumulative path probability γn() is updated by multiplying it with the interaction probability qn()(χn()). When a diffuse reflection occurs, the electric field is normalized by γn() to maintain energy conservation and γn() is reset to one and the ray tube length rn() to zero. The ray tube length rn() is updated by adding the distance between the current and previous vertex, and the delay τn() is updated by adding the time it takes to travel that distance, where c is the speed of light. After replaying all interactions, the final path segment to the target is incorporated into the delay and ray tube length. Finally, the receive antenna pattern is evaluated for the incoming direction, and the channel coefficient is computed following Section A.6.

Remark

The transformation matrices 𝐓n() and the electric field vectors 𝐄n() are complex-valued, but are implemented using their real-valued representations defined as

[(𝐓n())(𝐓n())(𝐓n())(𝐓n())] (27)

for matrices and

[(𝐄n())(𝐄n())] (28)

for vectors, where () and () denote the real and imaginary parts, respectively.

3.3.1 Handling Multiple Antennas at the Transmitter and Receiver

As explained in the Introduction (Section 1), Sionna RT supports antenna arrays of any size at both the transmitter and receiver, utilizing either synthetic or non-synthetic arrays. In the case of non-synthetic arrays, each transmit antenna is treated as a source and each receive antenna as a target, meaning paths are traced from every transmit antenna, and the solver calculates paths for each transmit-receive antenna pair. For synthetic arrays, paths originate from a single “virtual” source at the center of the transmitter array, and a single “virtual” target is considered at the center of every receiver array. Channel coefficients are then computed by applying phase shifts synthetically. This method allows for efficient scaling with the number of antennas, but it is an approximation that is valid only when the transmitter and receiver array sizes are small relative to the distance from the radio devices to each other and to the scatterers. Formally, for synthetic arrays, the channel matrix for the n-th path is expressed as:

𝐇array,n=an𝐮Arx(𝐮Atx)𝖳 (29)

where an is the channel coefficient for the n-th path, calculated using Algorithm 2. The array response vectors for the transmit (𝐮Atx) and receive (𝐮Arx) antenna arrays are defined as:

𝐮Atx =[ej2πλ(𝐤^n(0))𝖳𝐝1tx,,ej2πλ(𝐤^n(0))𝖳𝐝NAtxtx]𝖳, (30)
𝐮Arx =[ej2πλ(𝐤^n())𝖳𝐝1rx,,ej2πλ(𝐤^n())𝖳𝐝NArxrx]𝖳.

Here, 𝐤^n(0) (𝐤^n()) represents the departure (arrival) direction of the n-th path, NAtx (NArx) denotes the number of antennas in the transmit (receive) array, and 𝐝itx (𝐝irx) indicates the relative position of the i-th antenna element to the virtual source (target) in the transmit (receive) array.

3.3.2 Doppler Shifts

The impact of moving scene objects on the paths can be simulated in two ways. The first approach involves moving objects in small incremental steps along their trajectories and recomputing the propagation paths at each step. While this method provides the highest accuracy, it is computationally expensive. However, when trajectory lengths are small (not exceeding a few wavelengths), a more efficient approach may be used. In this alternative method, we assign a velocity vector 𝒗(o)3 to each object o and compute the time evolution by accumulating Doppler shifts along the propagation paths.

Refer to caption
Figure 21: Each object as well as the source and target has an associated velocity vector that contributes to the total Doppler shift. Shown in 2D for clarity.

Figure 21 illustrates this approach. When replaying the valid paths using Algorithm 2, the Doppler shift for each path n is computed by accumulating the contributions from individual objects:

νn()={0if =0νn(1)+𝒗(on())𝖳(𝐤^n()𝐤^n(1))λif 1< (31)

where λ is the wavelength. This results in the total Doppler shift νn() caused by object movements along the path. The final Doppler shift observed at the target combines the accumulated shift from moving objects with the shifts caused by source and target motion:

νn=νn()+𝒗(𝐬)𝖳𝐤^n(0)λ𝒗(𝐭)𝖳𝐤^n()λ. (32)

where 𝒗(𝐬)3 and 𝒗(𝐭)3 denote the velocity vectors of the source and target, respectively.