# RayTracing

Ray tracing propagation model

## Description

Ray tracing models compute propagation paths using 3-D environment geometry [1][2] . Represent a ray tracing model by
using a `RayTracing`

object.

Ray tracing models:

Are valid from 100 MHz to 100 GHz.

Compute multiple propagation paths. Other propagation models compute only single propagation paths.

Support both 3-D outdoor and indoor environments.

Determine the path loss and phase shift of each ray using electromagnetic analysis, including tracing the horizontal and vertical polarizations of a signal through the propagation path. The path loss includes free-space loss and reflection losses. For each reflection, the model calculates losses on the horizontal and vertical polarizations by using the Fresnel equation, the incident angle, and the relative permittivity and conductivity of the surface material [3][4] at the specified frequency.

You can create ray tracing models that use either the shooting and bouncing rays (SBR) method or the image method.

## Creation

Create a `RayTracing`

object by using the `propagationModel`

function.

## Properties

### Ray Tracing

`Method`

— Ray tracing method

`"sbr"`

(default) | `"image"`

Ray tracing method, specified as one of these values:

`"sbr"`

— Use the shooting and bouncing rays (SBR) method, which supports up to 10 path reflections. SBR calculates approximate propagation paths. The SBR method is generally faster than the image method. The model calculates path loss from free-space loss plus reflection losses due to material and antenna polarizations.`"image"`

— Use the image method, which supports up to 2 path reflections and calculates exact propagation paths. The model calculates path loss from free-space loss plus reflection losses due to material and antenna polarizations.

Specify the maximum number of path reflections by using the `MaxNumReflections`

property.

For more information about differences between the image and SBR methods, see Choose a Propagation Model.

**Data Types: **`char`

| `string`

`AngularSeparation`

— Angular separation of launched rays

`"medium"`

(default) | `"high"`

| `"low"`

Angular separation of launched rays, specified as one of these values:

`"high"`

— Rays have an angular separation in the range [0.9912, 1.1845], measured in degrees, so that the model launches 40,962 rays.`"medium"`

— Rays have an angular separation in the range [0.4956, 0.5923], measured in degrees, so that the model launches 163,842 rays.`"low"`

— Rays have an angular separation in the range [0.2478, 0.2961], measured in degrees, so that the model launches 655,362 rays.

Because the model launches more rays, ray tracing analysis with low angular separation can require more time than ray tracing analysis with high angular separation.

#### Tips

To improve the results, choose a lower angular separation when:

Creating coverage maps using the

`coverage`

function.

#### Dependencies

To specify the angular separation of launched rays, you must specify the
`Method`

property
as `"sbr"`

.

**Data Types: **`char`

| `string`

`MaxNumReflections`

— Maximum number of path reflections

`2`

(default) | integer in the range [0,10]

Maximum number of path reflections to search for using ray tracing, specified as
an integer. Supported values depend on the value of the `Method`

property.

When

`Method`

is`"image"`

, supported values are`0`

,`1`

, and`2`

.When

`Method`

is`"sbr"`

, supported values are in the range [0, 10].

**Data Types: **`double`

`CoordinateSystem`

— Coordinate system of map and site location

`"geographic"`

(default) | `"cartesian"`

Coordinate system of the site location, specified as
`"geographic"`

or `"cartesian"`

. If you specify
`"geographic"`

, define material types by using the `BuildingsMaterial`

and `TerrainMaterial`

properties. If you specify `"cartesian"`

, define material types by
using the `SurfaceMaterial`

property.

**Data Types: **`string`

| `char`

### Buildings Material

`BuildingsMaterial`

— Surface material of geographic buildings

`"concrete"`

(default) | `"perfect-reflector"`

| `"brick"`

| `"wood"`

| `"glass"`

| `"metal"`

| `"custom"`

Surface material of geographic buildings, specified as one of these options:
`"perfect-reflector"`

, `"concrete"`

,
`"brick"`

, `"wood"`

, `"glass"`

,
`"metal"`

, or `"custom"`

. The model uses the
material type to calculate reflection loss where propagation paths reflect off of
building surfaces. For more information, see ITU Permittivity and Conductivity Values for Common Materials.

When `BuildingsMaterial`

is `"custom"`

,
specify the material permittivity and conductivity by using the `BuildingsMaterialPermittivity`

and `BuildingsMaterialConductivity`

properties.

#### Dependencies

To specify `BuildingsMaterial`

, you must set `CoordinateSystem`

to `"geographic"`

.

**Data Types: **`char`

| `string`

`BuildingsMaterialPermittivity`

— Relative permittivity of surface materials of buildings

`5.31`

(default) | nonnegative scalar

Relative permittivity of the surface materials of the buildings, specified as a nonnegative scalar. Relative permittivity is expressed as a ratio of absolute material permittivity to the permittivity of vacuum. The model uses this value to calculate path loss due to reflection. The default value corresponds to concrete at 1.9 GHz.

#### Dependencies

To specify `BuildingsMaterialPermittivity`

, you must set
`CoordinateSystem`

to `"geographic"`

and `BuildingsMaterial`

to `"custom"`

.

**Data Types: **`double`

`BuildingsMaterialConductivity`

— Conductivity of surface materials of buildings

`0.0548`

(default) | nonnegative scalar

Conductivity of the surface materials of the buildings, specified as a nonnegative scalar in Siemens per meter (S/m). The model uses this value to calculate path loss due to reflection. The default value corresponds to concrete at 1.9 GHz.

#### Dependencies

To specify `BuildingsMaterialConductivity`

, you must set
`CoordinateSystem`

to `"geographic"`

and `BuildingsMaterial`

to `"custom"`

.

**Data Types: **`double`

### Terrain Material

`TerrainMaterial`

— Surface material of geographic terrain

`"concrete"`

(default) | `"perfect-reflector"`

| `"brick"`

| `"water"`

| `"vegetation"`

| `"loam"`

| `"custom"`

Surface material of the geographic terrain, specified as one of these:
`"perfect-reflector"`

, `"concrete"`

,
`"brick"`

, `"water"`

,
`"vegetation"`

, `"loam"`

, or
`"custom"`

. The model uses the material type to calculate
reflection loss where propagation paths reflect off of terrain surfaces. For more
information, see ITU Permittivity and Conductivity Values for Common Materials.

When `TerrainMaterial`

is `"custom"`

, specify
the material permittivity and conductivity by using the `TerrainMaterialPermittivity`

and `TerrainMaterialConductivity`

properties.

#### Dependencies

To specify `TerrainMaterial`

, you must set `CoordinateSystem`

to `"geographic"`

.

**Data Types: **`char`

| `string`

`TerrainMaterialPermittivity`

— Relative permittivity of terrain materials

`5.31`

(default) | nonnegative scalar

Relative permittivity of the terrain material, specified as a nonnegative scalar. Relative permittivity is expressed as a ratio of absolute material permittivity to the permittivity of vacuum. The model uses this value to calculate path loss due to reflection. The default value corresponds to concrete at 1.9 GHz.

#### Dependencies

To specify `TerrainMaterialPermittivity`

, you must set
`CoordinateSystem`

to `"geographic"`

and `TerrainMaterial`

to `"custom"`

.

**Data Types: **`double`

`TerrainMaterialConductivity`

— Conductivity of terrain materials

`0.0548`

(default) | nonnegative scalar

Conductivity of the terrain material, specified as a nonnegative scalar in Siemens per meter (S/m). The model uses this value to calculate path loss due to reflection. The default value corresponds to concrete at 1.9 GHz.

#### Dependencies

To specify `TerrainMaterialConductivity`

, you must set
`CoordinateSystem`

to `"geographic"`

and set `TerrainMaterial`

to `"custom"`

.

**Data Types: **`double`

### Surface Material

`SurfaceMaterial`

— Surface material of Cartesian map surface

`"plasterboard"`

(default) | `"perfect-reflector"`

| `"ceilingboard"`

| `"chipboard"`

| `"floorboard"`

| `"concrete"`

| `"brick"`

| `"wood"`

| `"glass"`

| `"metal"`

| `"water"`

| `"vegetation"`

| `"loam"`

| `"custom"`

Surface material of Cartesian map surface, specified as one of these:
`"plasterboard"`

,`"perfect-reflector"`

,
`"ceilingboard"`

, `"chipboard"`

,
`"floorboard"`

, `"concrete"`

,
`"brick"`

, `"wood"`

, `"glass"`

,
`"metal"`

, `"water"`

,
`"vegetation"`

, `"loam"`

, or
`"custom"`

. The model uses the material type to calculate
reflection loss where propagation paths reflect off of surfaces. For more information,
see ITU Permittivity and Conductivity Values for Common Materials.

When `SurfaceMaterial`

is `"custom"`

, specify
the material permittivity and conductivity by using the `SurfaceMaterialPermittivity`

and `SurfaceMaterialConductivity`

properties.

#### Dependencies

To specify `SurfaceMaterial`

, you must set `CoordinateSystem`

to `"cartesian"`

.

**Data Types: **`char`

| `string`

`SurfaceMaterialPermittivity`

— Relative permittivity of surface materials

`2.94`

(default) | nonnegative scalar

Relative permittivity of the surface material, specified as a nonnegative scalar. Relative permittivity is expressed as a ratio of absolute material permittivity to the permittivity of vacuum. The model uses this value to calculate path loss due to reflection. The default value corresponds to plaster board at 1.9 GHz.

#### Dependencies

To specify `SurfaceMaterialPermittivity`

, you must set
`CoordinateSystem`

to `"cartesian"`

and `SurfaceMaterial`

to `"custom"`

.

**Data Types: **`double`

`SurfaceMaterialConductivity`

— Conductivity of surface materials

`0.0183`

(default) | nonnegative scalar

Conductivity of the surface material, specified as a nonnegative scalar in Siemens per meter (S/m). The model uses this value to calculate path loss due to reflection. The default value corresponds to plaster board at 1.9 GHz.

#### Dependencies

To specify `SurfaceMaterialConductivity`

, you must set
`CoordinateSystem`

to `"cartesian"`

and set `SurfaceMaterial`

to `"custom"`

.

**Data Types: **`double`

## Examples

### Model Propagation Paths Using SBR and Image Methods

Show reflected propagation paths in Chicago by using the SBR and image methods.

Create a Site Viewer with buildings in Chicago. For more information about the osm file, see [1].

viewer = siteviewer("Buildings","chicago.osm");

Create a transmitter site on a building and a receiver site near another building.

tx = txsite("Latitude",41.8800, ... "Longitude",-87.6295, ... "TransmitterFrequency",2.5e9); show(tx) rx = rxsite("Latitude",41.8813452, ... "Longitude",-87.629771, ... "AntennaHeight",30); show(rx)

Create a ray tracing model. Use the image method and calculate paths with up to one reflection. Then, display the propagation paths.

pm = propagationModel("raytracing","Method","image", ... "MaxNumReflections",1); raytrace(tx,rx,pm)

For this ray tracing model, there is one propagation path from the transmitter to the receiver.

Update the ray tracing model to use the SBR method and to calculate paths with up to two reflections. Display the propagation paths.

```
pm.Method = "sbr";
pm.MaxNumReflections = 2;
clearMap(viewer)
raytrace(tx,rx,pm)
```

The updated ray tracing model shows three propagation paths from the transmitter to the receiver.

**Appendix**

[1] The osm file is downloaded from https://www.openstreetmap.org, which provides access to crowd-sourced map data all over the world. The data is licensed under the Open Data Commons Open Database License (ODbL), https://opendatacommons.org/licenses/odbl/.

### Model Coverage Using Ray Tracing

Create a Site Viewer with buildings in Chicago. For more information about the `.osm`

file, see [1].

viewer = siteviewer("Buildings","chicago.osm");

Create a transmitter site on a building and a receiver site near another building.

tx = txsite("Latitude",41.8800, ... "Longitude",-87.6295, ... "TransmitterFrequency",2.5e9); show(tx)

Create a ray tracing model. By default, ray tracing models use the SBR method. Set the maximum number of reflections to `2`

. Then, display the coverage map.

pm = propagationModel("raytracing","Method","sbr", ... "MaxNumReflections",2); coverage(tx,pm,"SignalStrengths",-100:5)

**Appendix**

[1] The `.osm`

file is downloaded from https://www.openstreetmap.org, which provides access to crowd-sourced map data all over the world. The data is licensed under the Open Data Commons Open Database License (ODbL), https://opendatacommons.org/licenses/odbl/.

## More About

### Shooting and Bouncing Rays Method

The shooting and bouncing rays (SBR) method supports calculation of approximate propagation paths for up to 10 path reflections. The locations of receiver sites calculated by the SBR method are not exact. The accuracy of the calculated propagation paths decreases as the length of the paths increases.

Computational complexity increases linearly with the number of reflections. As a result, the SBR method is generally faster than the image method.

This figure illustrates the SBR method for calculating propagation
paths from a transmitter, *Tx*, to a receiver,
*Rx*.

The SBR method launches many rays from a geodesic sphere centered at
*Tx*. The geodesic sphere enables the model to launch rays that are
approximately uniformly spaced.

Then, the method traces every ray from *Tx* and can
model different types of interactions between the rays and surrounding objects, such as
reflections, diffractions, refractions, and scattering. Note that the implementation
considers only reflections.

When a ray hits a flat surface, shown as

*R*, the ray reflects based on the law of reflection.When a ray hits an edge, shown as

*D*, the ray spawns many diffracted rays based on the law of diffraction [5][6]. Each diffracted ray has the same angle with the diffracting (sharp) edge as the incident ray. The diffraction point then becomes a new launching point and the SBR method traces the diffracted rays in the same way as the rays launched from*Tx*. A continuum of diffracted rays form a cone around the diffracting edge, which is commonly known as a*Keller cone*[6]. The current implementation of the SBR method does not consider diffractions.

For each launched ray, the method surrounds *Rx* with a sphere, called
a reception sphere, with a radius that is proportional to the angular separation of the
launched rays and the distance the ray travels. If the ray intersects the sphere, then the
model considers the ray a valid path from *Tx* to *Rx*.

### Image Method

The image method supports up to two path reflections and calculates exact propagation paths. Computational complexity increases exponentially with the number of reflections.

This figure illustrates the image method for calculating the propagation path of a single
reflection ray for the same transmitter and receiver as the SBR method. The image method
locates the image of *Tx* with respect to a planar reflection surface,
*Tx'*. Then, the method connects *Tx'* and
*Rx* with a line segment. If the line segment intersects the planar
reflection surface, shown as *R* in the figure, then a valid path from
*Tx* to *Rx* exists. The method determines paths with
multiple reflections by recursively extending these steps.

### ITU Permittivity and Conductivity Values for Common Materials

ITU-R P.2040-1 [3] and ITU-R P.527-5 [4] present methods, equations, and values used to calculate real relative permittivity, conductivity, and complex relative permittivity for common materials.

For information about the values computed for building materials specified in ITU-R P.2040-1, see

`buildingMaterialPermittivity`

.For information about the values computed for terrain materials specified in ITU-R P.527-5, see

`earthSurfacePermittivity`

.

## Compatibility Considerations

### Default modeling method is shooting and bouncing method

*Behavior changed in R2021b*

Starting in R2021b, when you create a propagation model using the syntax
`propagationModel('raytracing')`

, MATLAB^{®} returns a `RayTracing`

model with the
`Method`

value set to `'sbr'`

and two reflections
(instead of `'image'`

and one reflection, as in previous releases).

To create ray tracing propagation models that use the image method, use the syntax
`propagationModel('raytracing','Method','image')`

.

## References

[1] Yun, Zhengqing, and Magdy F. Iskander. “Ray Tracing for Radio Propagation Modeling: Principles and Applications.” *IEEE Access* 3 (2015): 1089–1100. https://doi.org/10.1109/ACCESS.2015.2453991.

[2] Schaubach, K.R., N.J. Davis, and T.S. Rappaport. “A Ray Tracing Method for Predicting Path Loss and Delay Spread in Microcellular Environments.” In *[1992 Proceedings] Vehicular Technology Society 42nd VTS Conference - Frontiers of Technology*, 932–35. Denver, CO, USA: IEEE, 1992. https://doi.org/10.1109/VETEC.1992.245274.

[3] International Telecommunications Union Radiocommunication
Sector. *Effects of building materials and structures on radiowave propagation above
about 100MHz.* Recommendation P.2040-1. ITU-R, approved July 29, 2015.
https://www.itu.int/rec/R-REC-P.2040-1-201507-I/en.

[4] International Telecommunications Union Radiocommunication
Sector. *Electrical characteristics of the surface of the Earth*.
Recommendation P.527-5. ITU-R, approved August 14, 2019.
https://www.itu.int/rec/R-REC-P.527-5-201908-I/en.

[5] International Telecommunications Union Radiocommunication Sector. *Propagation by diffraction*. Recommendation P.526-15. ITU-R, approved October 21, 2019. https://www.itu.int/rec/R-REC-P.526-15-201910-I/en.

[6] Keller, Joseph B. “Geometrical Theory of Diffraction.” *Journal of the Optical Society of America* 52, no. 2 (February 1, 1962): 116. https://doi.org/10.1364/JOSA.52.000116.

## See Also

### Functions

`propagationModel`

|`raytrace`

|`coverage`

|`sigstrength`

|`buildingMaterialPermittivity`

|`earthSurfacePermittivity`

### Objects

**Introduced in R2017b**

## Open Example

You have a modified version of this example. Do you want to open this example with your edits?

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

# Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)